המשימה 'מסווג אודיו של MediaPipe' מאפשרת לכם לבצע סיווג של נתוני אודיו. אפשר במשימה הזאת תוכלו לזהות אירועים של זיהוי צלילים מתוך קבוצה של קטגוריות שאומנו. האלה ההוראות לשימוש במסווג האודיו עם Python.
מידע נוסף על היכולות, המודלים ואפשרויות ההגדרה במשימה הזאת, ראו סקירה כללית.
קוד לדוגמה
הקוד לדוגמה של מסווג האודיו מספק הטמעה מלאה של ב-Python, לעיונך. הקוד הזה עוזר לכם לבדוק את המשימה הזו ולקבל התחלתם לפתח מסווג אודיו משלכם. ניתן להציג, להריץ ולערוך דוגמה למסווג אודיו קוד באמצעות דפדפן האינטרנט בלבד, עם Google Colab. אפשר להציג את קוד המקור עבור בדוגמה הזאת GitHub.
אם אתם מטמיעים את מסווג האודיו ל-Raspberry Pi, יש לעיין במאמר הדוגמה של Raspberry Pi app.
הגדרה
בקטע הזה מתוארים השלבים העיקריים להגדרת סביבת הפיתוח פרויקטים של קוד שישמשו אותך באופן ספציפי לשימוש במסווג אודיו. למידע כללי על להגדיר את סביבת הפיתוח לשימוש במשימות של MediaPipe, כולל הדרישות לגרסאות הפלטפורמה זמינות במדריך ההגדרה עבור Python.
חבילות
המשימה של מסווג האודיו היא חבילת ה-Mediapipe PIP. אפשר להתקין את או תלות בישויות הבאות:
$ python -m pip install mediapipe
יבוא
כדי לגשת לפונקציות המשימה של מסווג האודיו, מייבאים את המחלקות הבאות:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio
דגם
למשימה של מסווג האודיו של MediaPipe נדרש מודל מאומן התואם למשימה הזו. מידע נוסף על מודלים זמינים מאומנים של מסווג אודיו זמין בכתובת בסקירה הכללית על המשימה בקטע 'מודלים'.
בוחרים מודל ומורידים אותו, ולאחר מכן שומרים אותו בספרייה מקומית. אפשר להשתמש המומלצים יאמנט מודל טרנספורמר.
model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'
מציינים את הנתיב של המודל בתוך הפרמטר 'שם המודל', כמו בדוגמה הבאה:
base_options = BaseOptions(model_asset_path=model_path)
יצירת המשימה
כדי ליצור את המשימה, צריך להשתמש בפונקציה create_from_options
.
הפונקציה create_from_options
מקבלת אפשרויות הגדרה כולל הרצה
מצב, שם תצוגה, לוקאל, מספר מקסימלי של תוצאות, סף מהימנות,
רשימת הקטגוריות המותרות ורשימת הישויות שנחסמו. מידע נוסף על הגדרות אישיות
אפשרויות נוספות, ראו סקירה כללית של ההגדרות.
במשימה של מסווג האודיו אפשר להשתמש בקטעי אודיו ובסטרימינג של אודיו כקלט. שלך חייב לציין את מצב הריצה המתאים לסוג נתוני הקלט, כאשר בתהליך יצירת המשימה. כדי להציג את הנתונים, צריך לבחור את הכרטיסייה שתואמת לסוג נתוני הקלט איך ליצור את המשימה ולהריץ מסקנות.
קטעי אודיו
AudioClassifier = mp.tasks.audio.AudioClassifier AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions AudioRunningMode = mp.tasks.audio.RunningMode BaseOptions = mp.tasks.BaseOptions options = AudioClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), max_results=5, running_mode=AudioRunningMode.AUDIO_CLIPS) with AudioClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
שידור האודיו
AudioClassifier = mp.tasks.audio.AudioClassifier AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions AudioClassifierResult = mp.tasks.audio.AudioClassifierResult AudioRunningMode = mp.tasks.audio.RunningMode BaseOptions = mp.tasks.BaseOptions def print_result(result: AudioClassifierResult, timestamp_ms: int): print(AudioClassifierResult result: {}’.format(result)) options = AudioClassifierOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), running_mode=AudioRunningMode.AUDIO_STREAM, max_results=5, result_callback=print_result) with AudioClassifier.create_from_options(options) as classifier: # The classifier is initialized. Use it here. # ...
כדי לראות דוגמה מלאה ליצירת מסווג אודיו לשימוש עם אודיו, אפשר לעיין ב קוד דוגמה.
אפשרויות תצורה
המשימה הזו כוללת את אפשרויות ההגדרה הבאות לאפליקציות Python:
שם האפשרות | תיאור | טווח ערכים | ערך ברירת מחדל |
---|---|---|---|
running_mode |
מגדיר את מצב הריצה של המשימה. למסווג האודיו יש שני מצבים: AUDIO_CLIPS: המצב להפעלת משימת האודיו על קטעי אודיו עצמאיים. AUDIO_STREAM: המצב להפעלת משימת האודיו בשידור אודיו, למשל מהמיקרופון. במצב הזה, resultListener חייב להיות נקראת כדי להגדיר אוזן כדי לקבל את תוצאות הסיווג באופן אסינכרוני. |
{AUDIO_CLIPS, AUDIO_STREAM } |
AUDIO_CLIPS |
display_names_locale |
מגדיר את השפה של תוויות שישמשו לשמות לתצוגה שסופקו
של מודל המשימה, אם יש כאלה. ברירת המחדל היא en עבור
אנגלית. אפשר להוסיף תוויות שמותאמות לשוק המקומי למטא-נתונים של מודל מותאם אישית
באמצעות TensorFlow Lite Metadata Writer API
| קוד שפה | en |
max_results |
מגדיר את המספר המקסימלי האופציונלי של תוצאות סיווג מובילות ל- החזרה. אם < 0, כל התוצאות הזמינות יוחזרו. | מספרים חיוביים כלשהם | -1 |
score_threshold |
הגדרת סף הציון של התחזית שמבטל את הסף שצוין ב את המטא-נתונים של המודל (אם יש). תוצאות מתחת לערך הזה נדחות. | [0.0, 1.0] | לא מוגדר |
category_allowlist |
מגדיר את הרשימה האופציונלית של שמות קטגוריות מותרות. אם השדה לא ריק,
תוצאות הסיווג שבהן שם הקטגוריה לא נמצא בקבוצה הזו יהיו
מסונן. המערכת מתעלמת משמות קטגוריות כפולים או לא ידועים.
האפשרות הזו בלעדית למשתמשי category_denylist ומשתמשים
ושניהם יובילו לשגיאה. |
כל מחרוזת | לא מוגדר |
category_denylist |
מגדיר את הרשימה האופציונלית של שמות קטגוריות שאינם מותרים. אם המיקום
לא ריקות, תוצאות סיווג שבהן שם הקטגוריה נמצא בקבוצה זו יסוננו
החוצה. המערכת מתעלמת משמות קטגוריות כפולים או לא ידועים. האפשרות הזו מקבילה
בלעדי ל-category_allowlist ושימוש בשתי התוצאות עלול לגרום לשגיאה. |
כל מחרוזת | לא מוגדר |
result_callback |
מגדיר את אוזן התוצאות לקבל את תוצאות הסיווג
באופן אסינכרוני כאשר מסווג האודיו נמצא בשידור האודיו
במצב תצוגה. אפשר להשתמש באפשרות הזו רק כשמצב הריצה מוגדר ל-AUDIO_STREAM |
לא רלוונטי | לא מוגדר |
הכנת נתונים
מסווג האודיו פועל עם קטעי אודיו ועם שידורי אודיו. המשימה מטפלת עיבוד מראש של קלט נתונים, כולל דגימה מחדש, אגירת נתונים ומסגור.
מכינים את הקלט כקובץ אודיו או כמערך נומרי, ואז ממירים אותו
אובייקט AudioData
של MediaPipe. אפשר להשתמש בספרייה חיצונית כמו
SciPy כדי לטעון את קטעי האודיו של הקלט כמערכים מספריים.
בדוגמאות הבאות מוסבר איך להכין את הנתונים לעיבוד, כל אחד מסוגי הנתונים הזמינים:
קטעי אודיו
import numpy as np from scipy.io import wavfile AudioData = mp.tasks.components.containers.AudioData sample_rate, buffer = wavfile.read('/path/to/audio.wav') audio_data = AudioData.create_from_array( buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
שידור האודיו
import numpy as np AudioData = mp.tasks.components.containers.AudioData # Read microphone data as np arrays, then call audio_data = AudioData.create_from_array( buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
הרצת המשימה
קוראים לפונקציה classify שתואמת למצב הריצה כדי להפעיל מסקנות. Audio Classifier API מחזיר את הקטגוריות האפשריות של האודיו אירועים במאגר הנתונים הזמני של האודיו.
קטעי אודיו
# Perform audio classification on the provided audio clip. audio_classifier_result_list = classifier.classify(audio_data)
שידור האודיו
# Send live audio data to perform audio classification. # Results are sent to the `result_callback` provided in the `AudioClassifierOptions` classifier.classify_async(audio_data, timestamp_ms)
שימו לב לנקודות הבאות:
- כשמפעילים את מצב שידור אודיו, צריך לספק גם את מסווג האודיו מסמן את חותמת הזמן של נתוני האודיו בקלט.
- כשמפעילים את המודל של קטעי האודיו, המשימה 'מסווג אודיו' תחסום את את ה-thread הנוכחי עד לסיום עיבוד האודיו בקלט.
דוגמה מלאה יותר להפעלת מסווג אודיו עם קטעי אודיו אפשר למצוא בקטע קוד דוגמה.
טיפול בתוצאות והצגתן
כשמריצים את ההסקה, המשימה 'מסווג אודיו' מחזירה
אובייקט AudioClassifierResult
שמכיל את רשימת הקטגוריות האפשריות
עבור אירועי האודיו בתוך אודיו הקלט.
בדוגמה הבאה אפשר לראות את נתוני הפלט מהמשימה:
AudioClassifierResult:
Timestamp in microseconds: 100
ClassificationResult #0:
Timestamp in microseconds: 100
Classifications #0 (single classification head):
head index: 0
category #0:
category name: "Speech"
score: 0.6
index: 0
category #1:
category name: "Music"
score: 0.2
index: 1
הקוד לדוגמה של מסווג האודיו מדגים איך להציג את הסיווג התוצאות שהוחזרו מהמשימה הזו, ראו דוגמה לקבלת פרטים.