و مشکل سوم مربوط به
پردازش تصویر و اجرای Solver روی
برای همین تمام تغییرات مربوط به UI رو با
WindowManager بود.پردازش تصویر و اجرای Solver روی
Dispatchers.IO انجام میشد ولی نمایش نتیجه یا برگردوندن دکمه شناور از همون Thread پسزمینه باعث کرش میشد؛ چون WindowManager.addView() باید روی Threadای اجرا بشه که Looper داشته باشه، یعنی در اینجا Main Thread.برای همین تمام تغییرات مربوط به UI رو با
withContext(Dispatchers.Main) اجرا کردم:و اینطوری کل ماجرا از یک ایده برای رنده کردن حریفها، تبدیل شد به یک اپ کاملا On-Device که بدون اینترنت، بدون مدل Machine Learning و بدون خروج از بازی، صفحه رو میخونه و بهترین کلمات رو در کمتر از چند لحظه نمایش میده ✨🌞🌻
🔥1
و خب این هم از قصه این پروژه :))
چیزی که از این ماجرا یاد گرفتم این بود که همیشه پیچیدهترین یا ترندترین راهحل، بهترین راهحل نیست.
اولین چیزی که به ذهنم رسید OCR و مدلهای Machine Learning بود؛ ولی وقتی مسئله رو دقیقتر شکستم، دیدم با یک فضای کاملا محدود طرفیم: فونت ثابته، تعداد کاراکترها مشخصه، شکل تایلها تغییر نمیکنه و همهچیز قابل پیشبینیه.
اینجا یک راهحل سادهتر مثل Template Matching، هم سریعتر بود، هم دقیقتر، هم سبکتر و هم دردسر کمتری داشت.
بخش جالب دیگه برام این بود که تقریبا هیچکدوم از مشکلات اصلی پروژه، اون جایی نبودن که اول انتظارش رو داشتم.
پیدا کردن Grid یا نوشتن DFS خیلی زودتر از چیزی که فکر میکردم انجام شد؛ ولی یک نقطه کوچک روی حرف «خ»، چند پیکسل سایه گوشه تایل، تفاوت
بزرگترین چالش پروژه هم دقیقا همین بود: ساختن الگوریتمی که روی یک اسکرینشات درست کار کنه زیاد سخت نیست؛ سختی اصلی اینه که روی رزولوشنهای مختلف، حروف مشابه، Thresholdهای متفاوت، محدودیتهای Android 14 و تمام Edge Caseهای ریز همچنان پایدار بمونه.
از نظر فنی، این پروژه باعث شد خیلی بهتر با پردازش تصویر، Connected Componentها، Template Matching، ساختار Trie، Prefix Pruning، MediaProjection و محدودیتهای Overlay در اندروید آشنا بشم.
ولی فارغ از بخش فنی، حسی که نسبت بهش دارم بیشتر از جنس رضایت ساختنه.
این پروژه از یک بیحوصلگی وسط خاموشی دیجیتال و یک بازی رندوم شروع شد و کمکم تبدیل شد به چیزی که چند حوزه مختلف رو به هم وصل میکرد؛ از پردازش تصویر و الگوریتم گرفته تا توسعه اندروید و طراحی یک ابزار واقعی که همون لحظه قابل استفاده بود.
و فکر کنم جذابترین بخش برنامهنویسی برای من دقیقا همینه...
اینکه یک مسئله کاملا معمولی و حتی یکم مسخره رو ببینی، با خودت بگی «میشه براش یه چیزی ساخت»، و چند روز بعد ببینی یک دکمه شناور روی صفحه داری که در چند میلیثانیه ۵۲ هزار کلمه رو زیر و رو میکنه تا کمکت کنه یک نفر ناشناس رو توی یک بازی موبایلی رنده کنی :))
ارزشش رو داشت؟ از نظر منطقی و اقتصادی احتمالا نه چون فقط ۳ ۴ روز ازش استفاده کردم؛ ولی از نظر چیزهایی که یاد گرفتم و لذتی که از ساختنش بردم، قطعا آره...
امیدوارم برای شما هم جالب بوده باشه و مرسی که تا اینجا خوندید این رشته پیام رو و تحمل کردید 😁❤️
چیزی که از این ماجرا یاد گرفتم این بود که همیشه پیچیدهترین یا ترندترین راهحل، بهترین راهحل نیست.
اولین چیزی که به ذهنم رسید OCR و مدلهای Machine Learning بود؛ ولی وقتی مسئله رو دقیقتر شکستم، دیدم با یک فضای کاملا محدود طرفیم: فونت ثابته، تعداد کاراکترها مشخصه، شکل تایلها تغییر نمیکنه و همهچیز قابل پیشبینیه.
اینجا یک راهحل سادهتر مثل Template Matching، هم سریعتر بود، هم دقیقتر، هم سبکتر و هم دردسر کمتری داشت.
بخش جالب دیگه برام این بود که تقریبا هیچکدوم از مشکلات اصلی پروژه، اون جایی نبودن که اول انتظارش رو داشتم.
پیدا کردن Grid یا نوشتن DFS خیلی زودتر از چیزی که فکر میکردم انجام شد؛ ولی یک نقطه کوچک روی حرف «خ»، چند پیکسل سایه گوشه تایل، تفاوت
ک و ك در Unicode یا یک null بیسروصدا از JNI میتونست کل پایپلاین رو خراب کنه.بزرگترین چالش پروژه هم دقیقا همین بود: ساختن الگوریتمی که روی یک اسکرینشات درست کار کنه زیاد سخت نیست؛ سختی اصلی اینه که روی رزولوشنهای مختلف، حروف مشابه، Thresholdهای متفاوت، محدودیتهای Android 14 و تمام Edge Caseهای ریز همچنان پایدار بمونه.
از نظر فنی، این پروژه باعث شد خیلی بهتر با پردازش تصویر، Connected Componentها، Template Matching، ساختار Trie، Prefix Pruning، MediaProjection و محدودیتهای Overlay در اندروید آشنا بشم.
ولی فارغ از بخش فنی، حسی که نسبت بهش دارم بیشتر از جنس رضایت ساختنه.
این پروژه از یک بیحوصلگی وسط خاموشی دیجیتال و یک بازی رندوم شروع شد و کمکم تبدیل شد به چیزی که چند حوزه مختلف رو به هم وصل میکرد؛ از پردازش تصویر و الگوریتم گرفته تا توسعه اندروید و طراحی یک ابزار واقعی که همون لحظه قابل استفاده بود.
و فکر کنم جذابترین بخش برنامهنویسی برای من دقیقا همینه...
اینکه یک مسئله کاملا معمولی و حتی یکم مسخره رو ببینی، با خودت بگی «میشه براش یه چیزی ساخت»، و چند روز بعد ببینی یک دکمه شناور روی صفحه داری که در چند میلیثانیه ۵۲ هزار کلمه رو زیر و رو میکنه تا کمکت کنه یک نفر ناشناس رو توی یک بازی موبایلی رنده کنی :))
ارزشش رو داشت؟ از نظر منطقی و اقتصادی احتمالا نه چون فقط ۳ ۴ روز ازش استفاده کردم؛ ولی از نظر چیزهایی که یاد گرفتم و لذتی که از ساختنش بردم، قطعا آره...
امیدوارم برای شما هم جالب بوده باشه و مرسی که تا اینجا خوندید این رشته پیام رو و تحمل کردید 😁❤️
👏6🔥2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤🔥1
Armin's Notes 🪴
Photo
این، سری ششم از نُهمین سریِ یک لگوی خیلی باحال و Cozy هست
داستانش از این قراره که ۹ بخش یک خونه رو توی ۹ سِری عرضه کردن و همه اینا قابلیت plug شدن به پارت بعدی / قبلی رو دارن
درست کردنش خیلی راحته و توی کمتر از ۱ ساعت انجام میشه
یه چراغ سقفی داخلش داره که با باتری سکهای کار میکنه و میتونید با پیچوندن لامپ توی هُلدرش چراغ سقفی رو روشن کنید
درکل که حس خیلی خوبی میده و درست کردنش هم کلی باحاله =) میتونید بگیرید و به عنوان یه ایتم دکوراتیو توی خونه ازش استفاده کنید
هم فال و هم تماشا :))
داستانش از این قراره که ۹ بخش یک خونه رو توی ۹ سِری عرضه کردن و همه اینا قابلیت plug شدن به پارت بعدی / قبلی رو دارن
درست کردنش خیلی راحته و توی کمتر از ۱ ساعت انجام میشه
یه چراغ سقفی داخلش داره که با باتری سکهای کار میکنه و میتونید با پیچوندن لامپ توی هُلدرش چراغ سقفی رو روشن کنید
درکل که حس خیلی خوبی میده و درست کردنش هم کلی باحاله =) میتونید بگیرید و به عنوان یه ایتم دکوراتیو توی خونه ازش استفاده کنید
هم فال و هم تماشا :))
🔥3
درود - من نیازمند یاری سبز اکانتهای گیتهابتون هستم 🌱
لطفا اگه براتون امکانپذیره لینک این issue رو باز کنید و پایینش یک 👍 بزنید.
پیشاپیش بابت کمکتون مچکرم🙏
https://github.com/espressif/esp-sr/issues/247
لطفا اگه براتون امکانپذیره لینک این issue رو باز کنید و پایینش یک 👍 بزنید.
پیشاپیش بابت کمکتون مچکرم
https://github.com/espressif/esp-sr/issues/247
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
[Custom wake word request] ESP32-S3 / WakeNet9 or WakeNet10: “Hey BUDI” (English) · Issue #247 · espressif/esp-sr
Checklist Checked the issue tracker for similar issues to ensure this is not a duplicate. Provided a clear description of your suggestion. Included any relevant context or examples. Issue or Sugges...
👍4