A tarefa MediaPipe Audio Classifier permite que você faça a classificação de dados de áudio. Você pode use essa tarefa para identificar eventos sonoros de um conjunto de categorias treinadas. Esses as instruções mostram como usar o Classificador de áudio para apps da Web e do Node.
Para saber como essa tarefa funciona, acesse o demonstração. Para mais informações sobre recursos, modelos e opções de configuração, desta tarefa, consulte a Visão geral.
Exemplo de código
O código de exemplo para o classificador de áudio fornece uma implementação completa desse em JavaScript para sua referência. Esse código ajuda a testar a tarefa a criar seu próprio app de classificação de áudio. Você pode conferir, executar e edite o Exemplo de código do classificador de áudio usando apenas seu navegador da Web.
Configuração
Esta seção descreve as principais etapas para configurar seu ambiente de desenvolvimento e projetos de código especificamente para usar o classificador de áudio. Para informações gerais a configuração do seu ambiente de desenvolvimento para usar tarefas do MediaPipe, incluindo requisitos de versão da plataforma, consulte Guia de configuração para a Web.
Pacotes JavaScript
O código do classificador de áudio está disponível no @mediapipe/tasks-audio
do MediaPipe.
NPM (em inglês). Você pode
encontrar e fazer o download dessas bibliotecas pelos links fornecidos na plataforma
Guia de configuração.
É 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 uma rede de fornecimento de conteúdo (CDN) adicione o seguinte código na tag do seu 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 do MediaPipe requer um modelo treinado que seja compatível com esse tarefa. Para mais informações sobre os modelos treinados disponíveis para o classificador de áudio, consulte na seção de visão geral da tarefa Modelos.
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. Usar a createFromModelPath()
função com um caminho relativo ou absoluto para o arquivo de modelo treinado.
Se o modelo já estiver carregado na memória, é possível usar
createFromModelBuffer()
.
O exemplo de código abaixo demonstra o uso da função createFromOptions()
para
para configurar a tarefa. A função createFromOptions
permite personalizar
Classificador de áudio com opções de configuração. Para mais informações sobre configurações
opções, consulte Opções de configuração.
O código a seguir demonstra como criar e configurar a tarefa com comandos opções:
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"
}
});
A implementação de código de exemplo do Audio Classificador permite que o usuário escolha entre
os modos de processamento. A abordagem torna o código de criação da tarefa mais complicado
podem não ser adequados para seu caso de uso. Confira os diferentes modos
em runAudioClassification()
e runStreamingAudioClassification()
da função
example code
.
Opções de configuração
Esta tarefa tem as seguintes opções de configuração para Web e JavaScript aplicativos:
Nome da opção | Descrição | Intervalo de valor | Valor padrão |
---|---|---|---|
displayNamesLocale |
Define o idioma dos rótulos a serem usados para nomes de exibição fornecidos no
metadados do modelo da tarefa, se disponíveis. O padrão é en para
inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado
usando a API Metadata Writer do TensorFlow Lite;
| Código da localidade | en |
maxResults |
Define o número máximo opcional de resultados da classificação com maior pontuação como voltar. Se < 0, todos os resultados disponíveis serão retornados. | Qualquer número positivo | -1 |
scoreThreshold |
Define o limite de pontuação da previsão que substitui o fornecido no os metadados do modelo (se houver). Resultados abaixo desse valor são rejeitados. | [0,0, 1,0] | Não definido |
categoryAllowlist |
Define a lista opcional de nomes de categorias permitidos. Se não estiver vazio,
resultados de classificação cujo nome de categoria não esteja neste conjunto serão
que foram filtradas. Nomes de categorias duplicados ou desconhecidos são ignorados.
Essa opção é mutuamente exclusiva com categoryDenylist e usando
os dois resultarão em erro. |
Qualquer string | Não definido |
categoryDenylist |
Define a lista opcional de nomes de categorias que não são permitidos. Se
não vazio, os resultados de classificação cujo nome de categoria estiver neste conjunto serão filtrados
para fora. Nomes de categorias duplicados ou desconhecidos são ignorados. Essa opção é mutuamente
exclusivo com categoryAllowlist e usar ambos resulta em um erro. |
Qualquer string | Não definido |
Preparar dados
O Classificador de áudio funciona com clipes e streams de áudio arquivos em qualquer formato suportado pelo navegador do host. A tarefa lida com os dados o pré-processamento de entradas, incluindo reamostragem, armazenamento em buffer e enquadramento.
Executar a tarefa
O classificador de áudio usa o método classify()
para executar inferências para clipes de áudio
arquivos ou streams de áudio. A API Audio Classifier retorna as possíveis
categorias de 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
thread da interface do usuário. Se você classificar o áudio do microfone de um dispositivo,
cada classificação bloqueará a linha de execução principal. É possível evitar isso
implementar workers da Web para executar classify()
em outra linha de execução.
O código a seguir demonstra como executar o processamento com o modelo de tarefas:
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 de classificador de áudio, consulte o exemplo de código.
Gerenciar e exibir resultados
Depois de concluir uma execução de inferência, a tarefa de classificador de áudio retorna uma
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 a classificação resultados retornados da tarefa, consulte a exemplo de código para mais detalhes.