Guida alla classificazione audio per il web

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 per le app web e nodo.

Puoi vedere questa attività in azione visualizzando la demo. 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 JavaScript come riferimento. Questo codice ti consente di testare questa attività e iniziare a creare la tua app di classificazione audio. Puoi visualizzare, eseguire e modificare il codice di esempio del classificatore audio utilizzando il tuo browser web.

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à di MediaPipe, inclusi i requisiti di versione della piattaforma, consulta la Guida alla configurazione per il web.

Pacchetti JavaScript

Il codice del classificatore audio è disponibile tramite il pacchetto @mediapipe/tasks-audio NPM MediaPipe. Puoi trovare e scaricare queste librerie dai link disponibili nella Guida alla configurazione della piattaforma.

Puoi installare i pacchetti richiesti con il codice seguente per la gestione temporanea locale utilizzando il comando seguente:

npm install @mediapipe/tasks-audio

Se vuoi importare il codice dell'attività tramite un servizio di rete CDN (Content Delivery Network), aggiungi il seguente codice nel tag del file HTML:

<!-- Replace "my-cdn-service.com" with your CDN -->
<head>
  <script src="https://my-cdn-service.com/npm/@mediapipe/tasks-audio/audio_bundle.js"
    crossorigin="anonymous"></script>
</head>

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 all'interno della directory del progetto, ad esempio:

<dev-project-root>/app/shared/models/

Creare l'attività

Utilizza una delle funzioni createFrom...() del classificatore audio per preparare l'attività all'esecuzione delle inferenze. Utilizza la funzione createFromModelPath() con un percorso relativo o assoluto al file del modello addestrato. Se il modello è già stato caricato in memoria, puoi utilizzare il metodo createFromModelBuffer().

L'esempio di codice riportato di seguito mostra l'utilizzo della funzione createFromOptions() per configurare l'attività. La funzione createFromOptions ti consente di personalizzare il classificatore audio con le opzioni di configurazione. Per ulteriori informazioni sulle opzioni di configurazione, consulta Opzioni di configurazione.

Il codice seguente mostra come creare e configurare l'attività con opzioni personalizzate:

const audio = await FilesetResolver.forAudioTasks(
    "https://my-cdn-service.com/npm/@mediapipe/tasks-audio/wasm"
  );

const audioClassifier = await AudioClassifier.createFromOptions(audio, {
    baseOptions: {
      modelAssetPath:
        "https://tfhub.dev/google/lite-model/yamnet/classification/tflite/1?lite-format=tflite"
    }
  });

L'implementazione di codice di esempio del classificatore audio consente all'utente di scegliere tra modalità di elaborazione. Questo approccio rende più complicato il codice per la creazione delle attività e potrebbe non essere appropriato per il tuo caso d'uso. Puoi visualizzare le diverse modalità nelle funzioni runAudioClassification() e runStreamingAudioClassification() del example code.

Opzioni di configurazione

Questa attività prevede le seguenti opzioni di configurazione per le applicazioni web e JavaScript:

Nome opzione Descrizione Intervallo di valori Valore predefinito
displayNamesLocale 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
maxResults 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
scoreThreshold 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
categoryAllowlist 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 categoryDenylist e l'utilizzo di entrambe genera un errore. Qualsiasi stringa Non impostata
categoryDenylist 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 categoryAllowlist e l'uso di entrambe genera un errore. Qualsiasi stringa Non impostata

Preparazione dei dati

Audio Classifier funziona con i clip audio e gli stream audio e può funzionare con i file audio in qualsiasi formato supportato dal browser host. L'attività gestisce la pre-elaborazione dell'input dati, tra cui ricampionamento, buffering e framing.

Esegui l'attività

Il classificatore audio utilizza il metodo classify() per eseguire inferenze per file di clip audio o stream audio. L'API Audio Classifier restituisce le possibili categorie per gli eventi audio riconosciuti nell'audio di input.

Le chiamate al metodo classify() del classificatore audio vengono eseguite in modo sincrono e bloccano il thread dell'interfaccia utente. Se classifichi l'audio dal microfono di un dispositivo, ogni classificazione bloccherà il thread principale. Puoi evitare che ciò accada implementando i web worker per l'esecuzione di classify() su un altro thread.

Il seguente codice mostra come eseguire l'elaborazione con il modello di attività:

Clip audio

// Create audio buffer
const sample = await response.arrayBuffer();
const audioBuffer = await audioCtx.decodeAudioData(sample);

// Use AudioClassifier to run classification
const results = audioClassifier.classify(
  audioBuffer.getChannelData(0),
  audioBuffer.sampleRate
);
  

Stream audio

stream = await navigator.mediaDevices.getUserMedia(constraints);
audioCtx = new AudioContext({ sampleRate: 16000 });

const source = audioCtx.createMediaStreamSource(stream);
const scriptNode = audioCtx.createScriptProcessor(16384, 1, 1);

scriptNode.onaudioprocess = function (audioProcessingEvent) {
  const inputBuffer = audioProcessingEvent.inputBuffer;
  let inputData = inputBuffer.getChannelData(0);

  // Classify the audio
  const result = audioClassifier.classify(inputData);
  const categories = result[0].classifications[0].categories;
};
  

Per un'implementazione più completa dell'esecuzione di un'attività di classificazione audio, consulta l'esempio di codice.

Gestire e visualizzare i risultati

Una volta completata un'esecuzione di inferenza, l'attività Classificatore audio restituisce un oggetto AudioClassifierResult contenente l'elenco di possibili categorie per gli oggetti all'interno dell'audio di input.

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 dall'attività. Per i dettagli, consulta l'esempio di codice.