מדריך לסיווג אודיו ב-Python

המשימה 'מסווג אודיו של 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

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