המשימה של MediaPipe לזיהוי תנועות מאפשרת לכם לזהות תנועות ידיים בזמן אמת. מספק את התוצאות המוכרות של תנועות היד ואת ציוני הדרך של ידיים שזוהו. בהוראות הבאות מוסבר איך להשתמש בכלי לזיהוי תנועות לאפליקציות אינטרנט ו-JavaScript.
אפשר לראות את המשימה הזו בפעולה: demo. מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה במשימה הזאת, ראו סקירה כללית.
קוד לדוגמה
הקוד לדוגמה של מזהה התנועות מאפשר הטמעה מלאה של ב-JavaScript לעיונך. הקוד הזה עוזר לכם לבדוק את המשימה הזו ולקבל התחלתם ליצור אפליקציה משלכם לזיהוי תנועות. אפשר להציג, להריץ ו עריכת הקוד לדוגמה של הכלי לזיהוי תנועות באמצעות דפדפן האינטרנט בלבד.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח במיוחד כדי להשתמש בכלי לזיהוי תנועות. למידע כללי על להגדיר את סביבת הפיתוח של האינטרנט ו-JavaScript, כולל הדרישות לגרסת הפלטפורמה. מדריך הגדרה לאינטרנט.
חבילות JavaScript
הקוד לזיהוי התנועה זמין דרך MediaPipe @mediapipe/tasks-vision
חבילת NPM. אפשר
למצוא את הספריות האלה ולהוריד אותן לפי ההוראות שבפלטפורמה
מדריך ההגדרה.
אפשר להתקין את החבילות הנדרשות באמצעות NPM באמצעות הפקודה הבאה:
npm install @mediapipe/tasks-vision
אם רוצים לייבא את קוד המשימה דרך רשת להעברת תוכן (CDN)
השירות, מוסיפים את הקוד הבא בתג <head>
בקובץ ה-HTML:
<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.js"
crossorigin="anonymous"></script>
</head>
דגם
למשימה של מזהה התנועות של MediaPipe נדרש מודל מאומן התואם למשימה הזו. מידע נוסף על המודלים הזמינים המאומנים לזיהוי תנועות זמין בכתובת בסקירה הכללית על המשימה בקטע 'מודלים'.
בוחרים את המודל, מורידים אותו ושומרים אותו בספריית הפרויקט:
<dev-project-root>/app/shared/models/
יצירת המשימה
אפשר להשתמש באחת מהפונקציות של createFrom...()
לזיהוי תנועות כדי
להכין את המשימה להפעלת ההסקה. שימוש בcreateFromModelPath()
בפונקציה עם נתיב יחסי או מוחלט לקובץ המודל שעבר אימון.
אם המודל כבר נטען לזיכרון, אפשר להשתמש
אמצעי תשלום אחד (createFromModelBuffer()
).
הקוד לדוגמה שלמטה מדגים את השימוש בפונקציה createFromOptions()
כדי:
נגדיר את המשימה. הפונקציה createFromOptions
מאפשרת להתאים אישית
מכשיר לזיהוי תנועות עם אפשרויות הגדרה. מידע נוסף על הגדרות אישיות
אפשרויות נוספות, ראו אפשרויות הגדרה.
הקוד הבא מדגים איך יוצרים ומגדירים משימה באמצעות פרמטרים מותאמים אישית אפשרויות:
// Create task for image file processing:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm "
);
const gestureRecognizer = await GestureRecognizer.createFromOptions(vision, {
baseOptions: {
modelAssetPath: "https://storage.googleapis.com/mediapipe-tasks/gesture_recognizer/gesture_recognizer.task"
},
numHands: 2
});
אפשרויות תצורה
המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות אינטרנט:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
runningMode |
מגדיר את מצב הריצה של המשימה. יש שתי פלטפורמות
מצבים: IMAGE: המצב לקלט של תמונה יחידה. סרטון: המצב עבור פריימים מפוענחים בסרטון או בשידור חי של נתוני קלט, למשל ממצלמה. |
{IMAGE, VIDEO } |
IMAGE |
num_hands |
מספר הידיים המקסימלי שניתן לזהות
GestureRecognizer .
|
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"] |
|
|
custom_gestures_classifier_options |
אפשרויות להגדרת ההתנהגות של מסווג תנועות בהתאמה אישית. |
|
|
הכנת נתונים
הכלי לזיהוי התנועות יכול לזהות תנועות בתמונות בכל פורמט שנתמך על ידי הדפדפן המארח. המשימה מטפלת גם בעיבוד מראש של קלט נתונים, כולל שינוי גודל, רוטציה ונירמול ערכים. כדי לזהות תנועות בסרטונים: להשתמש ב-API כדי לעבד במהירות פריים אחד בכל פעם, באמצעות חותמת הזמן של כדי לקבוע מתי התנועות מתרחשות בתוך הסרטון.
הרצת המשימה
הכלי לזיהוי התנועות משתמש בrecognize()
(עם מצב ריצה 'image'
) וב-
שיטות להפעלה של recognizeForVideo()
(במצב הרצה 'video'
)
מסקנות. המשימה מעבדת את הנתונים ומנסה לזהות את היד
ומדווח על התוצאות.
הקוד הבא מדגים איך מבצעים את העיבוד באמצעות מודל המשימה:
תמונה
const image = document.getElementById("image") as HTMLImageElement; const gestureRecognitionResult = gestureRecognizer.recognize(image);
וידאו
await gestureRecognizer.setOptions({ runningMode: "video" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const gestureRecognitionResult = gestureRecognizer.recognizeForVideo(video); processResult(gestureRecognitionResult); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
הקריאות לשיטות recognize()
ו-recognizeForVideo()
של מזהה התנועה פועלות
באופן סינכרוני ולחסום את ה-thread של ממשק המשתמש. אם אתם מזהים תנועות ב:
פריימים מתוך המצלמה של המכשיר, כל זיהוי יחסום את
של שרשור. תוכלו למנוע זאת על ידי הטמעת עובדי אינטרנט כדי להריץ את
recognize()
ו-recognizeForVideo()
שיטות בשרשור אחר.
להטמעה מלאה יותר של הרצת המשימה של מזהה תנועות, אפשר לעיין ב קוד לדוגמה.
טיפול בתוצאות והצגתן
הכלי לזיהוי התנועות יוצר אובייקט של תוצאה של זיהוי תנועה לכל אחד מהם והרצת זיהוי. אובייקט התוצאה מכיל ציוני דרך בכתב בקואורדינטות של תמונה, ציוני דרך בקואורדינטות בעולם, היד הדומיננטית ביד(יד שמאל/ימין) וביד ימין הקטגוריות של המחוות שזוהו.
בדוגמה הבאה אפשר לראות את נתוני הפלט מהמשימה:
התוצאה GestureRecognizerResult
מכילה ארבעה רכיבים, וכל רכיב הוא מערך שבו כל רכיב מכיל את התוצאה שזוהתה יד אחת שזוהתה.
התאמה ליד הדומיננטית
היד הדומיננטית מבחינה ידנית מציינת אם הידיים שזוהו הן ידיים שמאל או ידיים ימין.
תנועות
קטגוריות התנועה שזוהו של הידיים שזוהו.
ציוני דרך
יש 21 ציוני דרך בעבודת יד, כל אחד מהם מורכב מקואורדינטות
x
,y
ו-z
. הקואורדינטותx
ו-y
מנורמלות ל-[0.0, 1.0] על ידי רוחב התמונה ו בהתאמה, בהתאמה. הקואורדינטהz
מייצגת את העומק של ציון הדרך, יחד עם העומק בפרק כף היד הוא המקור. ככל שהערך קטן יותר, כך הוא למצלמה. העוצמה שלz
משתמשת בסולם הזהות, פחות או יותר, כמוx
.אתרים חשובים בעולם
21 ציוני הדרך הידניים מוצגים גם בקואורדינטות עולמיות. כל ציון דרך מורכב מ-
x
,y
ו-z
, שמייצגים קואורדינטות תלת-ממדיות בעולם האמיתי מטרים עם המקור במרכז הגיאומטרי של היד.
GestureRecognizerResult:
Handedness:
Categories #0:
index : 0
score : 0.98396
categoryName : Left
Gestures:
Categories #0:
score : 0.76893
categoryName : Thumb_Up
Landmarks:
Landmark #0:
x : 0.638852
y : 0.671197
z : -3.41E-7
Landmark #1:
x : 0.634599
y : 0.536441
z : -0.06984
... (21 landmarks for a hand)
WorldLandmarks:
Landmark #0:
x : 0.067485
y : 0.031084
z : 0.055223
Landmark #1:
x : 0.063209
y : -0.00382
z : 0.020920
... (21 world landmarks for a hand)
בתמונות הבאות אפשר לראות את פלט המשימה:
להטמעה מלאה יותר של יצירת המשימה של מזהה תנועות, אפשר לעיין ב קוד לדוגמה.