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

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

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

آن را امتحان کنید!

شروع کنید

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

جزئیات کار

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

ویژگی ها

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

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

این کار دارای گزینه های پیکربندی زیر است:

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

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

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

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 باشد، تمام نتایج موجود برگردانده خواهند شد.
  • آستانه امتیاز: امتیازی که زیر آن نتایج رد می شود. اگر روی 0 تنظیم شود، همه نتایج موجود برگردانده خواهند شد.
  • فهرست مجاز دسته ها: لیست مجاز نام دسته ها. اگر خالی نباشد، نتایج طبقه‌بندی که دسته آنها در این مجموعه نیست فیلتر می‌شوند. انحصاری متقابل با denylist.
  • Category denylist: فهرست انکار نام دسته ها. در صورت خالی نبودن، نتایج طبقه بندی که دسته آنها در این مجموعه است فیلتر می شود. متقابل منحصر به فرد با لیست مجاز.
    • محل نمایش نام: any string
    • حداکثر نتایج: any integer
    • آستانه امتیاز: 0.0-1.0
    • لیست مجاز دسته: vector of strings
    • Category denylist: vector of strings
    • محل نام های نمایشی: "en"
    • حداکثر نتایج: -1
    • آستانه امتیاز: 0
    • لیست مجاز دسته: خالی
    • فهرست رد رده: خالی
    custom_gestures_classifier_options گزینه هایی برای پیکربندی رفتار طبقه بندی کننده حرکات سفارشی.
  • محل نام‌های نمایشی: محلی برای استفاده برای نام‌های نمایشی مشخص شده از طریق فراداده مدل TFLite، در صورت وجود.
  • حداکثر نتایج: حداکثر تعداد نتایج طبقه بندی با امتیاز بالا برای بازگشت. اگر < 0 باشد، تمام نتایج موجود برگردانده خواهند شد.
  • آستانه امتیاز: امتیازی که زیر آن نتایج رد می شود. اگر روی 0 تنظیم شود، همه نتایج موجود برگردانده خواهند شد.
  • فهرست مجاز دسته ها: لیست مجاز نام دسته ها. اگر خالی نباشد، نتایج طبقه‌بندی که دسته آنها در این مجموعه نیست فیلتر می‌شوند. انحصاری متقابل با denylist.
  • Category denylist: فهرست انکار نام دسته ها. در صورت خالی نبودن، نتایج طبقه بندی که دسته آنها در این مجموعه است فیلتر می شود. متقابل منحصر به فرد با لیست مجاز.
    • محل نمایش نام: any string
    • حداکثر نتایج: any integer
    • آستانه امتیاز: 0.0-1.0
    • لیست مجاز دسته: vector of strings
    • Category denylist: vector of strings
    • محل نام های نمایشی: "en"
    • حداکثر نتایج: -1
    • آستانه امتیاز: 0
    • لیست مجاز دسته: خالی
    • فهرست رد رده: خالی
    result_callback شنونده نتیجه را طوری تنظیم می‌کند که وقتی تشخیص‌دهنده اشاره در حالت پخش زنده است، نتایج طبقه‌بندی را به‌صورت ناهمزمان دریافت کند. فقط زمانی قابل استفاده است که حالت اجرا روی LIVE_STREAM تنظیم شده باشد ResultListener N/A N/A

    مدل ها

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

    نام مدل شکل ورودی نوع کوانتیزاسیون مدل کارت نسخه ها
    دسته بندی HandGesture 192 x 192، 224 x 224 شناور 16 اطلاعات آخرین

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

    بسته مدل شاخص دستی

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

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

    از آنجایی که مدل تشخیص کف دست بسیار وقت گیرتر است، در حالت ویدیو یا حالت پخش زنده، 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 حرکت رایج دست معرفی‌شده در بالا را شناسایی می‌کند. می‌توانید با آموزش طبقه‌بندی‌کننده اشاره سفارشی خود، بسته مدل را گسترش دهید تا حرکات بیشتری را تشخیص دهد. جزئیات بیشتر را در بخش مدل های سفارشی زیر مشاهده کنید.

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

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

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

    نام مدل تاخیر CPU تاخیر GPU
    Gesture Recognizer 16.76 میلی‌ثانیه 20.87 میلی‌ثانیه

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

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

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