מדריך משימות לזיהוי תנועות

יד שמרימה אגודל מורם, שזוהתה על ידי המודל כתנועת אגודל מורם עם דירוג ביטחון של 63%

המשימה MediaPipe Gesture Recognizer מאפשרת לזהות תנועות ידיים בזמן אמת, ומספקת את התוצאות של תנועות היד שזוהו יחד עם נקודות ציון של הידיים שזוהו. אפשר להשתמש במשימה הזו כדי לזהות תנועות ידיים ספציפיות של משתמש ולהפעיל תכונות באפליקציה שתואמות לתנועות האלה.

המשימה הזו פועלת על נתוני תמונות באמצעות מודל של למידת מכונה (ML), ומקבלת נתונים סטטיים או שידור רציף. הפלט של המשימה כולל ציוני ציון של הידיים בקואורדינטות של התמונה, ציוני ציון של הידיים בקואורדינטות עולמיות, צד היד (יד ימין/יד שמאל) וקטגוריות של תנועות ידיים של כמה ידיים.

רוצים לנסות?

תחילת העבודה

כדי להתחיל להשתמש במשימה הזו, פועלים לפי אחד מהמדריכים הבאים להטמעה בפלטפורמת היעד. המדריכים הספציפיים לפלטפורמות האלה כוללים הדרכה לביצוע בסיסי של המשימה הזו, באמצעות מודל מומלץ, וכן דוגמאות קוד עם אפשרויות ההגדרה המומלצות:

פרטי המשימה

בקטע הזה מוסבר על היכולות, הקלט, הפלט והאפשרויות להגדרה של המשימה הזו.

תכונות

  • עיבוד תמונות קלט – העיבוד כולל סיבוב תמונות, שינוי גודל, נורמליזציה והמרה של מרחב צבעים.
  • סף ניקוד – סינון התוצאות על סמך ציונים של תחזיות.
  • Label allowlist and denylist – מציינים את קטגוריות התנועות שהמודל מזהה.
קלט של משימות פלט של משימות
הכלי לזיהוי תנועות מקבל קלט מאחד מסוגי הנתונים הבאים:
  • תמונות סטילס
  • פריימים של וידאו שעבר פענוח
  • פיד וידאו בשידור חי
המערכת לזיהוי תנועות מניבה את התוצאות הבאות:
  • קטגוריות של תנועות ידיים
  • היד הדומיננטית של הידיים שזוהו
  • ציוני דרך של ידיים שזוהו בקואורדינטות של תמונה
  • ציוני דרך של ידיים שזוהו בקואורדינטות עולמיות

אפשרויות הגדרה

למשימה הזו יש את אפשרויות ההגדרה הבאות:

שם האפשרות תיאור טווח ערכים ערך ברירת מחדל
running_mode הגדרת מצב ההפעלה של המשימה. יש שלושה מצבים:

IMAGE: המצב להזנת תמונה אחת.

VIDEO: המצב של פריימים מפוענחים של סרטון.

