Mit der Aufgabe „MediaPipe Audio Classifier“ können Sie Audiodaten klassifizieren. Sie können verwenden, um Geräuschereignisse aus einer Reihe trainierter Kategorien zu identifizieren. Diese wie Sie den Audioklassifikator mit Python verwenden.
Weitere Informationen zu Funktionen, Modellen und Konfigurationsoptionen Sehen Sie sich die Übersicht an.
Codebeispiel
Der Beispielcode für den Audioklassifikator bietet eine vollständige Implementierung dieses in Python. Dieser Code hilft Ihnen, diese Aufgabe zu testen und Ihren eigenen Audioklassifikator zu entwickeln. Sie können den Bereich Audioklassifikator Beispiel Code mit Google Colab in Ihrem Webbrowser. Sie können den Quellcode für dieses Beispiel auf GitHub
Wenn Sie den Audioklassifikator für Raspberry Pi implementieren, lesen Sie Raspberry Pi-Beispiel App.
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und für die Verwendung des Audioklassifikators. Allgemeine Informationen zu Einrichten Ihrer Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Anforderungen an die Plattformversion finden Sie im Einrichtungsleitfaden für Python.
<ph type="x-smartling-placeholder">Pakete
Die Aufgabe des Audioklassifikators, die das pip-Paket von mediapipe enthält. Sie können die Abhängigkeit mit:
$ 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
Für die Aufgabe „MediaPipe Audioklassifikator“ ist ein trainiertes Modell erforderlich, das mit diesem für die Aufgabe. Weitere Informationen zu verfügbaren trainierten Modellen für den Audioklassifikator finden Sie unter 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 die empfohlenen Jamnet modellieren.
model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'
Geben Sie den Pfad des Modells innerhalb des Parameters Model Name wie unten gezeigt an:
base_options = BaseOptions(model_asset_path=model_path)
Aufgabe erstellen
Verwenden Sie die Funktion create_from_options
, um die Aufgabe zu erstellen. Die
Die Funktion create_from_options
akzeptiert Konfigurationsoptionen, einschließlich der Ausführung
Modus, Anzeigenamen, Sprache, maximale Anzahl von Ergebnissen, Konfidenzgrenzwert,
Liste der Kategorien zulassen und ablehnen. Weitere Informationen zur Konfiguration
finden Sie unter Konfigurationsübersicht.
Audioklassifikator unterstützt Audioclips und Audiostreams als Eingabe. Ich muss den Ausführungsmodus angeben, der Ihrem Eingabedatentyp entspricht, wenn für die Erstellung der Aufgabe. Wählen Sie die Registerkarte, die Ihrem Eingabedatentyp entspricht, um die wie die Aufgabe erstellt und eine Inferenz ausgeführt wird.
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 die Erstellung eines Audioklassifikators für die Verwendung mit Audio finden Sie im Code Beispiel
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. vom Mikrofon. In diesem Modus muss der resultListener wird aufgerufen, um einen Listener einzurichten, der die Klassifizierungsergebnisse empfängt asynchron programmiert. |
{AUDIO_CLIPS, AUDIO_STREAM } |
AUDIO_CLIPS |
display_names_locale |
Legt die Sprache der Labels fest, die für Anzeigenamen in der
Metadaten des Aufgabenmodells, falls verfügbar. Standardwert ist en für
Englisch. Sie können den Metadaten eines benutzerdefinierten Modells lokalisierte Labels hinzufügen
mit der TensorFlow Lite Metadata Writer API
| Gebietsschemacode | de |
max_results |
Legt die optionale maximale Anzahl der am besten bewerteten Klassifizierungsergebnisse fest auf zurückgeben. Wenn < 0 setzen, werden alle verfügbaren Ergebnisse zurückgegeben. | Beliebige positive Zahlen | -1 |
score_threshold |
Legt den Schwellenwert für die Vorhersagepunktzahl fest, der den Wert in die Modellmetadaten (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,
Klassifizierungsergebnisse, deren Kategoriename nicht in dieser Gruppe enthalten ist, werden
herausgefiltert. Doppelte oder unbekannte Kategorienamen werden ignoriert.
Diese Option schließt sich mit category_denylist gegenseitig aus und verwendet
führt beides zu einem Fehler. |
Alle Strings | Nicht festgelegt |
category_denylist |
Legt die optionale Liste der unzulässigen Kategorienamen fest. Wenn
nicht leer ist, werden Klassifizierungsergebnisse gefiltert, deren Kategoriename in diesem Satz enthalten ist.
aus. Doppelte oder unbekannte Kategorienamen werden ignoriert. Diese Option
ausschließlich mit category_allowlist und die Verwendung beider führt zu einem Fehler. |
Alle Strings | Nicht festgelegt |
result_callback |
Legt den Ergebnis-Listener so fest, dass er die Klassifizierungsergebnisse empfängt
asynchron, wenn sich der Audioklassifikator im Audiostream befindet
. Kann nur verwendet werden, wenn der Ausführungsmodus auf AUDIO_STREAM festgelegt ist |
– | Nicht festgelegt |
Daten vorbereiten
Der Audioklassifikator funktioniert mit Audioclips und Audiostreams. Die Aufgabe verarbeitet die Vorverarbeitung der Dateneingabe, einschließlich Resampling, Zwischenspeichern und Framing.
Bereiten Sie Ihre Eingabe als Audiodatei oder NumPy-Array vor und konvertieren Sie sie in ein
AudioData
-Objekt von MediaPipe. Sie können eine externe Bibliothek wie
SciPy, um die Eingabeaudios als NumPy-Arrays zu laden.
Die folgenden Beispiele zeigen, wie Daten für die Verarbeitung vorbereitet werden. für jeden der verfügbaren Datentypen:
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)
Aufgabe ausführen
Sie rufen die Klassifizierungsfunktion auf, die Ihrem Laufmodus entspricht, um Rückschlüsse. Die Audio Classifier API gibt die möglichen Kategorien für die Audiodaten zurück. -Ereignissen im Eingabe-Audio-Zwischenspeicher.
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:
- Bei Ausführung im Audiostreammodus musst du auch die Der Audioklassifikator ermittelt den Zeitstempel der Audioeingabedaten.
- Bei der Ausführung im Audioclipmodell blockiert die Aufgabe „Audioklassifikator“ die aktuellen Thread zu schreiben, bis die Verarbeitung der Audioeingabe abgeschlossen ist.
Ein ausführlicheres Beispiel für die Verwendung des Audioklassifikators mit Audioclips finden Sie in der Code Beispiel
Ergebnisse verarbeiten und anzeigen
Beim Ausführen einer Inferenz gibt die Audioklassifikatoraufgabe eine
AudioClassifierResult
-Objekt, das die Liste der möglichen Kategorien enthält
für die Audioereignisse für die Audioeingabe.
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 des Audioklassifikators zeigt, wie die Klassifizierung angezeigt wird. der mit dieser Aufgabe zurückgegebenen Ergebnisse, siehe Code Beispiel .