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.