A tarefa do Classificador de áudio do MediaPipe permite classificar dados de áudio. Use essa tarefa para identificar eventos sonoros de um conjunto de categorias treinadas. Estas instruções mostram como usar o classificador de áudio para apps da Web e do nó.
Para conferir essa tarefa em ação, confira a demonstração. Para mais informações sobre os recursos, modelos e opções de configuração dessa tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo do Classificador de áudio fornece uma implementação completa dessa tarefa em JavaScript para sua referência. Esse código ajuda você a testar essa tarefa e começar a criar seu próprio app de classificação de áudio. É possível ver, executar e editar o exemplo de código do Classificador de áudio usando apenas o navegador da Web.
Configuração
Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código para usar o Classificador de áudio. Para informações gerais sobre a configuração do ambiente de desenvolvimento para uso de tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte o Guia de configuração para Web.
Pacotes JavaScript
O código do classificador de áudio está disponível no pacote @mediapipe/tasks-audio
NPM do MediaPipe. É possível
encontrar essas bibliotecas e fazer o download delas nos links fornecidos no
Guia de configuração da plataforma.
É possível instalar os pacotes necessários com o seguinte código para preparo local usando o seguinte comando:
npm install @mediapipe/tasks-audio
Se você quiser importar o código da tarefa por um serviço da rede de fornecimento de conteúdo (CDN), adicione o seguinte código na tag no arquivo 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>
Modelo
A tarefa do classificador de áudio MediaPipe requer um modelo treinado compatível com ela. Para mais informações sobre os modelos treinados disponíveis para o Classificador de áudio, consulte a seção Modelos de visão geral da tarefa.
Selecione e faça o download de um modelo e armazene-o no diretório do projeto. Por exemplo:
<dev-project-root>/app/shared/models/
Criar a tarefa
Use uma das funções createFrom...()
do Classificador de áudio para
preparar a tarefa para executar inferências. Use a função createFromModelPath()
com um caminho relativo ou absoluto para o arquivo de modelo treinado.
Se o modelo já estiver carregado na memória, use o
método createFromModelBuffer()
.
O exemplo de código abaixo demonstra o uso da função createFromOptions()
para configurar a tarefa. A função createFromOptions
permite personalizar o
classificador de áudio com opções de configuração. Para mais informações sobre as opções
de configuração, consulte Opções de configuração.
O código abaixo demonstra como criar e configurar a tarefa com opções personalizadas:
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"
}
});
O código de exemplo do Classificador de áudio permite que o usuário escolha entre
modos de processamento. A abordagem torna o código de criação da tarefa mais complicado e
pode não ser apropriada para seu caso de uso. É possível conferir os diferentes modos
nas funções runAudioClassification()
e runStreamingAudioClassification()
do
example code
.
Opções de configuração
Essa tarefa tem as seguintes opções de configuração para aplicativos da Web e JavaScript:
Nome da opção | Descrição | Intervalo de valor | Valor padrão |
---|---|---|---|
displayNamesLocale |
Define o idioma dos rótulos a ser usado para nomes de exibição fornecidos nos
metadados do modelo da tarefa, se disponível. O padrão é en para
inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado
usando a API TensorFlow Lite Metadata Writer
| Código da localidade | en |
maxResults |
Define o número máximo opcional de resultados de classificação com a melhor pontuação a ser retornado. Se < 0, todos os resultados disponíveis serão retornados. | Qualquer número positivo | -1 |
scoreThreshold |
Define o limite de pontuação de previsão que substitui o fornecido nos metadados do modelo (se houver). Os resultados abaixo desse valor são rejeitados. | [0,0, 1,0] | Não definido |
categoryAllowlist |
Define a lista opcional de nomes de categorias permitidas. Se não estiver em branco, os resultados de classificação com nome de categoria que não estiver nesse conjunto serão filtrados. Nomes de categoria duplicados ou desconhecidos são ignorados.
Essa opção é mutuamente exclusiva com categoryDenylist , e o uso
de ambos resulta em um erro. |
Qualquer string | Não definido |
categoryDenylist |
Define a lista opcional de nomes de categorias que não são permitidos. Se não estiver em branco, os resultados de classificação com o nome de categoria nesse conjunto serão filtrados. Nomes de categoria duplicados ou desconhecidos são ignorados. Essa opção é mutuamente
exclusiva com categoryAllowlist , e o uso de ambos resulta em um erro. |
Qualquer string | Não definido |
preparar dados
O Classificador de áudio funciona com clipes e streams de áudio e pode funcionar com arquivos de áudio em qualquer formato compatível com o navegador do host. A tarefa lida com o pré-processamento de entrada de dados, incluindo reamostragem, armazenamento em buffer e enquadramento.
Executar a tarefa
O classificador de áudio usa o método classify()
para executar inferências para arquivos de clipe
ou streams de áudio. A API Audio Classifier retorna as categorias
possíveis para eventos de áudio reconhecidos no áudio de entrada.
As chamadas para o método classify()
do classificador de áudio são executadas de forma síncrona e bloqueiam a
linha de execução da interface do usuário. Se você classificar o áudio do microfone de um dispositivo,
cada classificação vai bloquear a linha de execução principal. É possível evitar isso
implementando web workers para executar classify()
em outra linha de execução.
O código a seguir demonstra como executar o processamento com o modelo de tarefa:
Clipes de áudio
// 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 de áudio
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; };
Para uma implementação mais completa da execução de uma tarefa do classificador de áudio, consulte o exemplo de código.
Gerenciar e mostrar resultados
Depois de concluir uma execução de inferência, a tarefa do Classificador de áudio retorna um
objeto AudioClassifierResult
que contém a lista de categorias possíveis
para os objetos no áudio de entrada.
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
O código de exemplo do Classificador de áudio demonstra como exibir os resultados da classificação retornados da tarefa. Consulte o exemplo de código para mais detalhes.