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 erfahren Sie, wie Sie den Audioklassifikator für Node.js- und Web-Apps verwenden.
Sie können diese Aufgabe in Aktion sehen, indem Sie die Demo ansehen. 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 JavaScript ausführen. Mit diesem Code können Sie diese Aufgabe testen und und beginnen Sie mit der Entwicklung Ihrer eigenen App zur Audioklassifizierung. Sie können Daten abrufen, ausführen, und bearbeiten Sie die Beispielcode für den Audioklassifikator ganz einfach in Ihrem Webbrowser.
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 Plattformversionsanforderungen finden Sie in der Einrichtungsleitfaden für das Web
JavaScript-Pakete
Der Audioklassifikatorcode ist über MediaPipe @mediapipe/tasks-audio
verfügbar
NPM-Paket. Sie können
Sie können diese Bibliotheken über die auf der Plattform bereitgestellten Links finden und herunterladen.
Leitfaden für die Einrichtung
Sie können die erforderlichen Pakete mit dem folgenden Code für das lokale Staging installieren mit dem folgenden Befehl:
npm install @mediapipe/tasks-audio
Wenn Sie den Aufgabencode über ein Content Delivery Network (CDN) importieren möchten fügen Sie folgenden Code in das Tag in Ihrer HTML-Datei ein:
<!-- Replace "my-cdn-service.com" with your CDN -->
<head>
<script src="https://my-cdn-service.com/npm/@mediapipe/tasks-audio/audio_bundle.js"
crossorigin="anonymous"></script>
</head>
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 Ihrem Projektverzeichnis. Beispiel:
<dev-project-root>/app/shared/models/
Aufgabe erstellen
Mit einer der createFrom...()
-Funktionen des Audioklassifikators können Sie
die Aufgabe für die Ausführung von Inferenzen vorbereiten. createFromModelPath()
verwenden
mit einem relativen oder absoluten Pfad zur trainierten Modelldatei.
Wenn Ihr Modell bereits in den Arbeitsspeicher geladen wurde, können Sie den
createFromModelBuffer()
-Methode.
Im Codebeispiel unten wird gezeigt, wie Sie mit der Funktion createFromOptions()
die Aufgabe eingerichtet haben. Mit der Funktion createFromOptions
können Sie die
Audioklassifikator mit Konfigurationsoptionen Weitere Informationen zur Konfiguration
finden Sie unter Konfigurationsoptionen.
Der folgende Code zeigt, wie Sie die Aufgabe mit benutzerdefinierten Optionen:
const audio = await FilesetResolver.forAudioTasks(
"https://my-cdn-service.com/npm/@mediapipe/tasks-audio/wasm"
);
const audioClassifier = await AudioClassifier.createFromOptions(audio, {
baseOptions: {
modelAssetPath:
"https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite"
}
});
Bei der Implementierung des Beispielcodes für den Audioklassifikator kann der Nutzer zwischen folgenden Optionen wählen:
Verarbeitungsmodi. Dieser Ansatz macht den Code zur
Aufgabenerstellung komplizierter und
ist möglicherweise für Ihren Anwendungsfall ungeeignet. Sie können die verschiedenen Modi
in runAudioClassification()
und runStreamingAudioClassification()
der Funktionen der
example code
Konfigurationsoptionen
Diese Aufgabe hat die folgenden Konfigurationsoptionen für Web und JavaScript Anwendungen:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
displayNamesLocale |
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 |
maxResults |
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 |
scoreThreshold |
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 |
categoryAllowlist |
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 categoryDenylist gegenseitig aus und verwendet
führt beides zu einem Fehler. |
Alle Strings | Nicht festgelegt |
categoryDenylist |
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 categoryAllowlist und die Verwendung beider führt zu einem Fehler. |
Alle Strings | Nicht festgelegt |
Daten vorbereiten
Der Audioklassifikator funktioniert mit Audioclips und Audiostreams sowie mit Audioanzeigen Dateien in einem vom Host-Browser unterstützten Format. Die Aufgabe verarbeitet die Daten Eingabevorverarbeitung, einschließlich Resampling, Zwischenspeichern und Framing.
Aufgabe ausführen
Der Audioklassifikator verwendet die Methode classify()
, um Inferenzen für Audioclips auszuführen
Dateien oder Audiostreams. Die Audio Classifier API gibt mögliche
Kategorien für Audioereignisse, die in den Audioeingaben erkannt wurden.
Aufrufe der Methode classify()
des Audioklassifikators werden synchron ausgeführt und blockieren den
Benutzeroberflächen-Threads. Wenn Sie Audio vom Mikrofon eines Geräts klassifizieren,
blockiert jede Klassifizierung den Hauptthread. Sie können dies verhindern, indem Sie
Implementierung von Web Workern, um classify()
in einem anderen Thread auszuführen
Der folgende Code zeigt, wie die Verarbeitung mit dem Aufgabenmodell ausgeführt wird:
Audioclips
// Create audio buffer const sample = await response.arrayBuffer(); const audioBuffer = await audioCtx.decodeAudioData(sample); // Use AudioClassifier to run classification const results = audioClassifier.classify( audioBuffer.getChannelData(0), audioBuffer.sampleRate );
Audiostream
stream = await navigator.mediaDevices.getUserMedia(constraints); audioCtx = new AudioContext({ sampleRate: 16000 }); const source = audioCtx.createMediaStreamSource(stream); const scriptNode = audioCtx.createScriptProcessor(16384, 1, 1); scriptNode.onaudioprocess = function (audioProcessingEvent) { const inputBuffer = audioProcessingEvent.inputBuffer; let inputData = inputBuffer.getChannelData(0); // Classify the audio const result = audioClassifier.classify(inputData); const categories = result[0].classifications[0].categories; };
Eine ausführlichere Implementierung der Ausführung einer Aufgabe des Audioklassifikators finden Sie in der Codebeispiel an.
Ergebnisse verarbeiten und anzeigen
Sobald Sie eine Inferenzausführung abgeschlossen haben, gibt die Aufgabe des Audioklassifikators eine
AudioClassifierResult
-Objekt, das die Liste der möglichen Kategorien enthält
für die Objekte in den Eingabeaudioinhalten.
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 Aufgabe zurückgegebene Ergebnisse finden Sie in der Codebeispiel .