יצירת אפליקציה בסיסית לסיווג אודיו

1. לפני שמתחילים

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

בשיעור Lab זה נעשה שימוש ב-TensorFlow Lite כדי להפעיל מודל סיווג אודיו במכשיר Android.

מה תלמדו

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

מה תפתחו

אפליקציה פשוטה לזיהוי אודיו שמפעילה מודל לזיהוי אודיו של TensorFlow Lite כדי לזהות אודיו מהמיקרופון בזמן אמת

33af0fdb0a027fa8.png

מה תצטרך להכין

  • גרסה עדכנית של Android Studio (גרסה 4.1.2 ומעלה)
  • מכשיר Android פיזי עם גרסת Android ב-API 23 (Android 6.0)
  • הקוד לדוגמה
  • ידע בסיסי על פיתוח Android בקוטלין

2. קבלת הקוד לדוגמה

להורדת הקוד

כדי להוריד את כל הקוד של Lablab זה, צריך ללחוץ על הקישור הבא:

פותחים את הקובץ הדחוס. פעולה זו תשחרר תיקיית בסיס (odml-pathways) עם כל המשאבים הדרושים לך. עבור קוד Lab זה תצטרכו את המקורות רק בספריית המשנה audio_classification/codelab1/android.

הערה: אם אתם מעדיפים לשכפל את המאגר:

git clone https://github.com/googlecodelabs/odml-pathways.git

ספריית המשנה android במאגר audio_classification/codelab1/android מכילה שתי ספריות:

  • android_studio_folder.pngהתחלה — קוד בסיס שעליו תבססו על מעבדת קוד זו.
  • android_studio_folder.pngסופי – הושלם הקוד לאפליקציה לדוגמה שהושלמה.

ייבוא אפליקציית ההתחלה

