Przewodnik po klasyfikacji audio w przeglądarce

Zadanie MediaPipe Audio Classifier umożliwia klasyfikację danych audio. Dostępne opcje użyj tego zadania do zidentyfikowania zdarzeń dźwiękowych na podstawie zestawu nauczonych kategorii. Te te instrukcje pokażą Ci, jak używać klasyfikatora dźwięku w aplikacjach Node i internetowych.

Aby zobaczyć, jak działa to zadanie, wyświetl demo. Więcej informacji o funkcjach, modelach i opcjach konfiguracji zapoznaj się z Przeglądem.

Przykładowy kod

Przykładowy kod klasyfikatora dźwięku zapewnia pełną implementację w JavaScripcie. Ten kod pomoże Ci przetestować to zadanie i zacznij tworzyć własną aplikację do klasyfikacji dźwięku. Możesz wyświetlać, uruchamiać i edytuj Przykładowy kod klasyfikatora dźwięku tylko za pomocą przeglądarki.

Konfiguracja

W tej sekcji opisujemy najważniejsze czynności związane z konfigurowaniem środowiska programistycznego oraz w projektach kodu, w których wykorzystano klasyfikator audio. Ogólne informacje na temat: skonfigurować środowisko programistyczne do korzystania z zadań MediaPipe, w tym wymagań wersji platformy, patrz Przewodnik po konfiguracji w kampaniach internetowych

Pakiety JavaScript

Kod klasyfikatora audio jest dostępny przez MediaPipe @mediapipe/tasks-audio Pakiet NPM. Dostępne opcje znajdź i pobierz te biblioteki, korzystając z linków dostępnych na platformie Przewodnik po konfiguracji

Wymagane pakiety możesz zainstalować za pomocą tego kodu lokalnego środowiska przejściowego. za pomocą tego polecenia:

npm install @mediapipe/tasks-audio

Jeśli chcesz zaimportować kod zadania przez sieć 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 zgodnego z tym zadanie. Więcej informacji o dostępnych wytrenowanych modelach na potrzeby klasyfikatora dźwięku znajdziesz tutaj zapoznaj się z omówieniem zadania sekcją Modele.

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 uruchamiania wniosków. Użyj funkcji createFromModelPath() ze ścieżką względną lub bezwzględną do pliku wytrenowanego modelu. Jeśli model jest już załadowany do pamięci, możesz użyć funkcji Metoda createFromModelBuffer().

Poniższy przykładowy kod pokazuje użycie funkcji createFromOptions() do skonfigurować zadanie. Funkcja createFromOptions umożliwia dostosowanie parametru Klasyfikator dźwięku z opcjami konfiguracji. Więcej informacji o konfiguracji Więcej informacji znajdziesz w sekcji Opcje konfiguracji.

Poniższy kod pokazuje, jak utworzyć i skonfigurować zadanie z niestandardowym użyciem opcje:

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"
    }
  });

Przykładowa implementacja kodu klasyfikatora audio pozwala użytkownikowi wybrać i przetwarzania danych. Takie podejście sprawia, że kod tworzenia zadań jest bardziej skomplikowany, może nie być odpowiednia w Twoim przypadku użycia. Możesz zobaczyć różne tryby, w: runAudioClassification() i runStreamingAudioClassification() funkcje example code.

Opcje konfiguracji

To zadanie zawiera poniższe opcje konfiguracji dla stron internetowych i JavaScriptu aplikacje:

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 kolumnie metadane modelu zadania, jeśli są dostępne. Wartość domyślna to en dla Angielski. Do metadanych modelu niestandardowego możesz dodać zlokalizowane etykiety za pomocą interfejsu TensorFlow Lite Metadata Writer API. Kod języka en
maxResults Ustawia opcjonalną maksymalną liczbę wyników klasyfikacji na . Jeśli < 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 polu metadane modelu (jeśli występują). Wyniki poniżej tej wartości zostały odrzucone. [0,0; 1,0] Nie ustawiono
categoryAllowlist Ustawia opcjonalną listę dozwolonych nazw kategorii. Jeśli pole nie jest puste, wyniki klasyfikacji, których nazwa kategorii nie znajduje się w tym zbiorze, zostaną zostały odfiltrowane. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja nie działa z usługą categoryDenylist i korzysta z funkcji skutkuje to błędem. Dowolne ciągi Nie ustawiono
categoryDenylist Ustawia opcjonalną listę nazw kategorii, które nie są dozwolone. Jeśli niepuste, wyniki klasyfikacji, których nazwa kategorii znajduje się w tym zbiorze, zostaną odfiltrowane na zewnątrz. Zduplikowane lub nieznane nazwy kategorii są ignorowane. Ta opcja jest wzajemna tylko w polu categoryAllowlist, co spowoduje błąd. Dowolne ciągi Nie ustawiono

Przygotuj dane

Klasyfikator dźwięku działa z klipami i strumieniami audio oraz może obsługiwać dźwięk. w dowolnym formacie obsługiwanym przez przeglądarkę hosta. Zadanie zarządza danymi wstępnym przetwarzaniem danych wejściowych, w tym ponownym próbkowaniem, buforowaniem i ramkowaniem.

Uruchamianie zadania

Klasyfikator dźwięku wykorzystuje metodę classify() do uruchamiania wniosków dla klipów audio. plików lub strumieni audio. Interfejs Audio Classifier API zwraca możliwe kategorie zdarzeń dźwiękowych rozpoznawanych w wejściowym dźwięku.

Wywołania metody Audio Classifier classify() są uruchamiane synchronicznie i blokują wątku interfejsu. Jeśli klasyfikujesz dźwięk z mikrofonu urządzenia, każda klasyfikacja zablokuje wątek główny. Możesz temu zapobiec: Wdrożenie instancji roboczych w celu uruchomienia 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 tych artykułach: przykładowego kodu.

Obsługa i wyświetlanie wyników

Gdy zakończysz uruchomienie wnioskowania, zadanie Klasyfikator dźwięku zwróci błąd AudioClassifierResult obiekt zawierający listę możliwych kategorii dla obiektów w wejściowym dźwięku.

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świetlić klasyfikację wyników zwróconych przez zadanie, patrz przykładowy kod .