Guía de clasificación de audio para Python

La tarea del clasificador de audio MediaPipe te permite clasificar datos de audio. Puedes Usa esta tarea para identificar eventos de sonido de un conjunto de categorías entrenadas. Estos estas instrucciones te muestran cómo usar el clasificador de audio con Python.

Para obtener más información sobre las capacidades, los modelos y las opciones de configuración para completar esta tarea, consulta la Descripción general.

Ejemplo de código

El código de ejemplo para el clasificador de audio proporciona una implementación completa de este en Python para tu referencia. Este código te ayuda a probar esta tarea y obtener empezaste a crear tu propio clasificador de audio. Puedes ver, ejecutar y editar la Ejemplo de clasificador de audio código usando solo un navegador web con Google Colab. Puedes ver el código fuente de este ejemplo sobre GitHub:

Si quieres implementar el clasificador de audio para Raspberry Pi, consulta el ejemplo de Raspberry Pi de la app.

Configuración

En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y proyectos de código específicamente para usar el Clasificador de audio. Para obtener información general configurar tu entorno de desarrollo para usar tareas de MediaPipe, como requisitos de la versión de la plataforma, consulta la Guía de configuración de Python

Paquetes

El clasificador de audio asigna la tarea al paquete mediapipe pip. Puedes instalar el dependencia con lo siguiente:

$ python -m pip install mediapipe

Importaciones

Importa las siguientes clases para acceder a las funciones de tareas del clasificador de audio:

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

Modelo

La tarea del clasificador de audio MediaPipe requiere un modelo entrenado que sea compatible con tarea. Para obtener más información sobre los modelos entrenados disponibles para el clasificador de audio, consulta la sección Modelos de la descripción general de la tarea.

Selecciona y descarga un modelo y, luego, guárdalo en un directorio local. Puedes usar las recomendaciones Yamnet un modelo de responsabilidad compartida.

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

Especifica la ruta del modelo dentro del parámetro Model Name, como se muestra a continuación:

base_options = BaseOptions(model_asset_path=model_path)

Crea la tarea

Usa la función create_from_options para crear la tarea. El La función create_from_options acepta opciones de configuración, como la ejecución modo, configuración regional de los nombres visibles, cantidad máxima de resultados, umbral de confianza, la lista de categorías permitidas y la lista de bloqueo. Para obtener más información sobre la configuración consulta Descripción general de la configuración.

La tarea Clasificador de audio admite clips y transmisiones de audio como entrada. Tú debes especificar el modo de ejecución correspondiente a tu tipo de datos de entrada cuando creando la tarea. Elige la pestaña correspondiente a tu tipo de datos de entrada para ver cómo crear la tarea y ejecutar la inferencia.

Clips de audio

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

Transmisión de audio

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 un ejemplo completo de cómo crear un clasificador de audio para usarlo con audio, consulta el código ejemplo.

Opciones de configuración

Esta tarea tiene las siguientes opciones de configuración para las aplicaciones de Python:

Nombre de la opción Descripción Rango de valores Valor predeterminado
running_mode Establece el modo de ejecución de la tarea. El clasificador de audio tiene dos modos:

AUDIO_CLIPS: Es el modo para ejecutar la tarea de audio en clips de audio independientes.

AUDIO_STREAM: Es el modo para ejecutar la tarea de audio en una transmisión de audio, como desde un micrófono. En este modo, resultListener debe se llama para configurar un objeto de escucha y así recibir los resultados de clasificación de forma asíncrona.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale Configura el idioma de las etiquetas que se usarán para los nombres visibles que se proporcionan en la metadatos del modelo de la tarea, si están disponibles. El valor predeterminado es en para Inglés. Puedes agregar etiquetas localizadas a los metadatos de un modelo personalizado con la API de Metadata Writer de TensorFlow Lite Código de configuración regional en
max_results Establece el número máximo opcional de resultados de la clasificación con puntuación más alta en el resultado. Si < 0, se devolverán todos los resultados disponibles. Cualquier número positivo -1
score_threshold Establece el umbral de puntuación de predicción que anula el que se proporciona en los metadatos del modelo (si los hay). Se rechazarán los resultados por debajo de este valor. [0.0, 1.0] Sin establecer
category_allowlist Establece la lista opcional de nombres de categorías permitidas. Si no está vacío, los resultados de clasificación cuyo nombre de categoría no se encuentre en este conjunto serán filtrado. Se ignoran los nombres de categoría duplicados o desconocidos. Esta opción es mutuamente excluyente con category_denylist y usa ambos darán como resultado un error. Cualquier cadena Sin establecer
category_denylist Establece la lista opcional de nombres de categorías que no están permitidos. Si no vacío, los resultados de clasificación cuyo nombre de categoría se encuentre en este conjunto se filtrarán y sale de ella. Se ignoran los nombres de categoría duplicados o desconocidos. Esta opción es mutuamente excluyente con category_allowlist y usar ambos dará como resultado un error. Cualquier cadena Sin establecer
result_callback Configura el objeto de escucha de resultados para recibir los resultados de clasificación de forma asíncrona cuando el clasificador de audio esté en la transmisión . Solo se puede usar cuando el modo de ejecución está establecido en AUDIO_STREAM N/A Sin establecer

Preparar los datos

El Clasificador de audio funciona con clips y reproducciones de audio. La tarea controla el procesamiento previo de entradas de datos, incluidos el remuestreo, el almacenamiento en búfer y el enmarcado.

Prepara tu entrada como un archivo de audio o un array de NumPy y, luego, conviértelo en un MediaPipe AudioData. Puedes usar una biblioteca externa como SciPy para cargar tus audios de entrada como arrays de NumPy.

Los siguientes ejemplos explican y muestran cómo preparar los datos para su procesamiento en cada uno de los tipos de datos disponibles:

Clips de audio

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)
    

Transmisión de audio

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)
    

Ejecuta la tarea

Llamas a la función de clasificación correspondiente a tu modo de ejecución para activar para hacer inferencias. La API de clasificación de audio muestra las posibles categorías del audio dentro del búfer de audio de entrada.

Clips de audio

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

Transmisión de audio

# 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)
    

Ten en cuenta lo siguiente:

  • Cuando ejecutas en modo de transmisión de audio, también debes proporcionar El clasificador de audio asigna la marca de tiempo de los datos de audio de entrada.
  • Cuando se ejecuta en el modelo de clips de audio, la tarea Clasificador de audio bloqueará el subproceso actual hasta que termine de procesar el audio de entrada.

Para ver un ejemplo más completo de cómo ejecutar el Clasificador de audio con clips de audio, consulta el código ejemplo.

Cómo controlar y mostrar resultados

Luego de ejecutar la inferencia, la tarea del clasificador de audio devuelve un Un objeto AudioClassifierResult que contiene la lista de categorías posibles para los eventos de audio en el audio de entrada.

A continuación, se muestra un ejemplo de los datos de salida de esta tarea:

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

El código de ejemplo del clasificador de audio demuestra cómo mostrar la clasificación resultados devueltos por esta tarea, consulta el código ejemplo para conocer los detalles.