تصور کنید در میانهی یک طوفان شدید در پنومپن هستید، جایی که سیگنالهای ۴G ناپدید شدهاند اما هر گودال کوچک آب، به پرورشگاهی رایگان برای پشههای ناقل تب دنگی تبدیل شده است. در چنین شرایطی، داشتن ابزاری که بدون نیاز به اینترنت، خطرات محیطی را شناسایی کند، تفاوت بین سلامت و بیماری است.
این دقیقاً همان نقطهای است که MusPatrol (به خمر: មូស Patrol؛ که mus به معنای پشه است) وارد میدان میشود؛ یک وباپلیکیشن آفلاین تخصصی که توسط دانشجویی در پنومپن برای حذف محلهای تخمریزی پشههای «ایدز» (Aedes) پس از بارانهای شدید طراحی شده است. این ابزار با استفاده از مدلهای بینایی و زبانی روی دستگاه، گشتزنیهای روتین در حیاط خانهها را به یک عملیات بهداشتی ساختاریافته تبدیل میکند که بر اساس پروتکل «تخلیه، سابیدن، پوشاندن، دور ریختن» (Tip, scrub, cover, toss) عمل میکند.
در کامبوج، فصل بارندگی هر سال یک بحران بهداشت عمومی ایجاد میکند. توسعهدهنده این پروژه، اقلیم محلی را به شوخی «داغ، و داغ همراه با تب دنگی» توصیف میکند. او توضیح میدهد که پس از رگبارهای ناگهانی — جایی که آسمان ممکن است بارانِ یک ماه را در بیست دقیقه خالی کند — هر سطل، زیردانی گلدان، لاستیک قدیمی و پوست نارگیل در خیابان به یک «مهدکودک پشهها با اجاره رایگان» تبدیل میشود. پشههای ایدز تخمهایی میگذارند که به دیوارههای این ظروف کوچک، ساکن و نسبتاً تمیز میچسبند.
در حالی که توصیههای رسمی بهداشتی به خوبی شناخته شدهاند، اما تلاش دستی برای بررسی تکتک زیردانیها یا لاستیکها اغلب نادیده گرفته میشود. MusPatrol این مشکل را با بازیوار کردن (Gamification) فرآیند و ارائه شناسایی فوری و به کمک هوش مصنوعی از ظروف پرخطر حل میکند. طبق گزارش پروژه منتشر شده بین ۹ تا ۱۱ اکتبر ۲۰۲۶ برای چالش Open-Source AI در هفته اول Hacktoberfest با عنوان «Touch Grass»، این اپلیکیشن بهصورت یک سایت استاتیک و بدون بکاِند ساخته شده است تا تصاویر حساس از حیاط خانهها هرگز از دستگاه کاربر خارج نشود.
همانطور که در تحلیلهای قبلی ما دربارهی رایانش لبه (Edge Computing) اشاره کردیم، انتقال پردازش به دستگاه کاربر، نقطه شکست مدلهای ابری در شرایط بحرانی را از بین میبرد؛ یعنی تمایل سیگنالهای ۴G به قطع شدن دقیقاً در همان طوفانهایی که گشتزنی پشهها را ضروری میکند. این رویکرد مشابه تجربهای است که در اجرای منتور کدنویسی KODA روی گوشیهای ارزانقیمت مشاهده کردیم، جایی که قدرت پردازش محلی محدودیتهای سختافزاری و شبکهای را به چالش میکشد. در MusPatrol، کاربر تنها عکس میگیرد، نوع ظرف را تأیید میکند و دستورالعمل بهداشتی را میخواند؛ بدون اینکه منتظر پاسخ یک سرور دوردست در شرایط قطع شبکه بماند. برای اینکه برنامه در مورد زمان صرف شده صادق باشد، یک تایمر «روشن بودن صفحه» در طول گشتزنی اجرا میشود.
سازوکار بینایی ماشین
این اپلیکیشن برای طبقهبندی تصاویر از مدل CLIP (نسخه Xenova/clip-vit-base-patch32 از طریق transformers.js 4.3.1) استفاده میکند. برای اینکه برنامه در مرورگرهای موبایل سبک باقی بماند، توسعهدهنده بردار معنایی (Embedding) — که مثل یک کارت معرفی عددی برای هر واژه است و میگوید این کلمه همسایهی چه کلمات دیگری است — را برای ۱۱ برچسب خاص در زمان ساخت برنامه با استفاده از یک اسکریپت (scripts/embed-labels.ts) پیشمحاسبه کرده است. این اسکریپت پرامپتهای انگلیسی را جاسازی کرده، میانگین آنها را میگیرد، نتیجه را L2-normalise میکند و یک فایل JSON با حجم ۱۱۸ کیلوبایت میسازد.
- اندازه مدل: برج بینایی یک نسخه کوانتیده (Quantized) q4f16 با حجم کل ۵۳.۳ مگابایت است.
- اجرا: مرورگر مدل بینایی و ONNX Runtime WASM (حدود ۲۵.۶ مگابایت) را دانلود میکند.
- بهینگی: چون بخش متنی پیشمحاسبه شده، مرورگر هرگز برج متنی را دانلود نمیکند و طبقهبندی تنها با یک محاسبه بردار تصویر و یازده شباهت کسینوسی (Cosine Similarity) انجام میشود.
- صحت: در تستهای اولیه روی ۱۰ عکس از Wikimedia Commons در یک CPU نود (Node)، مدل به صحت ۸ از ۱۰ در رتبه اول (top-1) و ۱۰ از ۱۰ در رتبه سوم (top-3) دست یافت. دو مورد خطا شامل شناسایی یک تشت پلاستیکی به عنوان «ظرف حیوانات خانگی» و یک ظرف سگ به عنوان «سطل» بود.
منطق بهداشتی قطعی
نکته حیاتی این است که هوش مصنوعی در MusPatrol تصمیمگیرنده نهایی درباره اقدام بهداشتی نیست. توسعهدهنده یک جدول قوانین در TypeScript (src/rules/rules.ts) پیاده کرده تا دقت پزشکی و حساسیتهای فرهنگی حفظ شود. وقتی کاربر نوع ظرف و وجود آب را تأیید میکند، یک تابع ساده دستورالعمل خاصی را برمیگرداند: تخلیه (TIP)، سابیدن (SCRUB)، پوشاندن (COVER)، دور ریختن (TOSS)، تعویض (CHANGE) یا گزارش (REPORT).
دستورات مربوط به هر ظرف:
- سطل یا تشت پلاستیکی: تخلیه + سابیدن (سابیدن تنها در صورتی که خشک باشد، زیرا تخمها به دیوارهها میچسبند).
- زیردانی گلدان: تخلیه (یا پر کردن با شن).
- لاستیک قدیمی: دور ریختن (بازیافت یا ایجاد سوراخهای زهکشی).
- پوست نارگیل / لیوان / بطری: دور ریختن.
- خمره آب (ពាង) / بشکه: پوشاندن + سابیدن.
- ظرف تله مورچه / ظرف حیوانات خانگی: تعویض آب.
- آب پیشکشی خانه ارواح (Spirit-house): تعویض آب، با احترام. قوانین صراحتاً ذکر میکنند: «هرگز پیشکشی را دور نریزید»، زیرا پیشنهادِ دور ریختن پیشکشی توسط هوش مصنوعی میتواند باعث شود کاربر «از خانه مادربزرگش اخراج شود».
- ناودان / گودال روی چادر: تخلیه یا پاکسازی.
- زهک کنار جاده: گزارش به «سانگات» (شورای محلی)، هرچند برای پشههای ایدز اولویت پایینی دارد.
- چمن / زمین خشک: «عالی است. کمی با چمنها در تماس باش» (اشاره به عبارت Touch Grass).
روایتگری با Gemma 4
برای کاربرانی که مرورگر آنها از WebGPU پشتیبانی میکند، امکان دانلود مدل Gemma 4 E2B (تحت لایسنس Apache-2.0) از طریق MediaPipe LLM Inference وجود دارد. فایل مدل ۲,۰۰۳,۶۹۷,۶۶۴ بایت (حدود ۲ گیگابایت) است و تنها در صورتی دانلود میشود که کاربر در صفحه گزارش روی گزینه «Load Gemma & rewrite» ضربه بزند.
این مدل زبانی بزرگ (LLM) — شبیه کتابخانهداری که میلیاردها صفحه را خوانده و حالا با همان لحن جواب میدهد — بهجای شاهد بودن، نقش یک «راوی» را ایفا میکند و گزارشهای طنزآمیزی از گشتزنی مینویسد و از شوخیهای دوستانه درباره «اخراج» پشهها یا مالکان «مهدکودکها» استفاده میکند.
برای جلوگیری از توهم (Hallucination) — یعنی وقتی مدل با اطمینان چیزی میگوید که اصلاً وجود ندارد — یک تابع اعتبارسنجی به نام validateReport() طراحی شده است. اگر Gemma 4 ظرفی را ذکر کند که در واقع ثبت نشده (مثلاً ذکر لاستیک در حالی که هیچ لاستیکی پیدا نشده) یا تعدادی را ارائه دهد که با لاگ JSON مطابقت ندارد، برنامه متن هوش مصنوعی را دور ریخته و به یک قالب قطعی (Deterministic) بازمیگردد.
استراتژیهای آفلاین و حریم خصوصی
این برنامه با Vite، React و TypeScript ساخته شده و از Bun به عنوان محیط اجرا و vite-plugin-pwa برای قابلیتهای اپلیکیشن وب پیشرونده استفاده میکند. برنامه بهصورت یک بیلد استاتیک روی Vercel میزبانی میشود (حجم پوشه dist حدود ۲۸.۹ مگابایت است که بیشتر آن مربوط به WASM است).
استراتژیهای آفلاین:
- پوسته برنامه (App Shell): افزونه
vite-plugin-pwaحدود ۲۸ ورودی (تقریباً ۱۰۹۶ کیلوبایت) را پیشکش (Precache) میکند. - مدیریت WASM: چون حجم ONNX Runtime WASM (۲۶,۸۶۱,۷۷۷ بایت) از سقف ۸ مگابایتی Workbox برای پیشکش فراتر میرود، پس از اولین طبقهبندی توسط مرورگر کش میشود.
- دادههای آبوهوایی: صفحه اصلی از Open-Meteo بررسی میکند که آیا در ۳ ساعت گذشته باران باریده است یا خیر و زمان تا غروب خورشید را محاسبه میکند تا «پنجره گشتزنی» را تعریف کند. این پاسخها از استراتژی stale-while-revalidate استفاده کرده و در IndexedDB ذخیره میشوند تا در زمان نبود سیگنال، جایگزین شوند.
- حریم خصوصی: عکسها روی دستگاه میمانند و هیچ سروری برای آپلود وجود ندارد.
عملکرد و محدودیتها
اندازهگیریهای اولیه روی یک ماشین مجازی (VM) ابری، زمان بارگذاری اول را ۲۶ تا ۲۸ ثانیه نشان داد، در حالی که طبقهبندیهای بعدی تقریباً ۷۷۷ میلیثانیه زمان بردند. در اجرای مجدد روی یک VM دیگر، زمان بارگذاری به حدود ۸ ثانیه کاهش یافت که نشان میدهد زمان بارگذاری اول به شبکه و CPU بستگی دارد. روی یک CPU نود، میانگین تأخیر برای ۱۰ عکس Commons برابر با ۴۳ میلیثانیه بود.
با این حال، توسعهدهنده اشاره کرد که تستهای میدانی روی دستگاههای موبایل واقعی در پنومپن هنوز تکمیل نشده است. تمام اندازهگیریهای فعلی روی VM انجام شده است. محیط بیلد فاقد WebGPU بود (navigator.gpu در Chrome بدون سر یا headless وجود نداشت)، به این معنی که توسعهدهنده هنوز سرعت تولید توکن Gemma 4 را روی یک دستگاه فیزیکی بنچمارک نکرده است. برنامه پیش از پیشنهاد دانلود Gemma، مقدار navigator.gpu و حافظه دستگاه را بررسی میکند تا از سازگاری مطمئن شود.
شکافهای فعلی و کارهای آینده
- قابلیتهای مفقود: برنامه در حال حاضر فاقد اعلانهای Push، نقشهها، حسابهای کاربری، تشخیص لارو (larvae) و خطوط صوتی ElevenLabs است. همچنین فاقد یک مدل «نگاه دوم» در سمت سرور است.
- کمبود داده: دقت ۸/۱۰ بر اساس مجموعه داده بسیار کوچکی از ۱۰ عکس Commons به دست آمده است؛ برای ارزیابی درست، عکسهای واقعی از حیاطها نیاز است. توسعهدهنده قصد دارد پس از یک گشتزنی واقعی، فایل
docs/field-test-log.mdرا تکمیل کند. - زبان: کارتهای دستورالعمل شامل جملات کوتاه خمر هستند، اما در
docs/khmer-review.mdبه عنوان «نیازمند بررسی» علامتگذاری شدهاند. یادداشتهای مربوط به همسایهها (مثلاً: «برادر، لاستیک قدیمی تو دارد یک مهدکودک پشه اداره میکند...») در حال حاضر انگلیسی با جایگذارهای رومیسازی شده هستند. - الهامبخش: توسعهدهنده از Tonsai-1B (یک نسخه پیشآموزش یافته از Gemma 3 1B برای زبان خمر) به عنوان الهامی برای آینده مدلهای وزنباز در زبان خمر یاد کرد.
ارزش نوآوری باز
این پروژه نشاندهنده تغییری به سمت «حریم خصوصی از طریق معماری» است. با استفاده از مدلهای وزنباز مانند CLIP و Gemma 4، این ابزار خدماتی رایگان ارائه میدهد که نیازی به کلیدهای API یا کارت اعتباری ندارد. این امر باعث میشود داوطلبان بهداشتی «سانگات» یا معلمان مدارس بتوانند در سالهای سخت تب دنگی، آن را برای یک خیابان کامل اجرا کنند. تنها هزینه، یک بار دانلود از طریق Wi-Fi است.
وزنهای باز اجازه میدهند قطعات قابل تعویض باشند؛ برای مثال، CLIP میتواند در یک فایل worker جایگزین SigLIP شود. علاوه بر این، لایسنس Apache-2.0 برای Gemma 4 اجازه میدهد وزنها مستقیماً در یک PWA عمومی قرار گیرند. توسعهدهنده استدلال میکند که فروشندگان مدلهای بسته احتمالاً پشتیبانی از زبان خمر را در نقشه راه خود اولویت نمیدهند و همین موضوع تلاشهای متنباز مانند Tonsai را ضروری میکند.
در حالی که یک مدل بینایی ابری بزرگتر ممکن است ظروف مبهم را بهتر از یک برج CLIP ۵۳ مگابایتی شناسایی کند، توسعهدهنده این واقعیت را اولویت داد که ابزار تب دنگیای که به کارت اعتباری و 4G نیاز دارد، ابزاری نیست که در یک کوچه (soi) در پنومپن واقعاً استفاده شود. کد این پروژه با لایسنس MIT، نقشهای برای سایر ابزارهای بهداشتی منطقهای فراهم میکند که اجرا در سطح محلی و ظرافتهای فرهنگی را اولویت قرار میدهند.
گام بعدی شما
- اگر توسعهدهنده هستید، مستندات
transformers.jsرا برای اجرای مدلهای بینایی در مرورگر بررسی کنید. - برای پیادهسازی ابزارهای محلی، از ترکیب مدلهای کوچک (SLM) و جداول منطقی (Deterministic Rules) برای جلوگیری از توهم استفاده کنید.
- مدلهای بازمتن را برای زبانهای کمکاربرد (Low-resource languages) به جای مدلهای ابری تست کنید.
اما داستان سختافزاری اجرای مدلهای زبانی روی مرورگر حتی شگفتانگیزتر است — به تحلیل ما دربارهی شتابدهندههای WebGPU مراجعه کنید.




گفتگو