Este proyecto implementa un sistema de reconocimiento de locutor utilizando técnicas de procesamiento de señales y aprendizaje automático Data Driven. Se basa en la extracción de características MFCC (Mel-Frequency Cepstral Coefficients) y el modelado mediante "Eigenvoices" (usando SVD/PCA).
El proyecto sigue una arquitectura modular limpia:
- Gestor de Paquetes:
uv(Moderno, rápido, compatible con pip). - Lenguaje: Python 3.9+.
- Librerías Clave:
librosa: Procesamiento de audio y extracción de features.sounddevice: Grabación de audio en tiempo real.scikit-learn: Algoritmos de ML (SVD, SVM, Pipeline).
Este proyecto utiliza uv para una gestión de dependencias ultrarrápida.
-
Instalar uv (si no lo tienes):
# Windows (PowerShell) powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # macOS/Linux curl -LsSf https://astral.sh/uv/install.sh | sh
-
Inicializar entorno y sincronizar: Sitúate en la carpeta raíz del proyecto (
voice_recognition) y ejecuta:uv sync
Esto creará el entorno virtual (
.venv) e instalará todas las dependencias definidas enpyproject.toml.
Para ejecutar la aplicación de consola (CLI):
uv run src/main_cli.py(Nota: uv run ejecuta el script dentro del entorno virtual automáticamente).
-
[1] Grabar Muestras:
- Selecciona la opción 1.
- Introduce el nombre (ej. "juan").
- Graba entre 5 y 10 muestras de tu voz diciendo frases diferentes.
- Repite este paso para al menos 2 personas diferentes.
-
[2] Entrenar Modelo:
- Selecciona la opción 2.
- El sistema leerá todos los audios en
data/. - Extraerá MFCCs, aplicará SVD y entrenará el clasificador.
-
[4] Test Live:
- Selecciona la opción 4.
- Habla al micrófono.
- El sistema predecirá quién eres basándose en el "espacio de voces" aprendido.
El sistema funciona imitando el proceso de audición y reconocimiento de patrones:
-
Oído Digital (MFCC):
- El audio crudo es solo presión de aire en el tiempo.
- Usamos MFCC (Coeficientes Cepstrales en las Frecuencias de Mel) para imitar cómo el oído humano percibe el sonido (siendo más sensible a frecuencias bajas que altas).
- Esto convierte 2 segundos de audio en una "huella digital" numérica compleja.
-
Eigenvoices (SVD - Singular Value Decomposition):
- Cada grabación es un vector de alta dimensión.
- Usamos SVD (técnicamente Truncated SVD) para encontrar los patrones principales que diferencian una voz de otra.
- Imagina que el SVD encuentra las "voces fundamentales" (Eigenvoices). Cualquier voz nueva se puede describir como una mezcla de estas voces fundamentales.
- Esto reduce drásticamente el ruido y la cantidad de datos, dejando solo la esencia de la identidad del locutor.
-
Clasificación:
- Una vez reducida la voz a sus componentes principales, usamos un clasificador (SVM) para trazar fronteras matemáticas entre los diferentes usuarios en este espacio reducido.