La tarea MediaPipe Audio Classifier te permite realizar la clasificación de datos de audio. Puedes usar esta tarea para identificar eventos de sonido a partir de un conjunto de categorías entrenadas. En estas instrucciones, se muestra 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 de esta tarea, consulta la Descripción general.
Ejemplo de código
El código de ejemplo de un clasificador de audio proporciona una implementación completa de esta tarea en Python para tu referencia. Este código te ayuda a probar esta tarea y comenzar a compilar tu propio clasificador de audio. Puedes ver, ejecutar y editar el código de ejemplo del clasificador de audio solo con tu navegador web con Google Colab. Puedes ver el código fuente de este ejemplo en GitHub.
Si quieres implementar el clasificador de audio para Raspberry Pi, consulta la app de ejemplo de Raspberry Pi.
Configuración
En esta sección, se describen los pasos clave para configurar tu entorno de desarrollo y los proyectos de código específicamente para usar el clasificador de audio. Si quieres obtener información general sobre la configuración de tu entorno de desarrollo para usar tareas de MediaPipe, incluidos los requisitos de la versión de la plataforma, consulta la Guía de configuración de Python.
Paquetes
La tarea del clasificador de audio es el paquete pip de mediapipe. Puedes instalar la dependencia con el siguiente comando:
$ python -m pip install mediapipe
Importaciones
Importa las siguientes clases para acceder a las funciones de la tarea 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 de MediaPipe requiere un modelo entrenado que sea compatible con esta tarea. Si deseas obtener más información sobre los modelos entrenados disponibles para el clasificador de audio, consulta la descripción general de la tarea en la sección Modelos.
Selecciona y descarga un modelo, y almacénalo en un directorio local. Puedes usar el modelo recomendado de Yamnet.
model_path = '/absolute/path/to/lite-model_yamnet_classification_tflite_1.tflite'
Especifica la ruta del modelo dentro del parámetro Nombre del modelo, 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. La función create_from_options
acepta opciones de configuración, incluidos el modo de ejecución, la configuración regional de los nombres visibles, la cantidad máxima de resultados, el umbral de confianza, la lista de categorías permitidas y la lista de bloqueo. Para obtener más información sobre las opciones de configuración, consulta Descripción general de la configuración.
La tarea Clasificador de audio admite clips de audio y transmisiones de audio como entrada. Cuando creas la tarea, debes especificar el modo de ejecución correspondiente a tu tipo de datos de entrada. 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. # ...
Si deseas ver un ejemplo completo de cómo crear un clasificador de audio para usarlo con audio, consulta el ejemplo de código.
Opciones de configuración
Esta tarea incluye las siguientes opciones de configuración para aplicaciones de Python:
Nombre de la opción | Descripción | Rango de valores | Valor predeterminado |
---|---|---|---|
running_mode |
Establece el modo de ejecución para la tarea. El clasificador de audio tiene dos modos: AUDIO_CLIPS: Es el modo que permite 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, se debe llamar a resultListener para configurar un objeto de escucha a fin de 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 proporcionados en los 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 |
Configura la cantidad máxima opcional de resultados de clasificación con puntuación más alta que se mostrarán. Si es inferior a 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 proporcionado en los metadatos del modelo (si corresponde). Se rechazarán los resultados inferiores a este valor. | [0.0, 1.0] | No establecida |
category_allowlist |
Establece la lista opcional de nombres de categorías permitidas. Si no está vacío, se filtrarán los resultados de clasificación cuyo nombre de categoría no esté en este conjunto. Los nombres de categorías duplicados o desconocidos se ignoran.
Esta opción es mutuamente excluyente con category_denylist , y el uso de ambos da como resultado un error. |
Cualquier cadena | No establecida |
category_denylist |
Establece la lista opcional de nombres de categorías que no están permitidas. Si no está vacío, se filtrarán los resultados de clasificación cuyo nombre de categoría se encuentre en este conjunto. Los nombres de categorías duplicados o desconocidos se ignoran. Esta opción es mutuamente
exclusiva con category_allowlist , y el uso de ambas da como resultado un error. |
Cualquier cadena | No establecida |
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 el modo de transmisión de audio. Solo se puede usar cuando el modo de ejecución está configurado en AUDIO_STREAM |
N/A | No establecida |
Preparar los datos
El clasificador de audio funciona con clips y transmisiones de audio. Esta tarea controla el procesamiento previo de la entrada de datos, lo que incluye el remuestreo, el almacenamiento en búfer y el enmarcado.
Prepara la entrada como un archivo de audio o un array de NumPy y, luego, conviértela en un objeto AudioData
de MediaPipe. Puedes usar una biblioteca externa como SciPy para cargar tus audios de entrada como arrays NumPy.
En los siguientes ejemplos, se explica y se muestra cómo preparar 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
Llama a la función de clasificación correspondiente a tu modo de ejecución para activar las inferencias. La API de Audio Classifier muestra las categorías posibles para los eventos de 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 se ejecuta en el modo de transmisión de audio, también debes proporcionar a la tarea Clasificador de audio 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 ejemplo de código.
Cómo controlar y mostrar los resultados
Cuando se ejecuta la inferencia, la tarea Clasificador de audio muestra un objeto AudioClassifierResult
que contiene la lista de categorías posibles para los eventos de audio dentro del 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
En el código de ejemplo del clasificador de audio, se muestra cómo mostrar los resultados de clasificación que se muestran con esta tarea. Consulta el ejemplo de código para obtener más información.