Przewodnik po klasyfikacji audio w Pythonie

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. Te instrukcje pokazują, jak korzystać z Klasyfikatora dźwięku w Pythonie.

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 Pythonie dla ułatwienia. Pomoże Ci on przetestować to zadanie i rozpocząć tworzenie własnego klasyfikatora dźwięku. Przykładowy kod klasyfikatora dźwięku możesz wyświetlać, uruchamiać i edytować w przeglądarce z Google Colab. Kod źródłowy tego przykładu znajdziesz na GitHub.

Jeśli wdrażasz klasyfikator dźwięku dla Raspberry Pi, zapoznaj się z przykładową aplikacją Raspberry Pi.

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 języka Python.

Pakiety

Klasyfikator dźwięku wykonuje zadanie pakietu pip mediapipe. Możesz zainstalować zależność za pomocą:

$ python -m pip install mediapipe

Importowane dane

Aby uzyskać dostęp do funkcji zadania Klasyfikatora dźwięku, zaimportuj te klasy:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

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 lokalnym. Możesz użyć zalecanego modelu Yamnet.

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'

Określ ścieżkę modelu w parametrze Nazwa modelu, jak poniżej:

base_options = BaseOptions(model_asset_path=model_path)

Tworzenie zadania

Aby utworzyć zadanie, użyj funkcji create_from_options. Funkcja create_from_options akceptuje opcje konfiguracji, w tym tryb działania, język wyświetlanych nazw, maksymalną liczbę wyników, próg ufności, listę dozwolonych kategorii i listę odrzuconych. Więcej informacji o opcjach konfiguracji znajdziesz w artykule Omówienie konfiguracji.

Zadanie Klasyfikator dźwięku obsługuje jako dane wejściowe klipy audio i strumienie audio. Podczas tworzenia zadania musisz określić tryb działania odpowiadający typowi danych wejściowych. Wybierz kartę odpowiadającą typowi danych wejściowych, aby zobaczyć, jak utworzyć zadanie i uruchomić wnioskowanie.

Klipy audio

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.
  # ...
    

Strumień audio

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.
  # ...
  

Pełny przykład tworzenia Klasyfikatora audio do użycia z dźwiękiem znajdziesz w przykładowym kodzie.

Opcje konfiguracji

To zadanie ma następujące opcje konfiguracji aplikacji w Pythonie:

Nazwa opcji Opis Zakres wartości Wartość domyślna
running_mode Ustawia tryb działania zadania. Klasyfikator dźwięku ma 2 tryby:

AUDIO_CLIPS: tryb uruchamiania zadania dotyczącego dźwięku w niezależnych klipach audio.

AUDIO_STREAM: tryb uruchamiania zadania audio w strumieniu audio, np. z mikrofonu. W tym trybie należy wywołać funkcję resultListener, aby skonfigurować detektor umożliwiający asynchroniczne otrzymywanie wyników klasyfikacji.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale 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
max_results 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
score_threshold 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
category_allowlist 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, category_denylist i ich użycie kończy się błędem. Dowolne ciągi Nie ustawiono
category_denylist 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 category_allowlist, a korzystanie z obu daje błąd. Dowolne ciągi Nie ustawiono
result_callback Ustawia detektor wyników, aby asynchronicznie otrzymywać wyniki klasyfikacji, gdy Klasyfikator dźwięku działa w trybie strumienia audio. Tego ustawienia można używać tylko wtedy, gdy tryb biegowy jest ustawiony na AUDIO_STREAM Nie dotyczy Nie ustawiono

Przygotuj dane

Klasyfikator audio obsługuje klipy audio i strumienie audio. Zadaniem tego zadania jest wstępne przetwarzanie danych wejściowych, w tym ponowne próbkowanie, buforowanie i umieszczanie w ramkach.

Przygotuj dane wejściowe jako plik audio lub tablicę numpy, a następnie przekonwertuj je na obiekt MediaPipe AudioData. Aby wczytać dane dźwiękowe w postaci tablic numpy, możesz użyć biblioteki zewnętrznej, takiej jak SciPy.

Poniższe przykłady wyjaśniają i pokazują, jak przygotować dane do przetwarzania w przypadku każdego z dostępnych typów danych:

Klipy audio

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)
    

Strumień audio

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)
    

Uruchamianie zadania

Wywołujesz funkcję klasyfikacji odpowiadającą trybowi działającemu w celu aktywowania wnioskowania. Interfejs Audio Classifier API zwraca możliwe kategorie zdarzeń audio w wejściowym buforze audio.

Klipy audio

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

Strumień audio

# 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)
    

Uwaga:

  • Gdy działasz w trybie strumienia audio, musisz też podać dla zadania Klasyfikatora audio sygnaturę czasową wejściowych danych audio.
  • Gdy działa w modelu klipów audio, zadanie Klasyfikator dźwięku zablokuje bieżący wątek, dopóki nie zakończy przetwarzania wejściowego dźwięku.

Pełniejszy przykład działania Klasyfikatora dźwięku z klipami audio znajdziesz w przykładzie kodu.

Obsługa i wyświetlanie wyników

Po uruchomieniu wnioskowania zadanie Audio Classifier zwraca obiekt AudioClassifierResult zawierający listę możliwych kategorii zdarzeń dźwiękowych w danych wejściowych audio.

Poniżej znajdziesz przykład danych wyjściowych z tego zadania:

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 w tym zadaniu. Więcej informacji znajdziesz w przykładowym kodzie.