טם - טם תופי : מסכם מסמך

‫מסמך מסכם‪ :‬תופי טם‪-‬טם‬
‫המשתתפים בפרויקט‪:‬‬
‫‪‬‬
‫‪‬‬
‫תם הוברמן – ‪hubermant@gmail.com‬‬
‫דן איבגי – ‪danevgi@gmail.com‬‬
‫פירוט על הרעיון‪:‬‬
‫תופי טם‪-‬טם הם זוג תופים שלכל שני צלילים שונים שהוא יכול להפיק כתלות במיקום המכה שנותנים‬
‫לתוף‪ .‬מטרת הפרויקט שלנו הייתה לדמות תיפוף בתופים אלו בעזרת מכשיר הטלפון‪ .‬השימוש‬
‫באפליקציה יעשה ע"י הצבה של המכשיר עם המצלמה מופנית כלפי מעלה‪ ,‬והשמעת קולות בהתאם‬
‫לתנועות תיפוף שתתבצע מעל המכשיר‪.‬‬
‫‪ -1‬תופי טם‪-‬טם להמחשה‬
‫‪ -2‬דוגמה לשימוש באפליקציה‬
‫ממשק‪:‬‬
‫הממשק לאפליקציה הוא מינימלי ביותר‪ .‬מרגע בחירת האפליקציה יהפוך המסך הקדמי למצלמה‬
‫מרגע זה יש להפנות את המסך כלפי מעלה (לעבר התקרה) ולהציב את הידיים מעליו‪.‬‬
‫כעת ניתן לראות שהאפליקציה מזהה נכון את הידיים (כל יד מוקפת בצבע שונה)‬
‫מרגע זה ניתן לבצע תנועת תיפוף והרעש המתאים יושמע‪.‬‬
‫אפשר לשים לב לשני אלמנטים בממשק שנועדו לפיתוח והבנת האפליקציה ‪ ,‬הראשון הוא סימון‬
‫מרכזי המאסה של כל יד (דבר שמאפשר לנו להעריך באיזה תוף מדובר – ראו סעיף "מימוש") ‪,‬‬
‫והשני הוא הצגת נתוני המצלמה‪ .‬נתוני המצלמה מאפשרים לנו לבדוק את יעילות האלגוריתמים בהם‬
‫אנו משתמשים על מנת לזהות את התיפוף ובעזרתם שומרים אנו על כך שהאפליקציה תרוץ בזמן‬
‫אמת‪.‬‬
‫מימוש‪:‬‬
‫על מנת לבצע את המשימה החלטנו לפרק אותה לכמה שלבים‪:‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫הרכשת התמונה מהמצלמה למכשיר‬
‫ביצוע סגמנטציה עבור הידיים‬
‫ניתוח הסגמנטים שהתקבלו על מנת לזהות כל יד ומעל איזה "תוף" היא נמצאת‬
‫זיהוי מגמת התנועה של היד – האם היד מתקדמת לעבר התוף או מתרחקת ממנו‪.‬‬
‫השמעת צליל התוף המתאים בהינתן זיהוי מכה‪.‬‬
‫השלבים הראשון והאחרון הם שלבים ללא עיבוד תמונה ועיקרם עבודה מול ה ‪ framework‬שמערכת‬
‫ההפעלה מספקת‪.‬‬
‫את יתר השלבים האחרים ניסינו לממש במספר צורות שונות‪ ,‬ולשלב בניהן תוך כדי שמירה על‬
‫מאפייני הפתרון הנדרשים (שעיקרם עיבוד התמונה בקצב מהיר‪ ,‬ושמירה על פתרון שעמיד בתנאי‬
‫תקרה שונים)‪.‬‬
‫עבור סגמנטציה של הידיים מהרקע העברנו את התמונה לגווני אפור‪ ,‬הפעלנו פעולת טשטוש על‬
‫מנת להוריד רעשים והפכנו את התמונה לשחור לבן לפי קביעת ערך סף לרמת האפור שהתקבלה‪.‬‬
‫לאחר מכן הנחנו שהידיים יהיו שני הקונטורים הגדולים ביותר שהתקבלו בתמונה לאחר העיבוד‪ -‬וכך‬
‫מצאנו אותם‪.‬‬
‫את זיהוי מיקום היד מעל התופים ביצענו ע"י חישוב מרכז המאסה של כל יד והבנה מעל איזה חלק‬
‫של התמונה הוא מתקבל (צד ימין או צד שמאל)‪ .‬את חישוב מרכז המאסה ביצענו ע"י חישוב המומנט‬
‫של הפיקסלים המייצגים את היד‪.‬‬
‫את זיהוי מגמת היד ביצענו על ידי מעקב אחרי גודל השטח (כמות הפיקסלים) של כל אחת מהידיים‪.‬‬
‫כאשר ההנחה היא שגודל השטח בין שתי תמונות של יד מסוימת גדל היד מתקדמת לעבר המצלמה‬
‫וכאשר הוא קטן היא מתרחקת‪ .‬תחת הנחה זו אנו יודעים "להכות בתוף" כאשר הגודל משנה מגמה‬
‫מגדל לקטן‪ .‬לאחר ניסויים עם הנחה זו גילנו שהיא אינה תואמת את המציאות תמיד – גדלי הידיים‬
‫נוטים להשתנות גם כשכלל לא מתבצעת תנועה מכוונת של הידיים‪ .‬בשל כך הוספנו בדיקה לפני‬
‫החלטה על שינוי מגמה של יד מסוימת הבודקת שההפרש בין הגודל הקודם של היד לערך החדש‬
‫עובר סף מסוים‪.‬‬
‫על מנת לשמור על ביצוע תהליך עיבוד התמונה בזמן אמת אנחנו דואגים להקטין את התמונה לפני‬
‫תהליך העיבוד (כרגע הקטנת התמונה היא בסדר גודל של פי ‪ 11‬מהתמונה המקורית)‪.‬‬
‫תוצאות‪:‬‬
‫עקב אופיי של הפרויקט ‪ -‬לא נוכל להראות את התוצאה הסופית (כי את התוצאה הסופית ניתן רק‬
‫לשמוע)‪ ,‬ולכן נציג הדגמות של השלבים השונים‪:‬‬
‫‪ .1‬הדגמה של תהליך הסגמנטציה של הידיים‪:‬‬
‫‪ .2‬הדגמה של תהליך זיהוי מרכז המאסה של כל יד והבדלה בין צד ימין לצד שמאל‪:‬‬
‫מגבלות‪:‬‬
‫לאפליקציה מספר מגבלות עקב ההנחות שנקטנו במהלך הפיתוח‪.‬‬
‫‪ .1‬בתהליך הסגמנטציה‪ ,‬ההנחות שהידיים יעברו את השלב של הפעלת ערך סף‪ ,‬או שהידיים‬
‫הם שני הקונטורים הגדולים ביותר לעיתים מתגלות כלא נכונות‪.‬‬
‫‪ 1‬מקרה בו זוהה אובייקט אחר כיד‬
‫‪ 2‬מקרה בו עקב ביצוע ערך הסף היד "התחברה"‬
‫עם אובייקט אחר‬
‫‪ .2‬בתהליך מעקב אחר מגמת היד‪ ,‬לעיתים ערך הסף שהוספנו על מנת למנוע הרעשה עקב‬
‫שינויים בקנה מידה קטן מונעים השמעה נכונה של צלילים‪.‬‬
‫‪ 3‬מקרה בו אצבעות היד חרגו מהתמונה ‪ -‬אפקט‬
‫שמקטין את שטח היד למרות שהתנועה היא לכיוון‬
‫המצלמה‬
‫‪ 4‬מקרה בו היד רחוקה מידי מהמצלמה ולכן‬
‫השינוי בשטח כף היד עקב התיפוף קטן מערך‬
‫הסף שנקבע‬
:‫מקורות‬

9 OpenCV Tutorials for Hand Gesture Detection and Recognition
http://www.intorobotics.com/9-opencv-tutorials-hand-gesture-detectionrecognition/

OpenCV's API documentation
http://docs.opencv.org

Google's Android API
http://developer.android.com/training/index.html