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.