Guia de classificação de áudio para Python

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

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 Python para sua referência. Esse código ajuda a testar a tarefa começou a criar seu próprio classificador de áudio. É possível exibir, executar e editar Exemplo de classificador de áudio código usando apenas o navegador da Web com o Google Colab. Você pode conferir o código-fonte neste exemplo GitHub.

Se você estiver implementando o classificador de áudio para o Raspberry Pi, consulte o exemplo do Raspberry Pi app.

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 o Guia de configuração do Python.

Pacotes

A tarefa do classificador de áudio ao pacote pip mediapipe. É possível instalar com o seguinte:

$ python -m pip install mediapipe

Importações

Importe as seguintes classes para acessar as funções da tarefa do Audio Classificador:

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

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 em um diretório local. Você pode usar o padrão Yamnet (link em inglês) um modelo de machine learning.

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

Especifique o caminho do modelo dentro do parâmetro "Nome do modelo", 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 A função create_from_options aceita opções de configuração, incluindo modo, nome de exibição, localidade, número máximo de resultados, limite de confiança, lista de permissões e de bloqueio. Para mais informações sobre configurações opções, consulte Visão geral da configuração.

A tarefa Classificador de áudio oferece suporte a clipes e streams de áudio como entrada. Você precisa especificar o modo de execução correspondente ao tipo de dados de entrada ao criar a tarefa. Selecione a guia correspondente ao tipo dos dados de entrada para ver 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 conferir um exemplo completo de como criar um classificador de áudio para uso com áudio, consulte o código exemplo.

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 do microfone. Neste modo, resultListener deve ser chamado para configurar um listener e receber os resultados da classificação de forma assíncrona.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale 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
max_results 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
score_threshold 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
category_allowlist 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 category_denylist e usando os dois resultarão em 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 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 category_allowlist e usar 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 stream de áudio modo 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 de entrada de dados, incluindo reamostragem, armazenamento em buffer e enquadramento.

Preparar sua entrada como um arquivo de áudio ou uma matriz numpy e convertê-la em um Objeto AudioData do MediaPipe. Você pode usar uma biblioteca externa, como SciPy para carregar os áudios de entrada como matrizes numpy.

Os exemplos a seguir explicam e mostram como preparar dados para processamento em 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

Você chama a função de classificação correspondente ao seu modo de corrida para acionar ou inferências. A API Audio Classifier retorna as possíveis categorias para o á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 o A tarefa do classificador de áudio é baseada no carimbo de data/hora dos dados de áudio de entrada.
  • Ao executar no modelo de clipes de áudio, a tarefa de classificador de áudio bloqueará o linha de execução atual até terminar de processar o áudio de entrada.

Para um exemplo mais completo de execução do Classificador de áudio com clipes de áudio, consulte o código exemplo.

Gerenciar e exibir resultados

Ao executar a inferência, a tarefa do classificador de áudio retorna uma Objeto AudioClassifierResult que contém a lista de categorias possíveis para os eventos de áudio na entrada de áudio.

Confira abaixo um exemplo dos dados de saída desta 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 a classificação resultados retornados dessa tarefa, consulte o código exemplo para mais detalhes.