راهنمای کار تشخیص ژست

دستی که حرکت شست بالا را انجام می‌دهد و مدل با ضریب اطمینان ۶۳٪ آن را به عنوان حرکت شست بالا شناسایی کرده است

وظیفه‌ی تشخیص‌دهنده‌ی ژست MediaPipe به شما امکان می‌دهد حرکات دست را به صورت بلادرنگ تشخیص دهید و نتایج حرکات دست تشخیص داده شده را به همراه نشانه‌های دست‌های شناسایی شده ارائه می‌دهد. می‌توانید از این وظیفه برای تشخیص حرکات دست خاص از یک کاربر استفاده کنید و ویژگی‌های برنامه را که با آن حرکات مطابقت دارند، فراخوانی کنید.

این وظیفه بر روی داده‌های تصویر با یک مدل یادگیری ماشین (ML) عمل می‌کند و داده‌های ایستا یا یک جریان پیوسته را می‌پذیرد. خروجی این وظیفه، نشانه‌های دست در مختصات تصویر، نشانه‌های دست در مختصات جهانی، چپ‌دستی/راست‌دستی و دسته‌بندی‌های حرکات دست چندین دست است.

امتحانش کن!

شروع کنید

با دنبال کردن یکی از این راهنماهای پیاده‌سازی برای پلتفرم مورد نظر خود، استفاده از این وظیفه را شروع کنید. این راهنماهای مختص پلتفرم، شما را در پیاده‌سازی اولیه این وظیفه، با استفاده از یک مدل پیشنهادی، راهنمایی می‌کنند و نمونه‌های کد را با گزینه‌های پیکربندی پیشنهادی ارائه می‌دهند:

جزئیات وظیفه

این بخش قابلیت‌ها، ورودی‌ها، خروجی‌ها و گزینه‌های پیکربندی این وظیفه را شرح می‌دهد.

ویژگی‌ها

  • پردازش تصویر ورودی - پردازش شامل چرخش تصویر، تغییر اندازه، نرمال‌سازی و تبدیل فضای رنگ است.
  • آستانه امتیاز - نتایج را بر اساس امتیازات پیش‌بینی فیلتر کنید.
  • برچسب لیست مجاز و لیست ممنوعه - دسته‌های ژست‌های شناخته شده توسط مدل را مشخص کنید.
ورودی‌های وظیفه خروجی‌های وظیفه
تشخیص‌دهنده‌ی حرکت، ورودی یکی از انواع داده‌های زیر را می‌پذیرد:
  • تصاویر ثابت
  • فریم‌های ویدیویی رمزگشایی شده
  • فید ویدیویی زنده
تشخیص‌دهنده‌ی حرکت، نتایج زیر را ارائه می‌دهد:
  • دسته بندی حرکات دست
  • راست‌دست یا راست‌دست بودن دست‌های شناسایی‌شده
  • نشانه‌های دست‌های شناسایی‌شده در مختصات تصویر
  • نشانه‌های دست‌های شناسایی‌شده در مختصات جهانی

گزینه‌های پیکربندی

این وظیفه گزینه‌های پیکربندی زیر را دارد:

نام گزینه توضیحات محدوده ارزش مقدار پیش‌فرض
running_mode حالت اجرا را برای وظیفه تنظیم می‌کند. سه حالت وجود دارد:

تصویر: حالت ورودی‌های تک تصویر.

ویدئو: حالتی برای فریم‌های رمزگشایی‌شده‌ی یک ویدئو.

