Zadanie MediaPipe Audio Classifier umożliwia klasyfikację danych audio. Możesz użyć tego zadania do identyfikowania zdarzeń dźwiękowych z zestawu nauczonych kategorii. Z tych instrukcji dowiesz się, jak używać Klasyfikatora dźwięku w węzłach i aplikacjach internetowych.
Aby zobaczyć, jak działa to zadanie, obejrzyj prezentację. Więcej informacji o możliwościach, modelach i opcjach konfiguracji tego zadania znajdziesz w sekcji Omówienie.
Przykładowy kod
Przykładowy kod Audio Classifier zawiera pełną implementację tego zadania w JavaScript do celów referencyjnych. Ten kod pomoże Ci przetestować to zadanie i zacząć tworzyć własną aplikację do klasyfikacji dźwięków. Możesz wyświetlić, uruchomić i edytować przykładowy kod Klasyfikatora dźwięku w przeglądarce internetowej.
Konfiguracja
W tej sekcji znajdziesz opis kluczowych kroków, które należy wykonać, aby skonfigurować środowisko programistyczne i projektować kodowanie na potrzeby Klasyfikatora audio. Ogólne informacje o konfigurowaniu środowiska programistycznego na potrzeby zadań MediaPipe, w tym o wymaganiach dotyczących wersji platformy, znajdziesz w przewodniku konfiguracji dla aplikacji internetowych.
Pakiety JavaScript
Kod klasyfikacji audio jest dostępny w pakiecie @mediapipe/tasks-audio
NPM MediaPipe. Te biblioteki możesz znaleźć i pobrać za pomocą linków dostępnych w przewodniku po konfiguracji platformy.
Wymagane pakiety możesz zainstalować za pomocą tego polecenia na potrzeby lokalnego środowiska wykonawczego, korzystając z tego polecenia:
npm install @mediapipe/tasks-audio
Jeśli chcesz zaimportować kod zadania przez usługę sieci dostarczania treści (CDN), dodaj ten kod do 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 zgodnego z tym zadaniem. Więcej informacji o dostępnych wytrenowanych modelach Klasyfikatora dźwięku znajdziesz w sekcji poświęconej modelom na temat zadań.
Wybierz i pobierz model, a następnie zapisz go w katalogu projektu, na przykład:
<dev-project-root>/app/shared/models/
Tworzenie zadania
Użyj 1 z funkcji Klasyfikatora dźwięku createFrom...()
, aby przygotować zadanie do uruchamiania 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 skompilować 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"
}
});
Implementacja przykładowego kodu Klasyfikatora dźwięku pozwala użytkownikowi wybrać tryb przetwarzania. Takie podejście zwiększa złożoność kodu tworzenia zadania i może nie być odpowiednie w Twoim przypadku. Poszczególne tryby są widoczne w funkcjach runAudioClassification()
i runStreamingAudioClassification()
w example code
.
Opcje konfiguracji
To zadanie ma następujące opcje konfiguracji dla aplikacji internetowych i JavaScript:
Nazwa opcji | Opis | Zakres wartości | Wartość domyślna |
---|---|---|---|
displayNamesLocale |
Ustawia język etykiet, które mają być używane w przypadku nazw wyświetlanych w metadanych modelu zadania (jeśli są dostępne). Wartość domyślna w języku angielskim to en . Za pomocą TensorFlow Lite MetadataWriter API możesz dodawać zlokalizowane etykiety do metadanych modelu niestandardowego.
| Kod języka | en |
maxResults |
Określa opcjonalną maksymalną liczbę zwracanych wyników klasyfikacji o najwyższych wynikach. Jeśli wartość jest mniejsza niż 0, zostaną zwrócone 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 istnieją). Wyniki poniżej tej wartości zostały odrzucone. | [0,0; 1,0] | Nie ustawiono |
categoryAllowlist |
Ustawia opcjonalną listę dozwolonych nazw kategorii. Jeśli nie będzie pusty, wyniki klasyfikacji, których nazwy kategorii nie ma w tym zbiorze, zostaną odfiltrowane. Zduplikowane i nieznane nazwy kategorii są ignorowane.
Ta opcja wzajemnie się wyklucza, categoryDenylist i ich użycie kończy się błędem. |
Dowolne ciągi | Nie ustawiono |
categoryDenylist |
Ustawia opcjonalną listę niedozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których nazwa kategorii znajduje się w tym zbiorze, zostaną odfiltrowane. Zduplikowane i nieznane nazwy kategorii są ignorowane. Ta opcja wzajemnie się wyklucza z categoryAllowlist , a korzystanie z obu daje błąd. |
Dowolne ciągi | Nie ustawiono |
Przygotuj dane
Klasyfikator audio działa z klipami audio i strumieniami audio oraz z plikami audio w dowolnym formacie obsługiwanym przez przeglądarkę hosta. Zadanie to obsługuje wstępne przetwarzanie danych wejściowych, w tym ponowne próbkowanie, buforowanie i umieszczanie w ramkach.
Uruchamianie zadania
Klasyfikator dźwięku korzysta z metody classify()
do uruchamiania wnioskowania w przypadku plików klipów audio lub strumieni audio. Interfejs Audio Classifier API zwraca możliwe kategorie zdarzeń audio rozpoznawanych w wejściowej ścieżce audio.
Wywołania metody classify()
Klasyfikatora dźwięku są uruchamiane synchronicznie i blokują wątek interfejsu użytkownika. Jeśli zaklasyfikujesz dźwięk z mikrofonu urządzenia, każda klasyfikacja zablokuje wątek główny. Aby temu zapobiec, zaimplementuj instancje robocze, które uruchamiają classify()
w innym wątku.
Ten kod pokazuje, jak wykonać przetwarzanie za pomocą modelu zadań:
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; };
Pełną implementację uruchamiania zadania Klasyfikatora dźwięku znajdziesz w przykładowym kodzie.
Obsługa i wyświetlanie wyników
Po zakończeniu uruchomienia wnioskowania zadanie Audio Classifier zwraca obiekt AudioClassifierResult
zawierający listę możliwych kategorii obiektów w wejściowej ścieżce dźwiękowej.
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 dźwięku pokazuje, jak wyświetlać wyniki klasyfikacji zwrócone przez zadanie. Więcej informacji znajdziesz w przykładowym kodzie.