Guida alla classificazione audio per Python

L'attività Classificatore audio MediaPipe ti consente di eseguire la classificazione dei dati audio. Puoi utilizzare questa attività per identificare gli eventi sonori da un insieme di categorie addestrate. Queste istruzioni mostrano come utilizzare il classificatore audio con Python.

Per ulteriori informazioni sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la Panoramica.

Esempio di codice

Il codice di esempio per Audio Classifier fornisce un'implementazione completa di questa attività in Python come riferimento. Con questo codice puoi testare l'attività e iniziare a creare il tuo classificatore audio. Puoi visualizzare, eseguire e modificare il codice di esempio del classificatore audio utilizzando semplicemente il tuo browser web con Google Colab. Puoi visualizzare il codice sorgente per questo esempio su GitHub.

Se stai implementando il classificatore audio per Raspber Pi, consulta l'app di esempio Raspber Pi.

Configurazione

In questa sezione vengono descritti i passaggi chiave per configurare l'ambiente di sviluppo e codificare i progetti in modo specifico per l'utilizzo del classificatore audio. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività MediaPipe, inclusi i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Python.

Pacchetti

Il classificatore audio attività il pacchetto pip mediapipe. Puoi installare la dipendenza con quanto segue:

$ python -m pip install mediapipe

Importazioni

Importa le seguenti classi per accedere alle funzioni dell'attività Classificatore audio:

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

Modello

L'attività Classificatore audio MediaPipe richiede un modello addestrato compatibile con questa attività. Per ulteriori informazioni sui modelli addestrati disponibili per il classificatore di audio, consulta la panoramica dell'attività nella sezione Modelli.

Seleziona e scarica un modello, quindi archivialo in una directory locale. Puoi utilizzare il modello Yamnet consigliato.

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

Specifica il percorso del modello all'interno del parametro Model Name, come illustrato di seguito:

base_options = BaseOptions(model_asset_path=model_path)

Creare l'attività

Utilizza la funzione create_from_options per creare l'attività. La funzione create_from_options accetta opzioni di configurazione tra cui modalità di esecuzione, impostazioni internazionali dei nomi visualizzati, numero massimo di risultati, soglia di confidenza, elenco di categorie consentite e lista bloccata. Per ulteriori informazioni sulle opzioni di configurazione, consulta Panoramica della configurazione.

L'attività Classificatore audio supporta clip audio e stream audio come input. Devi specificare la modalità di esecuzione corrispondente al tipo di dati di input quando crei l'attività. Scegli la scheda corrispondente al tipo di dati di input per vedere come creare l'attività ed eseguire l'inferenza.

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

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

Per un esempio completo della creazione di un classificatore audio da utilizzare con l'audio, consulta l'esempio di codice.

Opzioni di configurazione

Questa attività prevede le seguenti opzioni di configurazione per le applicazioni Python:

Nome opzione Descrizione Intervallo di valori Valore predefinito
running_mode Imposta la modalità di esecuzione per l'attività. Il classificatore audio ha due modalità:

AUDIO_CLIPS: la modalità per eseguire l'attività audio su clip audio indipendenti.

STREAM_AUDIO: la modalità per eseguire l'attività audio su uno stream audio, ad esempio dal microfono. In questa modalità, resultListener deve essere chiamato per configurare un listener che riceva i risultati della classificazione in modo asincrono.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale Imposta la lingua delle etichette da utilizzare per i nomi visualizzati forniti nei metadati del modello dell'attività, se disponibili. Il valore predefinito è en per l'inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato utilizzando l'API Metadata Writer di TensorFlow Lite Codice impostazioni internazionali it
max_results Imposta il numero massimo facoltativo di risultati di classificazione con il punteggio più alto da restituire. Se < 0, verranno restituiti tutti i risultati disponibili. Eventuali numeri positivi -1
score_threshold Imposta la soglia del punteggio di previsione che sostituisce quella fornita nei metadati del modello (se presenti). I risultati inferiori a questo valore vengono rifiutati. [0,0, 1,0] Non impostata
category_allowlist Consente di impostare l'elenco facoltativo di nomi di categorie consentite. Se il campo non è vuoto, i risultati della classificazione il cui nome categoria non è presente in questo set verranno filtrati. I nomi di categoria duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con category_denylist e l'utilizzo di entrambe genera un errore. Qualsiasi stringa Non impostata
category_denylist Consente di impostare l'elenco facoltativo di nomi di categorie non consentiti. Se il campo non è vuoto, i risultati di classificazione il cui nome di categoria è presente in questo set verranno filtrati. I nomi di categoria duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con category_allowlist e l'uso di entrambe genera un errore. Qualsiasi stringa Non impostata
result_callback Imposta il listener dei risultati per ricevere i risultati della classificazione in modo asincrono quando il classificatore audio è in modalità stream audio. Può essere utilizzato solo quando la modalità di esecuzione è impostata su AUDIO_STREAM N/A Non impostata

Preparazione dei dati

Il classificatore audio funziona con clip audio e stream audio. L'attività gestisce la pre-elaborazione dell'input di dati, tra cui ricampionamento, buffering e inquadratura.

Prepara il tuo input come file audio o array numpy, quindi convertilo in un oggetto AudioData MediaPipe. Puoi usare una libreria esterna come SciPy per caricare gli audio di input come array numpy.

I seguenti esempi spiegano e mostrano come preparare i dati per il trattamento per ciascuno dei tipi di dati disponibili:

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

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

Esegui l'attività

Per attivare le inferenze, devi chiamare la funzione di classificazione corrispondente alla modalità di esecuzione. L'API Audio Classifier restituisce le possibili categorie per gli eventi audio all'interno del buffer audio di input.

Clip audio

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

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

Tieni presente quanto riportato di seguito:

  • Quando è in esecuzione in modalità stream audio, devi anche fornire all'attività Classificatore audio il timestamp dei dati audio di input.
  • Quando viene eseguita nel modello di clip audio, l'attività Classificatore audio bloccherà il thread corrente finché non termina l'elaborazione dell'audio di input.

Per un esempio più completo dell'esecuzione di un classificatore audio con clip audio, consulta l'esempio di codice.

Gestire e visualizzare i risultati

Dopo aver eseguito l'inferenza, l'attività Classificatore audio restituisce un oggetto AudioClassifierResult che contiene l'elenco di possibili categorie per gli eventi audio nell'audio di input.

Di seguito è riportato un esempio dei dati di output di questa attività:

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

Il codice di esempio del classificatore audio mostra come visualizzare i risultati di classificazione restituiti da questa attività. Per i dettagli, consulta l'esempio di codice.