Guida alla classificazione audio per Python

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

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

Esempio di codice

Il codice di esempio per Classificatore audio fornisce un'implementazione completa un'attività in Python come riferimento. Questo codice ti consente di testare l'attività e ottenere a creare un tuo classificatore audio. Puoi visualizzare, eseguire e modificare Esempio di Classificatore audio codice usando solo il browser web con Google Colab. Puoi visualizzare il codice sorgente questo esempio GitHub.

Se implementi il classificatore audio per Raspberry Pi, consulta: l'esempio di Raspberry Pi Google Cloud.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e per i progetti di codice che usano Classificatore audio. Per informazioni generali su configurare l'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, tra cui: i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Python.

Pacchetti

Il classificatore audio gestisce il pacchetto pip mediapipe. Puoi installare 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à MediaPipe Audio Classifier richiede un modello addestrato che sia compatibile con dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per Audio Classifier, consulta la panoramica delle attività nella sezione Modelli.

Seleziona e scarica un modello, quindi archivialo in una directory locale. Puoi utilizzare i valori consigliati Yamnet un modello di machine learning.

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

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

base_options = BaseOptions(model_asset_path=model_path)

Crea l'attività

Utilizza la funzione create_from_options per creare l'attività. La La funzione create_from_options accetta le opzioni di configurazione, inclusa l'esecuzione modalità, nomi visualizzati, impostazioni internazionali, numero massimo di risultati, soglia di confidenza, categorie consentite e bloccate. Per ulteriori informazioni sulla configurazione vedi Panoramica della configurazione.

L'attività Classificatore audio supporta clip audio e stream audio come input. Tu devi specificare la modalità di esecuzione corrispondente al tipo di dati di input quando durante la creazione dell'attività. Scegli la scheda corrispondente al tipo di dati di input per visualizzare 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 gli audio, consulta le codice esempio.

Opzioni di configurazione

Questa attività include 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à. Classificatore audio prevede due modalità:

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

AUDIO_STREAM: la modalità per eseguire l'attività audio su uno stream audio, ad esempio dal microfono. In questa modalità, resultListener deve essere per impostare 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 nel metadati del modello dell'attività, se disponibili. Il valore predefinito è en per Inglese. Puoi aggiungere etichette localizzate ai metadati di un modello personalizzato Utilizzando l'API TensorFlow Metadata Writer Codice impostazioni internazionali it
max_results Imposta il numero massimo facoltativo di risultati della classificazione con il punteggio più alto su per tornare indietro. Se < 0, verranno restituiti tutti i risultati disponibili. Qualsiasi numero positivo -1
score_threshold Imposta la soglia del punteggio di previsione che sostituisce quella fornita in gli eventuali metadati del modello. I risultati al di sotto di questo valore vengono rifiutati. [0,0, 1,0] Non impostato
category_allowlist Consente di impostare l'elenco facoltativo di nomi di categorie consentiti. Se il campo non è vuoto, i risultati della classificazione i cui nome non è incluso in questo set saranno esclusi. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con category_denylist e utilizza entrambi generano un errore. Qualsiasi stringa Non impostato
category_denylist Consente di impostare un elenco facoltativo di nomi di categorie non consentiti. Se non vuoti, i risultati di classificazione con nome della categoria incluso in questo set verranno filtrati fuori. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione è reciproca è esclusivo con category_allowlist e l'utilizzo di entrambi genera un errore. Qualsiasi stringa Non impostato
result_callback Imposta il listener dei risultati in modo che riceva i risultati della classificazione in modo asincrono quando il Classificatore audio si trova nello stream audio. . Può essere utilizzato solo quando la modalità di corsa è impostata su AUDIO_STREAM N/D Non impostato

Preparazione dei dati

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

Prepara l'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: 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à

Chiamerai la funzione di classificazione corrispondente alla tua modalità di corsa per attivare le inferenze. L'API Audio Classifier restituisce le possibili categorie per l'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 segue:

  • Quando è attiva la modalità stream audio, devi fornire anche il valore Classificatore audio attiva il timestamp dei dati audio di input.
  • Quando viene eseguito nel modello di clip audio, l'attività Classificatore audio blocca le thread corrente finché non termina l'elaborazione dell'audio di input.

Per un esempio più completo di come utilizzare il Classificatore audio con clip audio, consulta la sezione codice esempio.

Gestire e visualizzare i risultati

Dopo l'esecuzione dell'inferenza, l'attività Classificatore audio restituisce un Oggetto AudioClassifierResult che contiene l'elenco delle possibili categorie per gli eventi audio all'interno dell'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 Classificatore audio mostra come visualizzare la classificazione risultati restituiti da questa attività, consulta il codice esempio per maggiori dettagli.