LIVE_STREAM: حالتی برای پخش زنده داده‌های ورودی، مثلاً از یک دوربین. در این حالت، باید resultListener فراخوانی شود تا یک شنونده برای دریافت نتایج به صورت غیرهمزمان تنظیم شود.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
num_hands حداکثر تعداد دست‌ها می‌تواند توسط GestureRecognizer شناسایی شود. Any integer > 0 1
min_hand_detection_confidence حداقل امتیاز اطمینان برای تشخیص دست که در مدل تشخیص کف دست موفق تلقی می‌شود. 0.0 - 1.0 0.5
min_hand_presence_confidence حداقل امتیاز اطمینان از امتیاز حضور دست در مدل تشخیص نشانه‌های دست. در حالت ویدیو و حالت پخش زنده‌ی Gesture Recognizer، اگر امتیاز اطمینان از حضور دست از مدل نشانه‌های دست کمتر از این آستانه باشد، مدل تشخیص کف دست فعال می‌شود. در غیر این صورت، از یک الگوریتم ردیابی دست سبک برای تعیین محل دست(ها) برای تشخیص نشانه‌های بعدی استفاده می‌شود. 0.0 - 1.0 0.5
min_tracking_confidence حداقل امتیاز اطمینان برای اینکه ردیابی دست موفقیت‌آمیز تلقی شود. این آستانه IoU کادر مرزی بین دست‌ها در فریم فعلی و آخرین فریم است. در حالت ویدیو و حالت پخش جریانیِ تشخیص‌دهنده‌ی حرکت، اگر ردیابی ناموفق باشد، تشخیص‌دهنده‌ی حرکت، تشخیص دست را آغاز می‌کند. در غیر این صورت، تشخیص دست نادیده گرفته می‌شود. 0.0 - 1.0 0.5
canned_gestures_classifier_options گزینه‌هایی برای پیکربندی رفتار طبقه‌بندی‌کننده‌ی حرکات از پیش تعیین‌شده. حرکات از پیش تعیین‌شده عبارتند از ["None", "Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory", "ILoveYou"]
  • زبان محلی نام‌های نمایشی: زبان محلی مورد استفاده برای نام‌های نمایشی که از طریق فراداده مدل TFLite مشخص شده‌اند، در صورت وجود.
  • حداکثر نتایج: حداکثر تعداد نتایج طبقه‌بندی با بالاترین امتیاز برای برگرداندن. اگر < 0 باشد، تمام نتایج موجود برگردانده می‌شوند.
  • آستانه امتیاز: امتیازی که نتایج پایین‌تر از آن رد می‌شوند. اگر روی ۰ تنظیم شود، تمام نتایج موجود بازگردانده می‌شوند.
  • فهرست مجاز دسته‌بندی: فهرست مجاز نام‌های دسته‌بندی. اگر خالی نباشد، نتایج طبقه‌بندی که دسته‌بندی آنها در این مجموعه نباشد، فیلتر می‌شوند. با فهرست ممنوعه ناسازگار است.
  • لیست رد دسته: لیست رد نام دسته‌ها. اگر خالی نباشد، نتایج طبقه‌بندی که دسته آنها در این مجموعه باشد، فیلتر می‌شوند. با لیست مجاز ناسازگار است.
    • نام‌های نمایشی، محلی: any string
    • حداکثر نتایج: any integer
    • آستانه امتیاز: 0.0-1.0
    • فهرست مجاز دسته‌بندی: vector of strings
    • فهرست انکار رده: vector of strings
    • نام‌های نمایشی به زبان محلی: "en"
    • حداکثر نتایج: -1
    • آستانه امتیاز: 0
    • لیست مجاز دسته بندی: خالی
    • لیست رد دسته بندی: خالی
    custom_gestures_classifier_options گزینه‌هایی برای پیکربندی رفتار طبقه‌بندی‌کننده‌ی حرکات سفارشی.
  • زبان محلی نام‌های نمایشی: زبان محلی مورد استفاده برای نام‌های نمایشی که از طریق فراداده مدل TFLite مشخص شده‌اند، در صورت وجود.
  • حداکثر نتایج: حداکثر تعداد نتایج طبقه‌بندی با بالاترین امتیاز برای برگرداندن. اگر < 0 باشد، تمام نتایج موجود برگردانده می‌شوند.
  • آستانه امتیاز: امتیازی که نتایج پایین‌تر از آن رد می‌شوند. اگر روی ۰ تنظیم شود، تمام نتایج موجود بازگردانده می‌شوند.
  • فهرست مجاز دسته‌بندی: فهرست مجاز نام‌های دسته‌بندی. اگر خالی نباشد، نتایج طبقه‌بندی که دسته‌بندی آنها در این مجموعه نباشد، فیلتر می‌شوند. با فهرست ممنوعه ناسازگار است.
  • لیست رد دسته: لیست رد نام دسته‌ها. اگر خالی نباشد، نتایج طبقه‌بندی که دسته آنها در این مجموعه باشد، فیلتر می‌شوند. با لیست مجاز ناسازگار است.
    • نام‌های نمایشی، محلی: any string
    • حداکثر نتایج: any integer
    • آستانه امتیاز: 0.0-1.0
    • فهرست مجاز دسته‌بندی: vector of strings
    • فهرست انکار رده: vector of strings
    • نام‌های نمایشی به زبان محلی: "en"
    • حداکثر نتایج: -1
    • آستانه امتیاز: 0
    • لیست مجاز دسته بندی: خالی
    • لیست رد دسته بندی: خالی
    result_callback شنونده نتیجه را طوری تنظیم می‌کند که نتایج طبقه‌بندی را به صورت غیرهمزمان دریافت کند، زمانی که تشخیص‌دهنده حرکت در حالت پخش زنده است. فقط زمانی قابل استفاده است که حالت اجرا روی LIVE_STREAM تنظیم شده باشد. ResultListener ناموجود ناموجود

    مدل‌ها

    تشخیص‌دهنده‌ی اشاره از یک بسته‌ی مدل با دو بسته‌ی مدل از پیش بسته‌بندی‌شده استفاده می‌کند: یک بسته‌ی مدل نشانه‌های دست و یک بسته‌ی مدل طبقه‌بندی اشاره. مدل نشانه‌های دست، وجود دست‌ها و هندسه‌ی دست را تشخیص می‌دهد و مدل تشخیص اشاره، حرکات را بر اساس هندسه‌ی دست تشخیص می‌دهد.

    نام مدل شکل ورودی نوع کوانتیزاسیون کارت مدل نسخه‌ها
    طبقه‌بندی‌کننده‌ی حرکت دست ۱۹۲ در ۱۹۲، ۲۲۴ در ۲۲۴ شناور ۱۶ اطلاعات جدیدترین‌ها

    این وظیفه همچنین از اصلاح بسته مدل با استفاده از Model Maker پشتیبانی می‌کند. برای اطلاعات بیشتر در مورد استفاده از Model Maker برای سفارشی‌سازی مدل‌ها برای این وظیفه، به صفحه «سفارشی‌سازی مدل‌ها برای تشخیص‌دهنده حرکت» مراجعه کنید.

    بسته مدل نقطه عطف دستی

    بسته مدل نشانه‌های دست، موقعیت‌یابی نقطه کلیدی ۲۱ مختصات بند انگشت دست را در نواحی شناسایی‌شده دست تشخیص می‌دهد. این مدل بر روی تقریباً ۳۰ هزار تصویر دنیای واقعی و همچنین چندین مدل مصنوعی دست رندر شده که بر روی پس‌زمینه‌های مختلف اعمال شده‌اند، آموزش داده شده است. تعریف ۲۱ نشانه را در زیر مشاهده کنید:

    کدهای مربوط به نقاط نشانه‌گذاری خاص دست

    بسته مدل نشانگر دست شامل مدل تشخیص کف دست و مدل تشخیص نشانه‌های دست است. مدل تشخیص کف دست، ناحیه دست‌ها را از کل تصویر ورودی مشخص می‌کند و مدل تشخیص نشانه‌های دست، نشانه‌های روی تصویر دست برش داده شده که توسط مدل تشخیص کف دست تعریف شده است را پیدا می‌کند.

    از آنجایی که مدل تشخیص کف دست بسیار زمان‌بر است، در حالت ویدیو یا حالت پخش زنده، Gesture Recognizer از یک کادر مرزی تعریف شده توسط نشانه‌های دست شناسایی شده در فریم فعلی برای مکان‌یابی ناحیه دست‌ها در فریم بعدی استفاده می‌کند. این کار زمان فعال‌سازی مدل تشخیص کف دست توسط Gesture Recognizer را کاهش می‌دهد. تنها زمانی که مدل نشانه‌های دست دیگر نتواند تعداد مورد نیاز از دست‌ها را شناسایی کند، یا ردیابی دست با شکست مواجه شود، مدل تشخیص کف دست برای مکان‌یابی مجدد دست‌ها فراخوانی می‌شود.

    بسته مدل طبقه‌بندی ژست

    بسته مدل طبقه‌بندی ژست می‌تواند این حرکات رایج دست را تشخیص دهد:

    0 - Unrecognized gesture, label: Unknown
    1 - Closed fist, label: Closed_Fist
    2 - Open palm, label: Open_Palm
    3 - Pointing up, label: Pointing_Up
    4 - Thumbs down, label: Thumb_Down
    5 - Thumbs up, label: Thumb_Up
    6 - Victory, label: Victory
    7 - Love, label: ILoveYou
    

    اگر مدل دست‌ها را تشخیص دهد اما حرکتی را تشخیص ندهد، تشخیص‌دهنده‌ی حرکت نتیجه‌ی "هیچکدام" را برمی‌گرداند. اگر مدل دست‌ها را تشخیص ندهد، تشخیص‌دهنده‌ی حرکت مقدار خالی را برمی‌گرداند.

    بسته مدل طبقه‌بندی ژست شامل دو مرحله خط لوله شبکه عصبی با یک مدل تعبیه ژست و به دنبال آن یک مدل طبقه‌بندی ژست است. جزئیات بیشتر را در کارت مدل طبقه‌بندی ژست ببینید.

    مدل تعبیه ژست، ویژگی‌های تصویر را در یک بردار ویژگی کدگذاری می‌کند و مدل طبقه‌بندی، یک طبقه‌بندی‌کننده ژست سبک است که بردار ویژگی را به عنوان ورودی دریافت می‌کند. بسته مدل طبقه‌بندی ژست ارائه شده شامل طبقه‌بندی‌کننده ژست‌های از پیش آماده شده است که 7 ژست دست رایج معرفی شده در بالا را تشخیص می‌دهد. می‌توانید با آموزش طبقه‌بندی‌کننده ژست سفارشی خود، بسته مدل را برای تشخیص ژست‌های بیشتر گسترش دهید. جزئیات بیشتر را در بخش مدل‌های سفارشی زیر مشاهده کنید.

    تشخیص‌دهنده‌ی حرکت با هر دو طبقه‌بندی‌کننده‌ی حرکت از پیش تعیین‌شده و طبقه‌بندی‌کننده‌ی حرکت سفارشی، اگر هر دو طبقه‌بندی‌کننده، حرکت یکسانی را در دسته‌بندی‌های خود تشخیص دهند، حرکت سفارشی را ترجیح می‌دهد. اگر فقط یک طبقه‌بندی‌کننده‌ی حرکت، حرکت را تشخیص دهد، تشخیص‌دهنده‌ی حرکت، حرکت تشخیص داده‌شده را مستقیماً در خروجی نمایش می‌دهد.

    معیارهای وظیفه

    در اینجا معیارهای وظیفه برای کل خط لوله بر اساس مدل‌های از پیش آموزش‌دیده فوق آمده است. نتیجه تأخیر، میانگین تأخیر در Pixel 6 با استفاده از CPU/GPU است.

    نام مدل تأخیر پردازنده تأخیر پردازنده گرافیکی
    تشخیص‌دهنده‌ی حرکات ۱۶.۷۶ میلی‌ثانیه ۲۰.۸۷ میلی‌ثانیه

    مدل‌های سفارشی

    اگر می‌خواهید قابلیت‌های مدل‌های ارائه شده در این کار را بهبود بخشید یا تغییر دهید، می‌توانید از Model Maker برای اصلاح مدل‌های موجود استفاده کنید. مدل‌های سفارشی مورد استفاده با MediaPipe باید در قالب .task باشند که یک فایل بسته مدل است. قبل از ساختن مدل‌های خودتان، باید استفاده از Model Maker را برای اصلاح مدل‌های ارائه شده برای این کار در نظر بگیرید.

    برای اطلاعات بیشتر در مورد سفارشی‌سازی یک مدل برای این کار، به بخش «سفارشی‌سازی مدل‌ها برای تشخیص‌دهنده‌ی حرکت» مراجعه کنید.