Guide de classification audio pour Python

La tâche de classification audio MediaPipe vous permet d'effectuer une classification sur des données audio. Vous pouvez utilisez cette tâche pour identifier les événements sonores à partir d'un ensemble de catégories entraînées. Ces vous explique comment utiliser le classificateur audio avec Python.

Pour en savoir plus sur les fonctionnalités, les modèles et les options de configuration de cette tâche, consultez la section Présentation.

Exemple de code

L'exemple de code pour le classificateur audio fournit une implémentation complète de ce dans Python à titre de référence. Ce code vous aide à tester cette tâche et à obtenir vous avez commencé à créer votre propre classificateur audio. Vous pouvez afficher, exécuter et modifier les Exemple de classificateur audio du code en utilisant simplement votre navigateur Web avec Google Colab. Vous pouvez afficher le code source cet exemple sur GitHub

Si vous mettez en œuvre le classificateur audio pour Raspberry Pi, consultez l'exemple de Raspberry Pi l'application Nest.

Configuration

Cette section décrit les étapes clés à suivre pour configurer votre environnement de développement spécifiquement pour utiliser le classificateur audio. Pour obtenir des informations générales sur configurer votre environnement de développement pour utiliser les tâches MediaPipe, y compris version de la plate-forme requise, consultez le guide de configuration Python.

<ph type="x-smartling-placeholder">

Colis

Tâche de classificateur audio dans le package Mediapipe pip. Vous pouvez installer par ce qui suit:

$ python -m pip install mediapipe

Importations

Importez les classes suivantes pour accéder aux fonctions de la tâche de classificateur audio:

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

Modèle

La tâche de classification audio MediaPipe nécessite un modèle entraîné et compatible avec tâche. Pour en savoir plus sur les modèles entraînés disponibles pour le classificateur audio, consultez la section Modèles de la présentation des tâches.

Sélectionnez et téléchargez un modèle, puis stockez-le dans un répertoire local. Vous pouvez utiliser les recommandations Yamnet dans un modèle de ML.

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

Spécifiez le chemin d'accès du modèle dans le paramètre "Nom du modèle", comme indiqué ci-dessous:

base_options = BaseOptions(model_asset_path=model_path)

Créer la tâche

Utilisez la fonction create_from_options pour créer la tâche. La La fonction create_from_options accepte les options de configuration, y compris l'exécution mode, paramètres régionaux des noms à afficher, nombre maximal de résultats, seuil de confiance, la liste d'autorisation des catégories et la liste de refus. Pour en savoir plus sur la configuration consultez la page Présentation de la configuration.

La tâche "Outil de classification audio" accepte les extraits audio et les flux audio en tant qu'entrée. Toi vous devez spécifier le mode d'exécution correspondant au type de données d'entrée lorsque la création de la tâche. Sélectionnez l'onglet correspondant au type de données d'entrée pour afficher comment créer la tâche et exécuter l'inférence.

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

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

Pour obtenir un exemple complet de création d'un classificateur audio à utiliser avec des fichiers audio, consultez la code exemple.

Options de configuration

Cette tâche comporte les options de configuration suivantes pour les applications Python:

Nom de l'option Description Plage de valeurs Valeur par défaut
running_mode Définit le mode d'exécution de la tâche. Le classificateur audio propose deux modes:

AUDIO_CLIPS: mode d'exécution de la tâche audio sur des clips audio indépendants

AUDIO_STREAM: mode permettant d'exécuter la tâche audio sur un flux audio, par exemple à partir d'un micro. Dans ce mode, resultListener doit être appelé pour configurer un écouteur afin de recevoir les résultats de la classification. de manière asynchrone.
{AUDIO_CLIPS, AUDIO_STREAM} AUDIO_CLIPS
display_names_locale Définit la langue des libellés à utiliser pour les noms à afficher fournis dans les les métadonnées du modèle de la tâche, le cas échéant. La valeur par défaut est en pour anglais. Vous pouvez ajouter des libellés localisés aux métadonnées d'un modèle personnalisé à l'aide de l'API TensorFlow Lite Metadata Writer ; Code des paramètres régionaux en
max_results Définit le nombre maximal facultatif de résultats de classification les mieux notés sur retour. Si < 0, tous les résultats disponibles sont renvoyés. Tous les nombres positifs -1
score_threshold Définit le seuil de score de prédiction qui remplace celui indiqué dans les métadonnées du modèle (le cas échéant). Les résultats inférieurs à cette valeur sont refusés. [0,0, 1,0] Non défini
category_allowlist Définit la liste facultative des noms de catégories autorisés. Si ce champ n'est pas vide, les résultats de classification dont le nom de catégorie ne fait pas partie de cet ensemble seront filtrées. Les noms de catégories en double ou inconnus sont ignorés. Cette option s'exclue mutuellement avec category_denylist et utilise génèrent une erreur. Toutes les chaînes Non défini
category_denylist Définit la liste facultative des noms de catégories non autorisés. Si non vide, les résultats de classification dont le nom de catégorie se trouve dans cet ensemble seront filtrés s'affiche. Les noms de catégories en double ou inconnus sont ignorés. Cette option est mutuellement exclusive avec category_allowlist et l'utilisation des deux entraîne une erreur. Toutes les chaînes Non défini
result_callback Définit l'écouteur des résultats pour qu'il reçoive les résultats de la classification. de manière asynchrone lorsque le classificateur audio se trouve dans le flux audio. . Ne peut être utilisé que lorsque le mode d'exécution est défini sur AUDIO_STREAM N/A Non défini

Préparer les données

Le classificateur audio fonctionne avec les clips audio et les flux audio. La tâche gère le prétraitement de l'entrée de données, y compris le rééchantillonnage, la mise en mémoire tampon et le cadrage.

Préparez votre entrée en tant que fichier audio ou tableau Numpy, puis convertissez-la en Objet AudioData MediaPipe. Vous pouvez utiliser une bibliothèque externe SciPy pour charger vos données audio d'entrée en tant que tableaux Numpy.

Les exemples suivants expliquent et montrent comment préparer les données à traiter pour chacun des types de données disponibles:

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

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

Exécuter la tâche

Vous appelez la fonction de classification correspondant à votre mode de course pour déclencher les inférences. L'API Audio Classifier renvoie les catégories possibles pour le contenu audio. dans la mémoire tampon du contenu audio d'entrée.

Clips audio

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

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

Veuillez noter les points suivants :

  • Lors de l'exécution en mode de flux audio, vous devez également fournir le paramètre Tâche de classificateur audio avec le code temporel des données audio d'entrée.
  • Lors de l'exécution dans le modèle de clips audio, la tâche de classificateur audio bloque les jusqu'à ce qu'il ait fini de traiter l'audio d'entrée.

Pour obtenir un exemple plus complet d'exécution d'un classificateur audio avec des clips audio, consultez la code exemple.

Gérer et afficher les résultats

Lors de l'exécution de l'inférence, la tâche de classificateur audio renvoie une Un objet AudioClassifierResult contenant la liste des catégories possibles pour les événements audio dans l'audio d'entrée.

Voici un exemple de données de sortie de cette tâche:

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

L'exemple de code du classificateur audio montre comment afficher la classification résultats renvoyés par cette tâche, consultez le code exemple pour en savoir plus.