Leitfaden zur Audioklassifizierung für Python

Mit der Aufgabe „MediaPipe-Audioklassifikator“ können Sie Audiodaten klassifizieren. Mit dieser Aufgabe können Sie Geräuschereignisse aus einer Reihe von trainierten Kategorien identifizieren. In dieser Anleitung erfahren Sie, wie Sie den Audioklassifikator mit Python verwenden.

Weitere Informationen zu den Funktionen, Modellen und Konfigurationsoptionen dieser Aufgabe finden Sie in der Übersicht.

Codebeispiel

Der Beispielcode für den Audioklassifikator bietet eine vollständige Implementierung dieser Aufgabe in Python. Mit diesem Code können Sie diese Aufgabe testen und mit dem Erstellen Ihres eigenen Audioklassifikators beginnen. Sie können den Beispielcode für den Audioklassifikator ganz einfach über Ihren Webbrowser mit Google Colab aufrufen, ausführen und bearbeiten. Sie können sich den Quellcode für dieses Beispiel auf GitHub ansehen.

Wenn Sie den Audioklassifikator für Raspberry Pi implementieren, verwenden Sie die Beispiel-App für Raspberry Pi.

Einrichtung

In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten der Entwicklungsumgebung und Programmierprojekte speziell für die Verwendung des Audioklassifikators beschrieben. Allgemeine Informationen zum Einrichten der Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich der Anforderungen an die Plattformversion, finden Sie im Einrichtungsleitfaden für Python.

Pakete

Die Audioklassifikatoraufgabe das mediapipe-Pip-Paket. Du kannst die Abhängigkeit mit folgendem Befehl installieren:

$ python -m pip install mediapipe

Importe

Importieren Sie die folgenden Klassen, um auf die Aufgabenfunktionen des Audioklassifikators zuzugreifen:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

Modell

Die MediaPipe-Audioklassifikatoraufgabe erfordert ein trainiertes Modell, das mit dieser Aufgabe kompatibel ist. Weitere Informationen zu verfügbaren trainierten Modellen für den Audioklassifikator finden Sie in der Aufgabenübersicht im Abschnitt „Modelle“.

Wählen Sie ein Modell aus, laden Sie es herunter und speichern Sie es dann in einem lokalen Verzeichnis. Sie können das empfohlene Yamnet-Modell verwenden.

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'

Geben Sie den Pfad des Modells im Modellnamen-Parameter an, wie unten dargestellt:

base_options = BaseOptions(model_asset_path=model_path)

Aufgabe erstellen

Verwenden Sie die Funktion create_from_options, um die Aufgabe zu erstellen. Die Funktion create_from_options akzeptiert Konfigurationsoptionen wie den Ausführungsmodus, die Sprache für Anzeigenamen, die maximale Anzahl von Ergebnissen, den Konfidenzgrenzwert, die Liste der zulässigen Kategorien und die Ablehnungsliste. Weitere Informationen zu Konfigurationsoptionen finden Sie unter Konfigurationsübersicht.

Die Aufgabe „Audioklassifikator“ unterstützt Audioclips und Audiostreams als Eingabe. Beim Erstellen der Aufgabe müssen Sie den Ausführungsmodus angeben, der Ihrem Eingabedatentyp entspricht. Wählen Sie den Tab für Ihren Eingabedatentyp aus, um zu sehen, wie Sie die Aufgabe erstellen und die Inferenz ausführen.

Audioclips

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.
  # ...
    

Audiostream

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.
  # ...
  

Ein vollständiges Beispiel für das Erstellen eines Audioklassifikators zur Verwendung mit Audio findest du im Codebeispiel.

Konfigurationsoptionen

Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Python-Anwendungen:

Option Beschreibung Wertebereich Standardwert
running_mode Legt den Ausführungsmodus für die Task fest. Der Audioklassifikator hat zwei Modi:

AUDIO_CLIPS: Der Modus zum Ausführen der Audioaufgabe für unabhängige Audioclips.

