Przewodnik po klasyfikacji audio w Pythonie

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

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 Pythonie. Ten kod pomoże Ci przetestować to zadanie i uzyskać Twój własny klasyfikator audio. Możesz wyświetlać, uruchamiać i edytować Przykład klasyfikatora dźwięku kod używając Google Colab tylko w przeglądarce. Możesz wyświetlić kod źródłowy dla ten przykład na GitHub

Jeśli wdrażasz klasyfikator dźwięku dla Raspberry Pi, zapoznaj się z artykułem przykład Raspberry Pi

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 znajdziesz w przewodniku konfiguracji dla Pythona.

Pakiety

Klasyfikator dźwięku obsługuje pakiet pip mediapipe. Możesz zainstalować w zależności od tego:

$ python -m pip install mediapipe

Importy

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 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 lokalnym. Za pomocą zalecane Yamnet model atrybucji.

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

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

base_options = BaseOptions(model_asset_path=model_path)

Tworzenie zadania

Utwórz zadanie za pomocą funkcji create_from_options. Funkcja create_from_options akceptuje opcje konfiguracji, w tym uruchomione tryb, język wyświetlanych nazw, maksymalna liczba wyników, próg ufności, listy dozwolonych kategorii i odrzuconych. Więcej informacji o konfiguracji Więcej informacji znajdziesz w artykule Omówienie konfiguracji.

Zadanie Klasyfikator dźwięku obsługuje jako dane wejściowe klipy audio i strumienie audio. Ty musi określać tryb działania odpowiadający typowi danych wejściowych, gdy podczas tworzenia zadania. 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 dźwięku do użycia z dźwiękiem znajdziesz w kod przykład.

Opcje konfiguracji

To zadanie zawiera te 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 audio na niezależnych klipach audio.

AUDIO_STREAM: tryb uruchamiania zadania dotyczącego dźwięku w strumieniu audio, np. z mikrofonu. W tym trybie detektor wyników musi mieć wartość wywołana w celu skonfigurowania detektora odbierającego wyniki klasyfikacji asynchronicznie.
{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 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
max_results Ustawia opcjonalną maksymalną liczbę wyników klasyfikacji na . Jeśli < 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 polu metadane modelu (jeśli występują). 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 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ą category_denylist i korzysta z funkcji skutkuje to błędem. Dowolne ciągi Nie ustawiono
category_denylist 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 category_allowlist, co spowoduje błąd. Dowolne ciągi Nie ustawiono
result_callback Konfiguruje detektor wyników, aby otrzymywać wyniki klasyfikacji asynchronicznie, gdy klasyfikator dźwięku jest w strumieniu audio. i trybu uzyskiwania zgody. Tej opcji można używać tylko wtedy, gdy tryb działania jest ustawiony na AUDIO_STREAM Nie dotyczy Nie ustawiono

Przygotuj dane

Klasyfikator dźwięku działa z klipami audio i strumieniami audio. Zadanie obsługuje wstępnego przetwarzania danych wejściowych, w tym ponownego próbkowania, buforowania i ramowania;

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

W przykładach poniżej pokazujemy, jak przygotować dane do przetwarzania 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ą Twojemu trybowi działającemu, aby ją aktywować. danych. Interfejs Audio Classifier API zwraca możliwe kategorie treści audio. zdarzenia w wejściowym buforze dźwięku.

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)
    

Pamiętaj:

  • Jeśli działasz w trybie strumienia audio, musisz też podać: Klasyfikator dźwięku określa sygnaturę czasową wejściowych danych dźwiękowych.
  • W przypadku modelu klipów audio zadanie Klasyfikator dźwięku zablokuje w bieżącym wątku aż do zakończenia przetwarzania wejściowego dźwięku.

Bardziej kompletny przykład użycia klasyfikatora audio z klipami audio znajdziesz tutaj: kod przykład.

Obsługa i wyświetlanie wyników

Po przeprowadzeniu wnioskowania zadanie Klasyfikator dźwięku zwraca wartość AudioClassifierResult obiekt zawierający listę możliwych kategorii dla zdarzeń dźwiękowych w wejściowym dźwięku.

Poniżej znajdziesz przykładowe dane wyjściowe 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świetlić klasyfikację wyników zwróconych przez to zadanie, patrz kod przykład .