Leitfaden zur Audioklassifizierung für Python

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 .