AUDIO_STREAM: Der Modus zum Ausführen der Audioaufgabe in einem Audiostream, z. B. über ein Mikrofon. In diesem Modus muss resultListener aufgerufen werden, um einen Listener einzurichten, der die Klassifizierungsergebnisse asynchron empfängt.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale Legt die Sprache von Labels fest, die für Anzeigenamen bereitgestellt werden, die in den Metadaten des Aufgabenmodells angegeben sind, sofern verfügbar. Der Standardwert für Englisch ist en. Mit der TensorFlow Lite Metadata Writer API können Sie den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen. Sprachcode en
max_results Legt die optionale maximale Anzahl der Klassifizierungsergebnisse mit den besten Bewertungen fest, die zurückgegeben werden sollen. Wenn < 0, werden alle verfügbaren Ergebnisse zurückgegeben. Beliebige positive Zahlen -1
score_threshold Legt den Schwellenwert für den Vorhersagewert fest, der den in den Modellmetadaten angegebenen Grenzwert überschreibt (falls vorhanden). Ergebnisse unter diesem Wert werden abgelehnt. [0,0;1,0] Nicht festgelegt
category_allowlist Legt die optionale Liste der zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, deren Kategoriename nicht in diesem Set enthalten ist. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option und category_denylist schließen sich gegenseitig aus und die Verwendung beider Werte führt zu einem Fehler. Beliebige Strings Nicht festgelegt
category_denylist Legt die optionale Liste der nicht zulässigen Kategorienamen fest. Wenn das Feld nicht leer ist, werden Klassifizierungsergebnisse herausgefiltert, deren Kategoriename in diesem Satz enthalten ist. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option und category_allowlist schließen sich gegenseitig aus und die Verwendung beider Optionen führt zu einem Fehler. Beliebige Strings Nicht festgelegt
result_callback Legt den Ergebnis-Listener so fest, dass er die Klassifizierungsergebnisse asynchron empfängt, wenn sich der Audioklassifikator im Audiostreammodus befindet. Kann nur verwendet werden, wenn der Laufmodus auf AUDIO_STREAM festgelegt ist Nicht festgelegt

Daten vorbereiten

Der Audioklassifikator funktioniert mit Audioclips und Audiostreams. Die Aufgabe übernimmt die Vorverarbeitung der Dateneingabe, einschließlich Resampling, Zwischenspeichern und Framing.

Bereiten Sie die Eingabe als Audiodatei oder NumPy-Array vor und konvertieren Sie sie dann in ein AudioData-MediaPipe-Objekt. Sie können eine externe Bibliothek wie SciPy verwenden, um Ihre Eingabeaudios als NumPy-Arrays zu laden.

Die folgenden Beispiele erklären und zeigen, wie Daten für die Verarbeitung für jeden der verfügbaren Datentypen vorbereitet werden:

Audioclips

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)
    

Audiostream

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)
    

Task ausführen

Sie rufen die Klassifizierungsfunktion auf, die Ihrem Ausführungsmodus entspricht, um Inferenzen auszulösen. Die Audio Classifier API gibt die möglichen Kategorien für die Audioereignisse im Audioeingabezwischenspeicher zurück.

Audioclips

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

Audiostream

# 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)
    

Wichtige Hinweise:

  • Im Audiostreammodus müssen Sie außerdem der Audioklassifikatoraufgabe den Zeitstempel der Eingabeaudiodaten übergeben.
  • Im Audioclipmodell blockiert die Aufgabe „Audioklassifikator“ den aktuellen Thread, bis die Verarbeitung der Audioeingabe abgeschlossen ist.

Ein ausführlicheres Beispiel für das Ausführen des Audioklassifikators mit Audioclips findest du im Codebeispiel.

Ergebnisse verarbeiten und anzeigen

Beim Ausführen der Inferenz gibt die Audioklassifikatoraufgabe ein AudioClassifierResult-Objekt zurück, das die Liste der möglichen Kategorien für die Audioereignisse in den Audioeingaben enthält.

Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:

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

Der Beispielcode für den Audioklassifikator zeigt, wie die von dieser Aufgabe zurückgegebenen Klassifizierungsergebnisse angezeigt werden. Weitere Informationen finden Sie im Codebeispiel.