
وظیفهی تشخیصدهندهی ژست MediaPipe به شما امکان میدهد حرکات دست را به صورت بلادرنگ تشخیص دهید و نتایج حرکات دست تشخیص داده شده را به همراه نشانههای دستهای شناسایی شده ارائه میدهد. میتوانید از این وظیفه برای تشخیص حرکات دست خاص از یک کاربر استفاده کنید و ویژگیهای برنامه را که با آن حرکات مطابقت دارند، فراخوانی کنید.
این وظیفه بر روی دادههای تصویر با یک مدل یادگیری ماشین (ML) عمل میکند و دادههای ایستا یا یک جریان پیوسته را میپذیرد. خروجی این وظیفه، نشانههای دست در مختصات تصویر، نشانههای دست در مختصات جهانی، چپدستی/راستدستی و دستهبندیهای حرکات دست چندین دست است.
شروع کنید
با دنبال کردن یکی از این راهنماهای پیادهسازی برای پلتفرم مورد نظر خود، استفاده از این وظیفه را شروع کنید. این راهنماهای مختص پلتفرم، شما را در پیادهسازی اولیه این وظیفه، با استفاده از یک مدل پیشنهادی، راهنمایی میکنند و نمونههای کد را با گزینههای پیکربندی پیشنهادی ارائه میدهند:
- اندروید - مثال کد
- پایتون - مثال کد
- وب - [مثال کد](https://github.com/google-ai-edge/mediapipe-samples-web/blob/main/src/tasks/gesture-recognizer.ts - راهنما
جزئیات وظیفه
این بخش قابلیتها، ورودیها، خروجیها و گزینههای پیکربندی این وظیفه را شرح میدهد.
ویژگیها
- پردازش تصویر ورودی - پردازش شامل چرخش تصویر، تغییر اندازه، نرمالسازی و تبدیل فضای رنگ است.
- آستانه امتیاز - نتایج را بر اساس امتیازات پیشبینی فیلتر کنید.
- برچسب لیست مجاز و لیست ممنوعه - دستههای ژستهای شناخته شده توسط مدل را مشخص کنید.
| ورودیهای وظیفه | خروجیهای وظیفه |
|---|---|
تشخیصدهندهی حرکت، ورودی یکی از انواع دادههای زیر را میپذیرد:
| تشخیصدهندهی حرکت، نتایج زیر را ارائه میدهد:
|
گزینههای پیکربندی
این وظیفه گزینههای پیکربندی زیر را دارد:
| نام گزینه | توضیحات | محدوده ارزش | مقدار پیشفرض | |
|---|---|---|---|---|
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"] |
|
| |
custom_gestures_classifier_options | گزینههایی برای پیکربندی رفتار طبقهبندیکنندهی حرکات سفارشی. |
|
| |
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 را برای اصلاح مدلهای ارائه شده برای این کار در نظر بگیرید.
برای اطلاعات بیشتر در مورد سفارشیسازی یک مدل برای این کار، به بخش «سفارشیسازی مدلها برای تشخیصدهندهی حرکت» مراجعه کنید.