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

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

גלה כיצד לעקוב אחר ידיו של אדם באמצעות Python, OpenCV לראייה ממוחשבת ו-MediaPipe.

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

זיהוי כף היד

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

זיהוי ציוני דרך ביד

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

המספרים מייצגים מזהה ייחודי עבור כל ציון דרך.

instagram viewer

הגדרת הסביבה שלך

כדי לעקוב אחר הפרויקט הזה, עליך להכיר את יסודות פייתון. התקן את הספריות הבאות בסביבה שלך:

  • OpenCV: תשתמש בספרייה זו לראייה ממוחשבת ולביצוע טכניקות עיבוד תמונה בתמונת הקלט.
  • MediaPipe: תשתמש בספרייה זו כדי לבצע זיהוי ומעקב יד על תמונת הקלט.
  • imutils: תעשה את הספרייה הזו כדי לשנות את גודל מסגרת הווידאו של הקלט.

הפעל את הפקודה הבאה בטרמינל שלך כדי להתקין את ספריות OpenCV, MediaPipe ו-imutils. התקן את pip - מנהל החבילות של Python-אם אתה צריך. ודא שאתה מעביר את הספריות כרשימה מופרדת ברווחים.

pip להתקין OpenCV-Python MediaPipe imutils

לאחר השלמת העדכון, הסביבה מוכנה עבורך להתחיל בקידוד.

קוד המקור המלא של פרויקט זה זמין בו מאגר GitHub.

ייבוא ​​הספריות הנדרשות

תצטרך לייבא את הספריות שהתקנת כדי שתוכל להשתמש בהן. פתח כל Python IDE, צור קובץ Python והוסף את הייבוא ​​הבא:

יְבוּא cv2
יְבוּא mediapipe כפי ש mp
יְבוּא אימוטילס

ודא שאתה מייבא את OpenCV כ-cv2 ו- MediaPipe באותיות קטנות. אם לא תעשה זאת, תהיה שגיאה.

אתה תשתמש ב-mpHands כדי לקרוא לפתרון הידיים של MediaPipe, ובחפצי הידיים כדי לזהות ולעקוב אחר קלט היד. אתה תשתמש באובייקט mpDraw כדי לצייר את הקשרים בין ציוני הדרך של הידיים שזוהו.

mpHands = mp.solutions.hands
ידיים = mpHands. ידיים()
mpDraw = mp.solutions.drawing_utils

אתה יכול לכוונן עדין את מודל הידיים של MediaPipe על ידי העברת פרמטרים שונים לבנאי Hands(). ערכי ברירת המחדל טובים מספיק עבור הפרויקט הזה, אבל אתה יכול להתנסות איתם כדי לראות כיצד הם משפיעים על המודל:

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

ביצוע מעקב יד

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

פונקציית עיבוד קלט

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

# עיבוד תמונת הקלט
defתהליך_תמונה(אימג):
# המרת הקלט לגווני אפור
grey_image = cv2.cvtColor (img, cv2.COLOR_BGR2RGB)
תוצאות = hands.process (gray_image)

# החזרת הידיים שזוהו לפונקציית הקריאה
לַחֲזוֹר תוצאות

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

פונקציית ציור חיבורי נקודת ציון ביד

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

# ציור קשרים ציוני דרך
defלצייר_חיבורי_יד(אימג, תוצאות):
אם results.multi_hand_landmarks:
ל ידLms ב results.multi_hand_landmarks:
ל מזהה, lm ב enumerate (handLms.landmark):
h, w, c = img.shape

# מציאת הקואורדינטות של כל ציון דרך
cx, cy = int (lm.x * w), int (lm.y * h)

# הדפסת כל מזהה וקואורדינטות של ציון דרך
# בטרמינל
print (id, cx, cy)

# יצירת מעגל סביב כל ציון דרך
cv2.circle (img, (cx, cy), 10, (0, 255, 0),
cv2.FILLED)
# ציור חיבורי ציון הדרך
mpDraw.draw_landmarks (img, handLms,
mpHands. HAND_CONNECTIONS)

לַחֲזוֹר img

הפונקציה מתחילה בהקיף כל נקודת ציון:

לאחר מכן הוא מצייר את חיבורי הידיים:

לבסוף הוא מחזיר את הפלט שלו לפונקציה הקוראת.

הפונקציה העיקרית

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

defרָאשִׁי():
# החלף 0 בנתיב הווידאו כדי להשתמש ב-a
# סרטון מוקלט מראש
cap = cv2.VideoCapture(0)

בזמןנָכוֹן:
# לוקח את הקלט
הצלחה, תמונה = cap.read()
image = imutils.resize (תמונה, רוחב =500, גובה=500)
תוצאות = תהליך_תמונה (תמונה)
draw_hand_connections (תמונה, תוצאות)

# הצגת הפלט
cv2.imshow("גשש יד", תמונה)

# התוכנית מסתיימת כאשר מקש q נלחץ
אם cv2.waitKey(1) == ord('q'):
cap.release()
cv2.destroyAllWindows()

השלב האחרון הוא הפעלת התוכנית שלך. הקוד שלהלן מבטיח שכאשר אתה מפעיל את התוכנית, הפונקציה הראשית פועלת תחילה.

אם __שם__ == "__רָאשִׁי__":
רָאשִׁי()

כאשר התוכנית פועלת, היא מפיקה פלט כך:

התוכנית עוקבת אחר המחוגים בזמן אמת.

מעקב יד למציאות מדומה סוחפת

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

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