Cómo implementar clasificación de audio con Azure AI Speech: paso a paso
Este tutorial muestra cómo crear una canalización simple de clasificación de audio con Azure AI Speech para diferenciar comandos o sonidos (por ejemplo: ‘clap’, ‘applause’, ‘speech’). Tener un clasificador de audio es útil para automatización, accesibilidad y monitorización en aplicaciones reales.
Requisitos previos
- Cuenta Azure con suscripción activa y Azure AI Speech configurado (key y endpoint).
- Python 3.8+ instalado y pip.
- Ficheros de audio WAV en una estructura organizada por carpetas (una carpeta por clase).
- Bibliotecas: azure-cognitiveservices-speech, librosa, scikit-learn, soundfile.
- Editor de texto/IDE y línea de comandos básica.
Paso 1: Por qué y elección del enfoque
Clasificar audio puede hacerse con modelos preentrenados o creando un clasificador simple basado en features (MFCCs) seguido de un clasificador clásico (p. ej.: RandomForest). Para un tutorial introductorio usamos extracción de MFCC con librosa y un clasificador sklearn — más ligero y explicable antes de migrar a deep learning o Custom Speech.
Paso 2: Preparar entorno e instalar dependencias
Instale las bibliotecas necesarias. Esto incluye el SDK de Azure Speech si pretende integrar grabación o transcripción, pero el núcleo de la clasificación usa librosa y scikit-learn.
python -m pip install azure-cognitiveservices-speech librosa scikit-learn soundfile numpy
Paso 3: Estructurar los datos de audio
Organice los ficheros WAV así: dataset/clap/*.wav, dataset/applause/*.wav, dataset/speech/*.wav. Asegúrese de que los ficheros tienen la misma tasa de muestreo (p. ej.: 16 kHz) o serán convertidos al cargarlos.
Paso 4: Extraer features (MFCC) del audio
Extraemos MFCCs porque resumen bien características tímbricas. Vamos a cargar cada fichero, calcular MFCC medios a lo largo del tiempo y construir X (features) y y (labels).
import os
import numpy as np
import librosa
def extract_features(file_path, n_mfcc=13):
y, sr = librosa.load(file_path, sr=16000)
mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=n_mfcc)
return np.mean(mfcc, axis=1)
def load_dataset(root):
X, y = [], []
classes = sorted(os.listdir(root))
for label in classes:
folder = os.path.join(root, label)
if not os.path.isdir(folder):
continue
for f in os.listdir(folder):
if f.lower().endswith('.wav'):
path = os.path.join(folder, f)
features = extract_features(path)
X.append(features)
y.append(label)
return np.array(X), np.array(y)
# Ejemplo de uso
# X, y = load_dataset('dataset')
Paso 5: Entrenar y evaluar un clasificador
Usamos un RandomForest para comenzar. Hacemos split entrenamiento/prueba y medimos accuracy y matriz de confusión para ver errores comunes (confusión entre clases similares).
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
X, y = load_dataset('dataset')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)
clf = RandomForestClassifier(n_estimators=100, random_state=42)
clf.fit(X_train, y_train)
pred = clf.predict(X_test)
print('Accuracy:', accuracy_score(y_test, pred))
print('Confusion matrix:\n', confusion_matrix(y_test, pred))
Paso 6: Integrar con Azure AI Speech (opcional)
Si desea capturar audio en tiempo real o usar el servicio de grabación, utilice azure-cognitiveservices-speech para grabar y después aplicar la canalización de extracción+clasificación al buffer capturado.
import azure.cognitiveservices.speech as speechsdk
speech_key = 'SUA_SPEECH_KEY'
service_region = 'SUA_REGION'
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
rec = speechsdk.AudioConfig(use_default_microphone=True)
# Ejemplo simple: graba 3s y guarda como WAV local (puede usar para clasificar)
recorder = speechsdk.audio.AudioRecorder(audio_config)
# Notas: el SDK tiene clases para grabación; aquí referimos a la integración general.
Verificar el resultado
Confirme que la accuracy es aceptable (p. ej.: >70% en un dataset simple). Revise la matriz de confusión para clases muy confundidas. Pruebe con nuevos ficheros WAV no vistos y vea si el modelo predice correctamente. Si utiliza el micrófono vía Azure AI Speech, grabe audio corto y páselo por el mismo extract_features -> clf.predict.
Conclusión
Ha construido un clasificador de audio simple con extracción de MFCC y RandomForest, y sabe cómo integrar grabación vía Azure AI Speech. Próximos pasos: usar data augmentation, probar modelos de deep learning (CNN/LSTM) o experimentar con Custom Speech para modelos preentrenados. Consejo: si las clases son parecidas, aumente el número de MFCCs o pruebe features adicionales (chroma, spectral contrast).