Guida alla classificazione audio per il web

L'attività di classificazione audio di MediaPipe 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 Audio Classifier per Node e le app web.

Puoi vedere questa attività in azione visualizzando la demo. Per saperne di più sulle funzionalità, sui modelli e sulle opzioni di configurazione di questa attività, consulta la panoramica.

Codice di esempio

Il codice di esempio per Audio Classifier fornisce un'implementazione completa di questa attività in JavaScript per riferimento. Questo codice ti aiuta a testare questa attività e a iniziare a creare la tua app di classificazione audio. Puoi visualizzare, eseguire e modificare l'esempio di classificazione audio utilizzando solo il browser web.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e i progetti di codice specifici per l'utilizzo di Audio Classifier. Per informazioni generali sulla configurazione dell'ambiente di sviluppo per l'utilizzo delle attività MediaPipe, inclusi i requisiti della versione della piattaforma, consulta la Guida alla configurazione per il web.

Pacchetti JavaScript

Il codice di Audio Classifier è disponibile tramite il pacchetto @mediapipe/tasks-audio NPM di MediaPipe. Puoi trovare e scaricare queste librerie dai link forniti nella guida alla configurazione della piattaforma.

Puoi installare i pacchetti richiesti con il seguente codice per lo staging locale utilizzando il seguente comando:

npm install @mediapipe/tasks-audio

Se vuoi importare il codice dell'attività tramite un servizio 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à di classificazione audio MediaPipe richiede un modello addestrato compatibile con questa attività. Per saperne di più sui modelli addestrati disponibili per Audio Classifier, consulta la sezione Modelli della panoramica dell'attività.

Seleziona e scarica un modello, quindi archivialo nella directory del progetto, ad esempio:

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

Creare l'attività

Utilizza una delle funzioni createFrom...() di classificazione audio per preparare l'attività per l'esecuzione delle inferenze. Utilizza la funzione createFromModelPath() con un percorso relativo o assoluto al file del modello addestrato. Se il modello è già 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 opzioni di configurazione. Per ulteriori informazioni sulle opzioni di configurazione, consulta Opzioni di configurazione.

Il seguente codice 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"
    }
  });

Puoi vedere un esempio completo all'indirizzo example code.

Opzioni di configurazione

Questa attività ha 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 TensorFlow Lite Metadata Writer. Codice di 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. Qualsiasi numero positivo -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 impostato
categoryAllowlist Imposta l'elenco facoltativo dei nomi delle categorie consentiti. Se non è vuoto, i risultati della classificazione la cui categoria non è presente in questo insieme verranno filtrati. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione si esclude a vicenda con categoryDenylist e l'utilizzo di entrambe genera un errore. Qualsiasi stringa Non impostato
categoryDenylist Imposta l'elenco facoltativo di nomi di categorie non consentiti. Se non vuoto, i risultati della classificazione il cui nome della categoria è in questo insieme verranno filtrati. I nomi di categorie duplicati o sconosciuti vengono ignorati. Questa opzione è mutualmente esclusiva con categoryAllowlist e l'utilizzo di entrambe genera un errore. Qualsiasi stringa Non impostato

Preparazione dei dati

Audio Classifier funziona con clip audio e flussi audio e può funzionare con file audio in qualsiasi formato supportato dal browser host. L'attività gestisce la preelaborazione dell'input dei dati, inclusi il ricampionamento, il buffering e l'inquadratura.

Esegui l'attività

Audio Classifier 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() Audio Classifier 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 evitarlo implementando i web worker per eseguire 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.

Gestire e visualizzare i risultati

Al termine di un'esecuzione dell'inferenza, l'attività Classificatore audio restituisce un oggetto AudioClassifierResult che contiene l'elenco delle 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

L'esempio di codice Audio Classifier mostra come visualizzare i risultati della classificazione restituiti dall'attività. Per maggiori dettagli, consulta l'esempio.