נתחיל בייבוא של האפליקציה למתחילים ל-Android Studio.

  1. פותחים את Android Studio ובוחרים באפשרות ייבוא פרויקט (גראדל, Eclipse ADT וכו')
  2. יש לפתוח את התיקייה starter (audio_classification/codelab1/android/starter) מקוד המקור שהורדת קודם.

7c0f27882a2698ac.png

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

  1. בוחרים באפשרות סנכרון פרויקט עם קובצי Gradle (b451ab2d04d835f9.png) מסרגל הכלים ב-Android Studio.

הפעלת האפליקציה למתחילים

עכשיו, לאחר שייבאתם את הפרויקט אל Android Studio, אתם מוכנים להפעיל את האפליקציה בפעם הראשונה.

מחברים את מכשיר ה-Android באמצעות USB למחשב ולוחצים על הפעלה (exe.png) בסרגל הכלים של Android Studio.

5518972c21705945.png

3. חיפוש מודל אימון מראש

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

כדי למצוא דגמים שהוכשרו מראש יש להשתמש ב-TensorFlow Hub ( www.tfhub.dev).

91e39900ff58818c.png

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

9d44d38c297bf3dc.png

עבור האפליקציה שלך, עליך לסווג אירוע באמצעות מודל YAMNet.

YAMNet הוא סיווג אירועי אודיו שמתבסס על גלי אודיו כקלט ומבצע חיזויים עצמאיים לכל אחד מ-521 אירועי אודיו.

המודל yamnet/classation כבר מומר ל-TensorFlow Lite וכולל מטא-נתונים ספציפיים המאפשרים לספריית המשימות של TFLite לאודיו, להקל על השימוש במכשירים ניידים.

65dc0f610eb27762.png

בוחרים את הכרטיסייה המתאימה: TFLite (yamnet/classification/tflite), ולוחצים על הורדה. ניתן גם לראות את המטא-נתונים של המודל בחלק התחתון.

cfb3cfeb310e1f51.png

קובץ הדגם הזה (lite-model_yamnet_classification_tflite_1.tflite) יהיה בשימוש בשלב הבא.

4. ייבוא המודל החדש לאפליקציה הבסיסית

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

ב-Android Studio, בכלי הפרויקט, לוחצים לחיצה ימנית על התיקייה נכסים.

7cca2c22ed8cf4c8.png

יופיע חלון קופץ עם רשימת אפשרויות. אחת מהאפשרויות האלה היא לפתוח את התיקייה במערכת הקבצים. ב-Mac, הוא יהיה מוצג ב-Finder, ב-Windows הוא Open ב-Explorer, וב-Ubuntu הוא יוצג ב-Files. מחפשים את התוסף המתאים למערכת ההפעלה ובוחרים בו.

95e0eca881d35f6b.png

לאחר מכן, מעתיקים את המודל שהורדתם אליו.

לאחר מכן, חוזרים ל-Android Studio ו אמורים לראות את הקובץ בתיקייה נכסים.

703b1842fb09e893.png

5. טוענים את הדגם החדש באפליקציה הבסיסית

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

כדי למצוא בקלות את המשימות עבור משימות, ב-Android Studio, עוברים לתפריט: View > Tool Windows > RSVP. פעולה זו תפתח חלון עם הרשימה, ותוכלו פשוט ללחוץ עליו כדי לעבור ישירות לקוד.

בקובץ build.gradle (גרסת המודול) תמצאו את המשימה הראשונה.

רשימת משימות 1 היא להוסיף את התלות של Android:

implementation 'org.tensorflow:tensorflow-lite-task-audio:0.2.0'

כל שאר השינויים בקוד יהיו בMainActivity

:** 2.1 יוצר את המשתנה עם שם הדגם לצורך טעינה בשלבים הבאים.

var modelPath = "lite-model_yamnet_classification_tflite_1.tflite"

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

var probabilityThreshold: Float = 0.3f

:** 2.3 הוא המקום שבו טוענים את המודל מתיקיית הנכסים. הסיווג של אודיו-סיווג שהוגדר בספרייה של 'משימות אודיו' מוכן לטעינת הדגם ומספק את כל השיטות הדרושות כדי להפעיל מסקנות וכדי לעזור ביצירת מכשיר הקלטת אודיו.

val classifier = AudioClassifier.createFromFile(this, modelPath)

6. הקלטת אודיו

Audio Tasks API כולל כמה שיטות מועילות שיעזרו לכם ליצור מכשיר הקלטת אודיו עם ההגדרה המתאימה שהמודל שלכם מצפה (למשל: קצב דגימה, קצב העברת נתונים, מספר הערוצים). כך אין צורך למצוא אותו באופן ידני וגם ליצור אובייקטים של הגדרות אישיות.

הרשמה ל-3.1: יצירת משתנה טנור שיאחסן את ההקלטה להסקת הערך ובניית מפרט הפורמט של מכשיר ההקלטה.

val tensor = classifier.createInputTensorAudio()

הזמנה 3.2: הצגת המפרטים של מכשיר ההקלטה שהוגדרו על ידי המטא-נתונים של הדגם בשלב הקודם.

val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
       "Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs

92e81894674a5b0.png

הזמנה 3.3: יצירת מכשיר הקלטת אודיו והתחלת ההקלטה.

val record = classifier.createAudioRecord()
record.startRecording()

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

7. הוספת ההסקה למודל

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

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

Timer().scheduleAtFixedRate(1, 500) {
...
}

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

tensor.load(record)
val output = classifier.classify(tensor)

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

val filteredModelOutput = output[0].categories.filter {
   it.score > probabilityThreshold
}

אישור 4.3: כדי להקל על קריאת התוצאה, כדאי ליצור מחרוזת עם התוצאות המסוננות:

val outputStr = filteredModelOutput.sortedBy { -it.score }
   .joinToString(separator = "\n") { "${it.label} -> ${it.score} " }

עדכון 4.4 עדכון של ממשק המשתמש. באפליקציה הפשוטה מאוד, התוצאה מוצגת רק ב-TextView. מכיוון שהסיווג לא נמצא בשרשור הראשי, צריך להשתמש ב-handler כדי לבצע את העדכון הזה.

runOnUiThread {
   textView.text = outputStr
}

הוספת את כל הקודים הדרושים ל:

  • טעינת המודל מתיקיית הנכסים
  • יצירת מכשיר הקלטת אודיו עם ההגדרה הנכונה
  • מתבצע סיכום
  • הצגת התוצאות הטובות ביותר על המסך

כל מה שצריך עכשיו הוא לבדוק את האפליקציה.

8. צריך להפעיל את האפליקציה הסופית

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

מחברים את מכשיר Android ולוחצים על סמל ההפעלה ( exe.png) בסרגל הכלים של Android Studio.

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

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

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

33af0fdb0a027fa8.png

9. מעולה!

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

מה כללנו?

  • איך לפרוס דגם TensorFlow Lite באפליקציה ל-Android
  • איך למצוא מודלים מ-TensorFlow Hub ולהשתמש בהם.

השלבים הבאים

  • אפשר להתאים אישית את המודל עם הנתונים שלך.

מידע נוסף

יש לך שאלה?

דיווח על בעיות