LIVE_STREAM: המצב של סטרימינג בשידור חי של נתוני קלט, למשל ממצלמה. במצב הזה, צריך להפעיל את resultListener כדי להגדיר מאזין שיקבל את התוצאות באופן אסינכרוני.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
num_hands המספר המקסימלי של ידיים שאפשר לזהות באמצעות GestureRecognizer הוא 10. Any integer > 0 1
min_hand_detection_confidence ציון האמון המינימלי שדרוש כדי שזיהוי היד ייחשב מוצלח במודל לזיהוי כף היד. 0.0 - 1.0 0.5
min_hand_presence_confidence דירוג הוודאות המינימלי של נוכחות היד במודל לזיהוי ציוני ציון של נקודות ציון בכף היד. במצב וידאו ובמצב שידור חי של זיהוי התנועות, אם ציון הוודאות לנוכחות היד ממודל ציוני הנקודות המאפיינות של היד נמוך מהסף הזה, מופעלת הפעלה של מודל זיהוי כף היד. אחרת, נעשה שימוש באלגוריתם מעקב קל אחרי הידיים כדי לקבוע את המיקום שלהן לצורך זיהוי של נקודות ציון בהמשך. 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.
  • רשימת קטגוריות חסרות גישה: רשימת השמות של הקטגוריות שנחסמו. אם הערך לא ריק, תוצאות הסיווג שהקטגוריה שלהן נמצאת בקבוצה הזו יסוננו. לא ניתן להשתמש בו במקביל לרשימת היתרים.
    • אזור הלשון של שמות התצוגה: any string
    • מספר תוצאות מקסימלי: any integer
    • סף הציון: 0.0-1.0
    • רשימת ההיתרים של הקטגוריה: vector of strings
    • רשימת הישויות שנחסמו בקטגוריה: vector of strings
    • אזור הלשון של שמות התצוגה: "en"
    • מספר תוצאות מקסימלי: -1
    • סף הציון: 0
    • רשימת ההיתרים של הקטגוריה: ריקה
    • רשימת הישויות שנחסמו בקטגוריה: ריקה
    custom_gestures_classifier_options אפשרויות להגדרת ההתנהגות של הסיווג של התנועות בהתאמה אישית.
  • אזור הלשון של השמות המוצגים: אזור הלשון שבו נעשה שימוש בשמות המוצגים שצוינו באמצעות המטא-נתונים של מודל TFLite, אם יש כאלה.
  • מספר התוצאות המקסימלי: מספר התוצאות המקסימלי של סיווגים עם הדירוג הגבוה ביותר שיוחזר. אם הערך < 0, כל התוצאות הזמינות יחזרו.
  • סף הציון: הציון שמתחתיו התוצאות נדחות. אם הערך מוגדר ל-0, כל התוצאות הזמינות יחזרו.
  • רשימת ההיתרים של קטגוריות: רשימת ההיתרים של שמות הקטגוריות. אם הערך לא ריק, תוצאות הסיווג שהקטגוריה שלהן לא נכללת בקבוצה הזו יסוננו. לא ניתן להשתמש בו במקביל ל-denylist.
  • רשימת קטגוריות חסרות גישה: רשימת השמות של הקטגוריות שנחסמו. אם הערך לא ריק, תוצאות הסיווג שהקטגוריה שלהן נמצאת בקבוצה הזו יסוננו. לא ניתן להשתמש בו במקביל לרשימת היתרים.
    • אזור הלשון של שמות התצוגה: any string
    • מספר תוצאות מקסימלי: any integer
    • סף הציון: 0.0-1.0
    • רשימת ההיתרים של הקטגוריה: vector of strings
    • רשימת הישויות שנחסמו בקטגוריה: vector of strings
    • אזור הלשון של שמות התצוגה: "en"
    • מספר תוצאות מקסימלי: -1
    • סף הציון: 0
    • רשימת ההיתרים של הקטגוריה: ריקה
    • רשימת הישויות שנחסמו בקטגוריה: ריקה
    result_callback מגדיר את מאזין התוצאות לקבל את תוצאות הסיווג באופן אסינכרוני כשמתבצע זיהוי תנועות במצב של שידור חי. אפשר להשתמש בה רק כשמצב ההפעלה מוגדר כ-LIVE_STREAM ResultListener לא רלוונטי לא רלוונטי

    דגמים

    ב-Gesture Recognizer נעשה שימוש בחבילת מודלים עם שתי חבילות מודלים מוגדרות מראש: חבילת מודלים של נקודות ציון ביד וחבילת מודלים של סיווג תנועות. מודל ציוני הדרך מזהה את נוכחות הידיים ואת הגיאומטריה שלהן, ומודל זיהוי התנועות מזהה תנועות על סמך הגיאומטריה של הידיים.

    שם דגם צורת הקלט סוג הקידוד כרטיס מודל גרסאות
    HandGestureClassifier 192 x 192, ‏ 224 x 224 float 16 info חדש

    המשימה הזו תומכת גם בשינוי של חבילת המודלים באמצעות Model Maker. למידע נוסף על שימוש ב-Model Maker כדי להתאים אישית מודלים למשימה הזו, קראו את הדף התאמה אישית של מודלים לזיהוי תנועות.

    חבילת מודלים של ציוני דרך ביד

    חבילת המודל של ציוני הדרך ביד מזהה את המיקום של 21 נקודות ציון במפרקי האצבעות בתוך אזורי היד שזוהו. המודל אומן באמצעות כ-30,000 תמונות מהעולם האמיתי, וגם כמה מודלים סינתטיים של ידיים שהוחלו על רקעים שונים. בהמשך מופיעה ההגדרה של 21 הנקודות החשובות:

    קודים לנקודות ספציפיות של ציוני דרך ביד

    חבילת המודלים של זיהוי ציוני דרך ביד כוללת מודל לזיהוי כף היד ומודל לזיהוי ציוני דרך ביד. מודל זיהוי כף היד מאתר את האזור של הידיים מתמונת הקלט כולה, ומודל זיהוי ציוני הדרך ביד מאתר את ציוני הדרך בתמונה החתוכה של היד שמוגדרת על ידי מודל זיהוי כף היד.

    מכיוון שמודל זיהוי כף היד צורך הרבה יותר זמן, במצב וידאו או במצב שידור חי, המערכת לזיהוי תנועות משתמשת בתיבת מלבנית שמוגדר על ידי נקודות ציון של היד שזוהו בפריים הנוכחי כדי לאתר את אזור הידיים בפריים הבא. כך פוחתות הפעמים שבהן הכלי לזיהוי תנועות מפעיל את מודל זיהוי כף היד. רק כשמודל הנקודות החשובות ביד לא יכול יותר לזהות מספיק נוכחות של ידיים, או כשמעקב הידיים נכשל, מופעלת מודלת זיהוי כף היד כדי למקם מחדש את הידיים.

    חבילה של מודל סיווג תנועות

    חבילת המודלים לסיווג תנועות יכולה לזהות את תנועות היד הנפוצות הבאות:

    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
    

    אם המודל מזהה ידיים אבל לא מזהה תנועה, המערכת לזיהוי תנועות מחזירה את התוצאה 'None'. אם המודל לא מזהה ידיים, המערכת לזיהוי תנועות מחזירה חזרה נתונים ריקים.

    חבילת מודל הסיווג של התנועות מכילה צינור עיבוד נתונים של רשת עצבית בשני שלבים, עם מודל הטמעה של תנועות ואחריו מודל סיווג של תנועות. פרטים נוספים זמינים בכרטיס של מודל הסיווג של תנועות.

    מודל הטמעת התנועות מקודד את מאפייני התמונה לווקטור מאפיינים, ומודל הסיווג הוא מסַווג תנועות קל שמקבל את ווקטור המאפיינים כקלט. חבילת המודל לסיווג תנועות מכילה את הסיווג של תנועות מוגדרות מראש, שמזהה את 7 תנועות היד הנפוצות שתיארנו למעלה. כדי להרחיב את חבילת המודלים ולזהות יותר תנועות, אפשר לאמן מסווג תנועות מותאם אישית. פרטים נוספים זמינים בקטע מודלים מותאמים אישית שבהמשך.

    כשמשתמשים בזיהוי תנועות עם סיווג תנועות מוכנות וסיווג תנועות בהתאמה אישית, המערכת מעדיפה את התנועה בהתאמה אישית אם שני הסיווגים מזהים את אותה תנועה בקטגוריות שלהם. אם רק סיווג תנועה אחד מזהה את ההבעה, המערכת מזהה את ההבעה ומפיקה אותה ישירות.

    נקודות השוואה של משימות

    בהמשך מוצגות נקודות השוואה של המשימות בצינור עיבוד הנתונים כולו, על סמך המודלים שהוכשרו מראש שלמעלה. תוצאת זמן האחזור היא זמן האחזור הממוצע ב-Pixel 6 באמצעות מעבד או יחידת עיבוד גרפי (GPU).

    שם דגם זמן האחזור של המעבד (CPU) זמן אחזור של GPU
    GestureRecognizer 16.76 אלפיות השנייה 20.87 אלפיות השנייה

    מודלים מותאמים אישית

    אם אתם רוצים לשפר או לשנות את היכולות של המודלים שסופקו במשימה הזו, תוכלו להשתמש ב-Model Maker כדי לשנות את המודלים הקיימים. מודלים מותאמים אישית שנעשה בהם שימוש ב-MediaPipe חייבים להיות בפורמט .task, שהוא קובץ חבילה של מודל. מומלץ להשתמש ב-Model Maker כדי לשנות את המודלים שסופקו למשימה הזו, לפני שיוצרים מודל משלכם.

    מידע נוסף על התאמה אישית של מודל למשימה הזו זמין במאמר התאמה אישית של מודלים לזיהוי תנועות.