بینایی ماشین · پایتون متن‌باز

کنترل موس با چشم

Eye-Control Mouse

پروژه‌ای متن‌باز در حوزه‌ی بینایی ماشین که نشانگر موس را فقط با حرکت چشم و یک وب‌کم معمولی کنترل می‌کند. آن را برای رویداد امید ساختم و رتبه‌ی دوم را گرفت؛ توسعه‌ی آن هنوز ادامه دارد.

تصویر وب‌کم در یک رشته‌ی جداگانه پردازش می‌شود: MediaPipe Face Landmarker نقاط چهره، چشم و عنبیه (۴۷۸ نقطه) را پیدا می‌کند، موقعیت هر عنبیه نسبت به گوشه‌های همان چشم به‌عنوان ویژگی نگاه محاسبه می‌شود و یک نگاشت کالیبره‌شده آن را به مختصات صفحه تبدیل می‌کند.

کالیبراسیون تمام‌صفحه‌ی ۹ نقطه‌ای با نشانگر پایداری نگاه انجام می‌شود و سه روش نگاشت (Affine، چندجمله‌ای و RBF) دارد. حرکت نشانگر با فیلتر کالمن یا EWMA نرم می‌شود و کلیک با پلک زدن، مکث نگاه یا چشمک چپ و راست انجام می‌شود. یک کلید توقف اضطراری در همه‌ی برنامه‌ها کار می‌کند و تنظیمات و کالیبراسیون بین اجراها حفظ می‌شوند.

رابط با PyQt6 ساخته شده و روی ویندوز، مک و لینوکس اجرا می‌شود. همه‌ی پردازش تصویر روی خود دستگاه انجام می‌شود و هیچ فریمی ذخیره یا ارسال نمی‌شود. کد با pytest تست می‌شود و تست‌ها روی GitHub Actions اجرا می‌شوند. کاربرد اصلی آن دسترس‌پذیری برای کسانی است که نمی‌توانند از موس معمولی استفاده کنند.

ویژگی‌های کلیدی

  • رتبه‌ی دوم رویداد امید
  • ردیابی چهره، چشم و عنبیه با MediaPipe Face Landmarker
  • کالیبراسیون ۹ نقطه‌ای با نگاشت Affine، چندجمله‌ای و RBF
  • نرم‌سازی حرکت با فیلتر کالمن یا EWMA
  • کلیک با پلک، مکث نگاه یا چشمک چپ و راست
  • کلید توقف اضطراری در همه‌ی برنامه‌ها
  • پردازش کاملاً محلی؛ هیچ تصویری ذخیره یا ارسال نمی‌شود
  • رابط PyQt6 برای ویندوز، مک و لینوکس با تست خودکار

تکنولوژی‌ها

PythonMediaPipeOpenCVNumPySciPyPyQt6PyAutoGUIpynputpytestGitHub Actions

نقش من در پروژه

توسعه‌دهنده — بینایی ماشین

این پروژه متن‌باز است و کد آن روی گیت‌هاب در دسترس است.