La tâche de classificateur audio MediaPipe vous permet d'effectuer une classification sur des données audio. Vous pouvez utiliser cette tâche pour identifier les événements sonores à partir d'un ensemble de catégories entraînées. Ces instructions vous expliquent 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 présentation.
Exemple de code
L'exemple de code pour le classificateur audio fournit une implémentation complète de cette tâche en Python à titre de référence. Ce code vous aide à tester cette tâche et à créer votre propre classificateur audio. Avec Google Colab, vous pouvez afficher, exécuter et modifier l'exemple de code du classificateur audio en utilisant simplement votre navigateur Web. Vous pouvez afficher le code source de cet exemple sur GitHub.
Si vous implémentez le classificateur audio pour Raspberry Pi, consultez l'exemple d'application pour Raspberry Pi.
Préparation
Cette section décrit les étapes clés pour configurer votre environnement de développement et vos projets de code spécifiquement pour l'utilisation du classificateur audio. Pour obtenir des informations générales sur la configuration de votre environnement de développement pour l'utilisation des tâches MediaPipe, y compris sur les exigences concernant les versions de la plate-forme, consultez le guide de configuration de Python.
Colis
La tâche de classificateur audio dans le package pip mediapipe Vous pouvez installer la dépendance avec la commande suivante:
$ python -m pip install mediapipe
Importations
Importez les classes suivantes pour accéder aux fonctions des tâches du classificateur audio:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import audio
Modèle
La tâche de classificateur audio MediaPipe nécessite un modèle entraîné compatible avec cette 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 le modèle Yamnet recommandé.
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 fonction create_from_options
accepte des options de configuration telles que le mode d'exécution, les paramètres régionaux des noms à afficher, le nombre maximal de résultats, le seuil de confiance, la liste d'autorisation de catégories et la liste de refus. Pour en savoir plus sur les options de configuration, consultez la section Présentation de la configuration.
La tâche de classificateur d'audio accepte les extraits audio et les flux audio en entrée. Vous devez spécifier le mode d'exécution correspondant à votre type de données d'entrée lors de la création de la tâche. Choisissez l'onglet correspondant à votre type de données d'entrée pour voir 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 du contenu audio, consultez l'exemple de code.
Options de configuration
Cette tâche dispose des 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 comporte deux modes: AUDIO_CLIPS: mode d'exécution de la tâche audio sur des clips audio indépendants. AUDIO_STREAM: mode d'exécution de la tâche audio sur un flux audio, par exemple depuis le 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 métadonnées du modèle de la tâche, le cas échéant. La valeur par défaut est en pour l'anglais. Vous pouvez ajouter des thèmes 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 à renvoyer. Si la valeur est inférieure à 0, tous les résultats disponibles sont renvoyés. | Tout nombre positif | -1 |
score_threshold |
Définit le seuil de score de prédiction qui remplace celui fourni 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éfinie |
category_allowlist |
Définit la liste facultative des noms de catégories autorisés. S'ils ne sont pas vides, les résultats de classification dont le nom de catégorie ne figure pas dans cet ensemble seront filtrés. Les noms de catégorie en double ou inconnus sont ignorés.
Cette option s'exclut mutuellement avec category_denylist . L'utilisation des deux résultats génère une erreur. |
N'importe quelle chaîne | Non définie |
category_denylist |
Définit la liste facultative des noms de catégorie qui ne sont pas autorisés. S'ils ne sont pas vides, les résultats de classification dont le nom de catégorie figure dans cet ensemble seront filtrés. Les noms de catégorie en double ou inconnus sont ignorés. Cette option s'exclut mutuellement avec category_allowlist . L'utilisation des deux entraîne une erreur. |
N'importe quelle chaîne | Non définie |
result_callback |
Définit l'écouteur de résultats pour qu'il reçoive les résultats de la classification de manière asynchrone lorsque le classificateur audio est en mode de flux audio. Ne peut être utilisé que lorsque le mode En cours d'exécution est défini sur AUDIO_STREAM |
N/A | Non définie |
Préparation des données
Le classificateur audio fonctionne avec des clips audio et des flux audio. Cette tâche gère le prétraitement de l'entrée des données, y compris le rééchantillonnage, la mise en mémoire tampon et le cadrage.
Préparez votre entrée sous la forme d'un fichier audio ou d'un tableau Numpy, puis convertissez-la en objet AudioData
MediaPipe. Vous pouvez utiliser une bibliothèque externe telle que SciPy pour charger vos contenus audio d'entrée sous forme de 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 d'exécution pour déclencher des inférences. L'API Audio Classifier renvoie les catégories possibles pour les événements audio dans le tampon 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 à la tâche de classificateur audio l'horodatage 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 le thread actuel jusqu'à ce qu'il ait fini de traiter l'audio d'entrée.
Pour obtenir un exemple plus complet d'exécution du classificateur audio avec des extraits audio, consultez l'exemple de code.
Gérer et afficher les résultats
Lors de l'exécution de l'inférence, la tâche de classificateur audio renvoie un objet AudioClassifierResult
qui contient la liste des catégories possibles pour les événements audio dans l'audio d'entrée.
Voici un exemple des 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 les résultats de classification renvoyés par cette tâche. Pour en savoir plus, consultez cet exemple de code.