Zadanie MediaPipe Audio Classifier umożliwia klasyfikowanie danych audio. Możesz użyć tego zadania do identyfikowania zdarzeń dźwiękowych z zestawu wytrenowanych kategorii. Te instrukcje pokazują, jak używać klasyfikatora dźwięku w aplikacjach Node.js i internetowych.
Możesz zobaczyć to zadanie w działaniu, oglądając demo. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w Przeglądzie.
Przykładowy kod
Przykładowy kod klasyfikatora dźwięku zawiera pełną implementację tego zadania w JavaScript. Ten kod pomoże Ci przetestować to zadanie i zacząć tworzyć własną aplikację do klasyfikacji dźwięku. Możesz wyświetlać, uruchamiać i edytować przykład klasyfikatora dźwięku za pomocą przeglądarki.
Konfiguracja
W tej sekcji opisujemy najważniejsze kroki, które należy wykonać, aby skonfigurować środowisko programistyczne i projekty kodu do korzystania z klasyfikatora dźwięku. Ogólne informacje o konfigurowaniu środowiska programistycznego do korzystania z zadań MediaPipe, w tym wymagania dotyczące wersji platformy, znajdziesz w przewodniku po konfiguracji na potrzeby internetu.
Pakiety JavaScript
Kod klasyfikatora dźwięku jest dostępny w pakiecie MediaPipe @mediapipe/tasks-audio
NPM. Te biblioteki możesz znaleźć i pobrać, korzystając z linków podanych w przewodniku po konfiguracji platformy.
Wymagane pakiety możesz zainstalować za pomocą tego kodu w przypadku lokalnego środowiska testowego za pomocą tego polecenia:
npm install @mediapipe/tasks-audio
Jeśli chcesz zaimportować kod zadania za pomocą usługi sieci dostarczania treści (CDN), dodaj ten kod w tagu w pliku HTML:
<!-- 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>
Model
Zadanie MediaPipe Audio Classifier wymaga wytrenowanego modelu, który jest z nim zgodny. Więcej informacji o dostępnych wytrenowanych modelach klasyfikatora dźwięku znajdziesz w sekcji Modele w omówieniu zadania.
Wybierz i pobierz model, a następnie zapisz go w katalogu projektu, np.:
<dev-project-root>/app/shared/models/
Tworzenie zadania
Użyj jednej z funkcji klasyfikatora dźwięku createFrom...(), aby przygotować zadanie do uruchomienia wnioskowania. Użyj funkcji createFromModelPath() ze ścieżką względną lub bezwzględną do wytrenowanego pliku modelu.
Jeśli model jest już załadowany do pamięci, możesz użyć metody createFromModelBuffer().
Poniższy przykładowy kod pokazuje, jak skonfigurować zadanie za pomocą funkcji createFromOptions(). Funkcja createFromOptions umożliwia dostosowanie klasyfikatora dźwięku za pomocą opcji konfiguracji. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Opcje konfiguracji.
Poniższy kod pokazuje, jak utworzyć i skonfigurować zadanie z opcjami niestandardowymi:
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"
}
});
Pełny przykład znajdziesz na stronie example code.
Opcje konfiguracji
To zadanie ma te opcje konfiguracji w przypadku aplikacji internetowych i aplikacji napisanych w języku JavaScript:
| Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
|---|---|---|---|
displayNamesLocale |
Ustawia język etykiet, które mają być używane w przypadku wyświetlanych nazw podanych w metadanych modelu zadania (jeśli są dostępne). Wartość domyślna to en w przypadku języka angielskiego. Możesz dodać zlokalizowane etykiety do metadanych modelu niestandardowego za pomocą interfejsu TensorFlow Lite Metadata Writer API.
| Kod języka | en |
maxResults |
Ustawia opcjonalną maksymalną liczbę wyników klasyfikacji o najwyższych wynikach, które mają zostać zwrócone. Jeśli wartość jest mniejsza od 0, zwracane są wszystkie dostępne wyniki. | dowolne liczby dodatnie, | -1 |
scoreThreshold |
Ustawia próg wyniku prognozy, który zastępuje próg podany w metadanych modelu (jeśli taki istnieje). Wyniki poniżej tej wartości są odrzucane. | [0.0, 1.0] | Nie ustawiono |
categoryAllowlist |
Ustawia opcjonalną listę dozwolonych nazw kategorii. Jeśli nie jest pusta, wyniki klasyfikacji, których nazwa kategorii nie znajduje się w tym zbiorze, zostaną odfiltrowane. Zduplikowane lub nieznane nazwy kategorii są ignorowane.
Ta opcja wyklucza się wzajemnie z opcją categoryDenylist, a użycie obu powoduje błąd. |
Dowolne ciągi | Nie ustawiono |
categoryDenylist |
Ustawia opcjonalną listę nazw kategorii, które są niedozwolone. Jeśli ten zbiór nie jest pusty, wyniki klasyfikacji, których nazwa kategorii znajduje się w tym zbiorze, zostaną odfiltrowane. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja wyklucza się wzajemnie z opcją categoryAllowlist, a użycie obu powoduje błąd. |
Dowolne ciągi | Nie ustawiono |
Przygotuj dane
Klasyfikator dźwięku działa z klipami i strumieniami audio oraz z plikami audio w dowolnym formacie obsługiwanym przez przeglądarkę hosta. Zadanie obsługuje wstępne przetwarzanie danych wejściowych, w tym ponowne próbkowanie, buforowanie i kadrowanie.
Uruchamianie zadania
Klasyfikator audio używa metody classify() do przeprowadzania wnioskowania w przypadku plików z klipami audio lub strumieni audio. Interfejs Audio Classifier API zwraca możliwe kategorie zdarzeń audio rozpoznanych w wejściowym nagraniu.
Wywołania metody Audio Classifier classify() działają synchronicznie i blokują wątek interfejsu użytkownika. Jeśli klasyfikujesz dźwięk z mikrofonu urządzenia, każda klasyfikacja będzie blokować główny wątek. Możesz temu zapobiec, wdrażając web workerów, aby uruchamiać classify() w innym wątku.
Poniższy kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadania:
Klipy audio
// 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 );
Strumień audio
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; };
Aby zobaczyć pełniejszą implementację zadania klasyfikatora dźwięku, zapoznaj się z przykładem.
Obsługa i wyświetlanie wyników
Po zakończeniu wnioskowania zadanie klasyfikatora dźwięku zwraca obiekt AudioClassifierResult, który zawiera listę możliwych kategorii obiektów w dźwięku wejściowym.
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
Przykładowy kod klasyfikatora audio pokazuje, jak wyświetlać wyniki klasyfikacji zwrócone przez zadanie. Więcej informacji znajdziesz w przykładzie.