ماوس مجازی هوشمند (AI-Virtual-Mouse): کنترل لمسی مکاننما در ویندوز
یک خط لوله بیدرنگ بینایی ماشین که حرکات دست کاربر را از طریق وبکم استاندارد به حرکت بسیار روان نشانگر ماوس در محیط ویندوز تبدیل میکند. رفع کامل لرزش دست با فیلتر تطبیقی میانگین متحرک نمایی (EMA) و ارسال مستقیم رویدادها به لایه Win32 API.
۱. تحلیل چالش لرزش اپتیکال در تعامل بدون لمس
در پروژههای ساده بینایی ماشین، معمولاً موقعیت نوک انگشت اشاره مستقیماً به پیکسلهای صفحه نمایش متصل میشود. به علت نویز ذاتی سنسور وبکم و لرزشهای میکروسکوپی ماهیچههای انگشت، مختصات در هر فریم بین ۲ تا ۵ پیکسل نوسان میکند؛ امری که کلیک روی دکمههای کوچک و پنجرههای ویندوز را غیرممکن میسازد.
پروژه AI-Virtual-Mouse با ترکیب یک فیلتر نرمکننده نمایی تطبیقی با سرعت دست و ناحیه مرده (Deadzone)، حرکات سریع را بدون تاخیر انتقال میدهد و هنگام ثابت شدن دست، لرزش زیرپیکسلی را به صفر میرساند.
۲. مدل ریاضی فیلتر هموارساز تطبیقی (EMA)
هنگامی که دست با سرعت حرکت میکند ضریب فیلتر کاهش مییابد تا واکنش لحظهای حفظ شود؛ به محض کاهش سرعت برای کلیک، ضریب فیلتر افزایش یافته و مکاننما کاملاً پایدار میماند:
# پیادهسازی فرمول نرمسازی نمایی متناسب با سرعت حرکت
distance = math.hypot(curr_x - prev_x, curr_y - prev_y)
# تنظیم داینامیک ضریب نرمسازی بین 0.15 تا 1.0
alpha = min(1.0, max(0.15, distance / 40.0))
smooth_x = prev_x + alpha * (curr_x - prev_x)
smooth_y = prev_y + alpha * (curr_y - prev_y)
# تزریق مستقیم موقعیت به صف رویدادهای هسته ویندوز بدون تاخیر
ctypes.windll.user32.SetCursorPos(int(smooth_x), int(smooth_y))
۳. ماشین حالت تشخیص ژستهای حرکتی (State Machine)
به جای تصمیمگیری تکفریمی که منجر به کلیکهای اشتباه میشود، حالات دست بر اساس یک ماشین وضعیت قطعی مدیریت میشوند:
حالت ناوبری و اشاره (Pointing)
انگشت اشاره باز و سایر انگشتان جمع هستند. موقعیت نشانگر در صفحه بدون فعال شدن کلیکها به نرمی جابجا میشود.
کلیک چپ و درگ (Pinch Gesture)
نزدیک شدن فاصله اقلیدسی نوک انگشت شست و اشاره به زیر ۲۵ پیکسل باعث فعال شدن آنی رویداد کلیک چپ و درگ فایلها میشود.
کلیک راست (Middle Finger Pinch)
نزدیک شدن شست به انگشت وسط بدون حرکت انگشت اشاره، دستور استاندارد کلیک راست را در سیستمعامل صادر میکند.
اسکرول روان با دو انگشت
باز بودن همزمان انگشت اشاره و وسط؛ حرکت عمودی دست مستقیماً به رویداد چرخ ماوس (Mouse Wheel) با شتاب نرم تبدیل میشود.