Guia de classificação de áudio para Python

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 com Python.

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 Python para sua referência. O código ajuda você a testar essa tarefa e começar a criar seu próprio classificador de áudio. É possível ver, executar e editar o exemplo de código do classificador de áudio usando apenas seu navegador da Web com o Google Colab. Confira o código-fonte deste exemplo no GitHub.

Se você estiver implementando o classificador de áudio para o Raspberry Pi, consulte o app de exemplo do Raspberry Pi (link em inglês).

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 Python.

Pacotes

A tarefa do classificador de áudio é o pacote Mediapipe. Você pode instalar a dependência da seguinte forma:

$ python -m pip install mediapipe

Importações

Importe as seguintes classes para acessar as funções da tarefa do Classificador de áudio:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio

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 em um diretório local. É possível usar o modelo Yamnet (em inglês) recomendado.

model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'

Especifique o caminho do modelo no parâmetro Model Name, conforme mostrado abaixo:

base_options = BaseOptions(model_asset_path=model_path)

Criar a tarefa

Use a função create_from_options para criar a tarefa. A função create_from_options aceita opções de configuração, incluindo o modo de execução, a localidade dos nomes de exibição, o número máximo de resultados, o limite de confiança, a lista de permissões da categoria e a lista de bloqueio. Para mais informações sobre as opções de configuração, consulte Visão geral da configuração.

A tarefa "Classificador de áudio" oferece suporte a clipes e streams de áudio como entrada. Ao criar a tarefa, especifique o modo de execução correspondente ao tipo de dados de entrada. Escolha a guia correspondente ao tipo de dados de entrada para saber como criar a tarefa e executar a inferência.

Clipes de áudio

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    max_results=5,
    running_mode=AudioRunningMode.AUDIO_CLIPS)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
    

Stream de áudio

AudioClassifier = mp.tasks.audio.AudioClassifier
AudioClassifierOptions = mp.tasks.audio.AudioClassifierOptions
AudioClassifierResult = mp.tasks.audio.AudioClassifierResult
AudioRunningMode = mp.tasks.audio.RunningMode
BaseOptions = mp.tasks.BaseOptions

def print_result(result: AudioClassifierResult, timestamp_ms: int):
    print(AudioClassifierResult result: {}’.format(result))

options = AudioClassifierOptions(
    base_options=BaseOptions(model_asset_path='/path/to/model.tflite'),
    running_mode=AudioRunningMode.AUDIO_STREAM,
    max_results=5,
    result_callback=print_result)

with AudioClassifier.create_from_options(options) as classifier:
  # The classifier is initialized. Use it here.
  # ...
  

Para ver um exemplo completo de como criar um classificador de áudio para uso com áudio, consulte o exemplo de código.

Opções de configuração

Esta tarefa tem as seguintes opções de configuração para aplicativos Python:

Nome da opção Descrição Intervalo de valor Valor padrão
running_mode Define o modo de execução da tarefa. O classificador de áudio tem dois modos:

AUDIO_CLIPS: o modo para executar a tarefa de áudio em clipes de áudio independentes.

AUDIO_STREAM: o modo para executar a tarefa de áudio em um stream de áudio, como no microfone. Nesse modo, resultListener precisa ser chamado para configurar um listener e receber os resultados de classificação de forma assíncrona.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale 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
max_results 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
score_threshold 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
category_allowlist 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 category_denylist, e o uso de ambos resulta em um erro. Qualquer string Não definido
category_denylist 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 category_allowlist, e o uso de ambos resulta em um erro. Qualquer string Não definido
result_callback Define o listener de resultados para receber os resultados da classificação de forma assíncrona quando o Classificador de áudio está no modo de stream de áudio. Só pode ser usado quando o modo de corrida está definido como AUDIO_STREAM N/A Não definido

preparar dados

O Classificador de áudio funciona com clipes e streams de áudio. A tarefa lida com o pré-processamento da entrada de dados, incluindo reamostragem, armazenamento em buffer e enquadramento.

Prepare sua entrada como um arquivo de áudio ou uma matriz numpy e a converta em um objeto AudioData do MediaPipe. Use uma biblioteca externa, como SciPy, para carregar os áudios de entrada como matrizes numpy.

Os exemplos a seguir explicam e mostram como preparar os dados para o processamento de cada um dos tipos de dados disponíveis:

Clipes de áudio

import numpy as np
from scipy.io import wavfile

AudioData = mp.tasks.components.containers.AudioData

sample_rate, buffer = wavfile.read('/path/to/audio.wav')
audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

Stream de áudio

import numpy as np

AudioData = mp.tasks.components.containers.AudioData

# Read microphone data as np arrays, then call

audio_data = AudioData.create_from_array(
    buffer.astype(float) / np.iinfo(np.int16).max, sample_rate)
    

Executar a tarefa

Chame a função de classificação correspondente ao modo de execução para acionar as inferências. A API Audio Classifier retorna as categorias possíveis para os eventos de áudio no buffer de áudio de entrada.

Clipes de áudio

# Perform audio classification on the provided audio clip.
audio_classifier_result_list = classifier.classify(audio_data)
    

Stream de áudio

# Send live audio data to perform audio classification.
# Results are sent to the `result_callback` provided in the `AudioClassifierOptions`
classifier.classify_async(audio_data, timestamp_ms)
    

Observe o seguinte:

  • Ao executar no modo de stream de áudio, você também precisa fornecer à tarefa do Classificador de áudio o carimbo de data/hora dos dados de áudio de entrada.
  • Quando executada no modelo de clipes de áudio, a tarefa do classificador de áudio vai bloquear a linha de execução atual até que ela termine de processar o áudio de entrada.

Para conferir um exemplo mais completo de execução do classificador de áudio com clipes de áudio, consulte o exemplo de código (link em inglês).

Gerenciar e mostrar resultados

Ao executar a inferência, a tarefa do Classificador de áudio retorna um objeto AudioClassifierResult que contém a lista de categorias possíveis para os eventos de áudio no áudio de entrada.

Veja a seguir um exemplo dos dados de saída dessa tarefa:

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 por essa tarefa. Consulte o exemplo de código para mais detalhes.