Guida alla classificazione audio per il web

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

Puoi vedere questa attività in azione visualizzando la demo. 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 in JavaScript come riferimento. Questo codice è utile per testare l'attività a creare la tua app di classificazione audio. Puoi visualizzare, eseguire e modificare il Esempio di codice di Classificatore audio usando solo il browser web.

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 Guida alla configurazione per il web.

Pacchetti JavaScript

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

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

npm install @mediapipe/tasks-audio

Se vuoi importare il codice dell'attività tramite una rete CDN (Content Delivery Network) aggiungi il seguente codice nel tag nel 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à 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 nella directory del progetto. Ad esempio:

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

Crea l'attività

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

L'esempio di codice seguente mostra l'utilizzo della funzione createFromOptions() per configurare l'attività. La funzione createFromOptions ti consente di personalizzare Classificatore audio con opzioni di configurazione. Per ulteriori informazioni sulla configurazione vedi Opzioni di configurazione.

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

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 del codice di esempio del Classificatore audio consente all'utente di scegliere tra di elaborazione. L'approccio rende il codice di creazione delle attività più complicato potrebbero non essere appropriati per il tuo caso d'uso. Puoi vedere le diverse modalità in runAudioClassification() e runStreamingAudioClassification() funzioni del example code

Opzioni di configurazione

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

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

Preparazione dei dati

Classificatore audio funziona con i clip audio e gli stream audio e può funzionare anche con i contenuti audio. in qualsiasi formato supportato dal browser host. L'attività gestisce i dati la pre-elaborazione dell'input, tra cui il ricampionamento, il buffering e l'inquadratura.

Esegui l'attività

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

Le chiamate al metodo classify() di classificazione audio vengono eseguite in modo sincrono e blocca il il thread dell'interfaccia utente. Se classifichi l'audio proveniente dal microfono di un dispositivo, ogni classificazione bloccherà il thread principale. Per evitare che ciò accada, implementazione dei 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à Classificatore audio, consulta le esempio di codice.

Gestire e visualizzare i risultati

Una volta completata l'esecuzione di un'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

Il codice di esempio Classificatore audio mostra come visualizzare la classificazione i risultati restituiti dall'attività, controlla esempio di codice per maggiori dettagli.