Reconocimiento de voz con Python: guía completa con ejemplos
El reconocimiento de voz con Python permite convertir palabras habladas en texto y utilizarlas dentro de nuestros programas. Con unas pocas líneas de código podemos escuchar el micrófono, transcribir audios e incluso ejecutar comandos mediante la voz.
Python cuenta con bibliotecas como SpeechRecognition, Whisper y Vosk que simplifican considerablemente este proceso. En esta guía aprenderás desde un ejemplo básico hasta alternativas para realizar reconocimiento de voz sin conexión a Internet.
¿Qué es el reconocimiento de voz en Python?
El reconocimiento de voz o speech recognition es una tecnología capaz de analizar una señal de audio e identificar las palabras pronunciadas para convertirlas en información que una computadora pueda procesar.
Uno de sus usos más comunes es el llamado Speech-to-Text (STT), donde una grabación de voz se transforma automáticamente en texto.
Por ejemplo, si dices:
“Abrir navegador”
Un programa podría obtener el texto abrir navegador, interpretarlo como una orden y posteriormente ejecutar una acción.
Esto permite desarrollar proyectos como:
- asistentes virtuales;
- sistemas de dictado;
- transcripción automática;
- comandos por voz;
- aplicaciones de accesibilidad;
- buscadores controlados mediante voz;
- interfaces que no requieren teclado.
¿Lo interesante? No necesitas desarrollar un modelo de inteligencia artificial desde cero.
Python dispone de bibliotecas que se encargan de buena parte del trabajo pesado.
Este articulo te puede interesar:Algoritmo de Bolsa de Palabras en Python: Introducción
¿Cómo funciona el reconocimiento de voz?
Aunque desde nuestro código puede parecer bastante sencillo, detrás del reconocimiento del habla existe un proceso mucho más complejo.
De manera simplificada podemos dividirlo en cuatro pasos:
- El micrófono captura nuestra voz.
- La señal se transforma en datos digitales.
- Un motor de reconocimiento analiza el audio.
- El sistema devuelve las palabras detectadas como texto.
Nuestro programa Python puede entonces utilizar ese texto para realizar cualquier acción.
Por ejemplo:
if "hola" in texto.lower():
print("¡Hola! ¿Cómo estás?")
Aquí es donde comienzan las posibilidades interesantes.
¿Qué biblioteca utilizar para reconocimiento de voz en Python?
Existen varias alternativas y no todas sirven exactamente para lo mismo.
| Biblioteca | Ideal para | Internet | Dificultad |
|---|---|---|---|
| SpeechRecognition | Aprender y crear prototipos | Depende del motor | Baja |
| Whisper | Transcribir archivos con buena precisión | No después de descargar el modelo | Media |
| Vosk | Reconocimiento offline y tiempo real | No | Media |
| PocketSphinx | Proyectos offline sencillos | No | Media |
Para comenzar, utilizaremos SpeechRecognition, ya que proporciona una API sencilla y permite trabajar con diferentes motores.
Después veremos otras opciones.
Instalar SpeechRecognition en Python
Lo primero será instalar la biblioteca.
Abre una terminal y ejecuta:
pip install SpeechRecognition
También puedes utilizar:
python -m pip install SpeechRecognition
Después comprueba que Python puede importarla:
import speech_recognition as sr
print(sr.__version__)
Si aparece el número de versión sin errores, ya tenemos instalada la biblioteca.
Sin embargo, todavía necesitamos acceder al micrófono.
Instalar PyAudio para utilizar el micrófono
Cuando queremos capturar nuestra voz directamente desde el micrófono, normalmente necesitaremos PyAudio.
Puedes intentar instalarlo con:
pip install pyaudio
La instalación puede variar dependiendo del sistema operativo y de la versión de Python.
Si SpeechRecognition funciona correctamente pero aparece un error cuando intentas utilizar sr.Microphone(), revisa primero que PyAudio esté instalado correctamente.
También puedes comprobar qué micrófonos detecta el sistema:
import speech_recognition as sr
for indice, nombre in enumerate(sr.Microphone.list_microphone_names()):
print(indice, nombre)
Esto es particularmente útil cuando tienes varios dispositivos conectados.
Primer ejemplo de reconocimiento de voz con Python
Ya podemos crear nuestro primer programa.
El siguiente código escucha el micrófono, captura una frase y posteriormente intenta convertirla en texto:
import speech_recognition as sr
reconocedor = sr.Recognizer()
with sr.Microphone() as fuente:
print("Di algo...")
audio = reconocedor.listen(fuente)
try:
texto = reconocedor.recognize_google(
audio,
language="es-ES"
)
print("Has dicho:", texto)
except sr.UnknownValueError:
print("No pude entender el audio")
except sr.RequestError as error:
print("Error con el servicio:", error)
Ejecuta el programa y espera a que aparezca:
Di algo...
Ahora pronuncia una frase.
Por ejemplo:
Estoy aprendiendo Python
Si todo funciona correctamente obtendrás algo parecido a:
Has dicho: estoy aprendiendo Python
¡Y listo! Acabas de crear un pequeño sistema de voz a texto con Python.
¿Qué hace este código?
Analicemos las partes importantes.
Primero importamos la biblioteca:
import speech_recognition as sr
Después creamos un reconocedor:
reconocedor = sr.Recognizer()
Este objeto será el encargado de manejar el audio.
A continuación utilizamos:
with sr.Microphone() as fuente:
para seleccionar el micrófono como fuente.
Finalmente:
audio = reconocedor.listen(fuente)
captura lo que estamos diciendo.
La conversión de audio a texto ocurre aquí:
reconocedor.recognize_google(
audio,
language="es-ES"
)
En este ejemplo indicamos explícitamente que esperamos voz en español.
Mejorar la precisión con ruido ambiental
Ahora aparece un problema muy habitual.
¿Qué sucede si tenemos un ventilador, personas hablando o cualquier otro sonido de fondo?
Podemos pedirle al reconocedor que se ajuste previamente al ruido ambiental.
import speech_recognition as sr
reconocedor = sr.Recognizer()
with sr.Microphone() as fuente:
print("Calibrando ruido ambiental...")
reconocedor.adjust_for_ambient_noise(
fuente,
duration=1
)
print("Puedes hablar")
audio = reconocedor.listen(fuente)
try:
texto = reconocedor.recognize_google(
audio,
language="es-ES"
)
print("Texto:", texto)
except sr.UnknownValueError:
print("No pude entender lo que dijiste")
except sr.RequestError as error:
print("Error:", error)
Durante ese pequeño período de calibración conviene no hablar.
El programa utiliza ese sonido inicial para estimar qué nivel corresponde al ambiente y cuál podría corresponder a nuestra voz.
No hará milagros —si estás programando al lado de una licuadora probablemente tendrás otros problemas—, pero puede mejorar bastante los resultados.
Evitar que el programa espere indefinidamente
Otro detalle importante es controlar cuánto tiempo puede esperar el programa.
Podemos utilizar timeout:
audio = reconocedor.listen(
fuente,
timeout=5
)
Esto evita que el programa quede esperando eternamente a que alguien hable.
También podemos limitar la duración de una frase:
audio = reconocedor.listen(
fuente,
timeout=5,
phrase_time_limit=10
)
En este caso esperamos hasta cinco segundos para detectar que alguien comenzó a hablar y limitamos la frase capturada.
Para aplicaciones reales, estos pequeños detalles hacen una gran diferencia.
Reconocer comandos de voz con Python
Convertir voz en texto es útil, pero podemos ir un paso más allá.
Podemos utilizar el resultado como un comando de voz.
import speech_recognition as sr
import webbrowser
reconocedor = sr.Recognizer()
with sr.Microphone() as fuente:
reconocedor.adjust_for_ambient_noise(fuente)
print("Di un comando:")
audio = reconocedor.listen(fuente)
try:
comando = reconocedor.recognize_google(
audio,
language="es-ES"
).lower()
print("Comando:", comando)
if "abrir google" in comando:
webbrowser.open("https://www.google.com")
elif "abrir youtube" in comando:
webbrowser.open("https://www.youtube.com")
elif "hola" in comando:
print("¡Hola! ¿En qué puedo ayudarte?")
else:
print("No conozco ese comando")
except sr.UnknownValueError:
print("No entendí el comando")
except sr.RequestError as error:
print("Error:", error)
Ahora nuestro programa no solamente reconoce nuestra voz, sino que utiliza el resultado para tomar decisiones.
A partir de aquí podrías agregar tus propios comandos.
Crear un asistente de voz sencillo
Podemos mejorar el ejemplo anterior haciendo que el programa continúe escuchando hasta que pronunciemos una palabra determinada.
import speech_recognition as sr
reconocedor = sr.Recognizer()
while True:
with sr.Microphone() as fuente:
print("Escuchando...")
reconocedor.adjust_for_ambient_noise(
fuente,
duration=0.5
)
audio = reconocedor.listen(fuente)
try:
texto = reconocedor.recognize_google(
audio,
language="es-ES"
).lower()
print("Dijiste:", texto)
if "terminar" in texto:
print("Finalizando programa...")
break
elif "hola" in texto:
print("¡Hola!")
elif "python" in texto:
print("Has mencionado Python")
else:
print("No tengo una respuesta para eso")
except sr.UnknownValueError:
print("No pude entenderte")
except sr.RequestError as error:
print("Error de conexión:", error)
break
Cuando digamos:
terminar
el bucle finalizará.
Este patrón puede utilizarse como punto de partida para crear un asistente de voz en Python.
Reconocimiento de voz desde un archivo de audio
No siempre necesitamos utilizar un micrófono.
También podemos realizar reconocimiento de audio utilizando archivos existentes.
Por ejemplo, imaginemos que tenemos:
audio.wav
Podemos procesarlo de esta forma:
import speech_recognition as sr
reconocedor = sr.Recognizer()
with sr.AudioFile("audio.wav") as fuente:
audio = reconocedor.record(fuente)
try:
texto = reconocedor.recognize_google(
audio,
language="es-ES"
)
print("Transcripción:")
print(texto)
except sr.UnknownValueError:
print("No se pudo reconocer el audio")
except sr.RequestError as error:
print("Error:", error)
Esta posibilidad resulta especialmente útil para crear herramientas de transcripción automática.
Podrías utilizarla, por ejemplo, para procesar entrevistas, notas de voz o grabaciones.
Reconocer solamente una parte del audio
¿Qué ocurre si tenemos una grabación larga y solamente queremos procesar una sección?
Podemos limitar la duración:
with sr.AudioFile("audio.wav") as fuente:
audio = reconocedor.record(
fuente,
duration=10
)
En este caso procesamos aproximadamente los primeros diez segundos.
También podemos indicar desde dónde comenzar:
with sr.AudioFile("audio.wav") as fuente:
audio = reconocedor.record(
fuente,
offset=5,
duration=10
)
Así podemos trabajar con segmentos del audio en lugar de procesar toda la grabación de una sola vez.
Cambiar el idioma del reconocimiento
Uno de los errores más comunes consiste en utilizar un idioma incorrecto.
Para español de España hemos utilizado:
language="es-ES"
Pero puedes cambiarlo según el idioma que esperas reconocer.
Por ejemplo:
language="en-US"
para inglés estadounidense.
El idioma importa porque ayuda al motor a determinar qué palabras son más probables dentro del audio.
Si estás intentando reconocer español utilizando una configuración inglesa, no te sorprendas si aparecen resultados bastante extraños.
Manejo de errores en SpeechRecognition
Cuando desarrollamos una aplicación de reconocimiento de voz debemos asumir que algunas frases no serán reconocidas correctamente.
Dos excepciones aparecen constantemente.
UnknownValueError
except sr.UnknownValueError:
print("No pude entender el audio")
Significa que se recibió audio, pero el motor no pudo interpretarlo correctamente.
Puede ocurrir debido a:
- ruido;
- volumen bajo;
- mala calidad del micrófono;
- pronunciación poco clara;
- varias personas hablando simultáneamente.
RequestError
except sr.RequestError as error:
print(error)
Normalmente está relacionado con un problema al comunicarse con el servicio utilizado.
Por eso nunca conviene escribir un programa real suponiendo que todo reconocimiento será exitoso.
Reconocimiento de voz offline con Python
Hasta ahora hemos utilizado un servicio externo para reconocer las palabras.
Pero surge una pregunta lógica:
¿Podemos reconocer voz sin Internet?
Sí.
Existen diferentes alternativas para realizar reconocimiento de voz offline en Python.
Entre ellas destacan:
- Whisper;
- Vosk;
- PocketSphinx.
Trabajar localmente puede resultar especialmente interesante cuando tenemos requisitos de privacidad o simplemente no queremos depender permanentemente de una conexión.
Reconocimiento de voz con Whisper en Python
Whisper es otra alternativa para realizar transcripción de audio con Python, especialmente cuando trabajamos con archivos y necesitamos reconocimiento multilingüe.
Puedes instalarlo utilizando:
pip install -U openai-whisper
Whisper también necesita FFmpeg instalado en el sistema para manejar diferentes formatos de audio.
Una vez configurado, un ejemplo sencillo sería:
import whisper
modelo = whisper.load_model("turbo")
resultado = modelo.transcribe(
"audio.mp3",
language="es"
)
print(resultado["text"])
La primera vez que utilizamos un modelo será necesario descargar sus archivos.
Después, el procesamiento puede realizarse localmente en nuestro equipo, sin tener que enviar cada grabación a un servicio remoto.
Esto hace que Whisper resulte interesante para:
- podcasts;
- entrevistas;
- clases grabadas;
- reuniones;
- vídeos;
- subtítulos;
- grandes cantidades de archivos.
¿Qué modelo de Whisper utilizar?
Whisper dispone de diferentes modelos y elegir uno implica normalmente equilibrar velocidad, consumo de recursos y precisión.
No siempre necesitas utilizar el modelo más pesado.
Para experimentar en un ordenador normal puedes comenzar con un modelo pequeño o con turbo y comprobar si la precisión obtenida resulta suficiente para tu proyecto.
Por ejemplo:
modelo = whisper.load_model("turbo")
Luego:
resultado = modelo.transcribe("entrevista.mp3")
Y obtenemos el texto mediante:
print(resultado["text"])
Para transcripciones largas, esta solución puede resultar mucho más apropiada que el pequeño ejemplo con micrófono que vimos al comienzo.
SpeechRecognition vs Whisper: ¿cuál utilizar?
Llegados a este punto quizá tengas una duda bastante razonable:
¿SpeechRecognition o Whisper?
Depende de lo que estés desarrollando.
| Necesidad | Opción recomendada |
|---|---|
| Aprender reconocimiento de voz | SpeechRecognition |
| Proyecto sencillo con micrófono | SpeechRecognition |
| Comandos de voz | SpeechRecognition |
| Transcribir MP3 o grabaciones | Whisper |
| Audio largo | Whisper |
| Procesamiento local | Whisper o Vosk |
| Dispositivos con recursos limitados | Vosk |
| Prototipo rápido | SpeechRecognition |
SpeechRecognition destaca por su facilidad de uso.
Whisper resulta especialmente atractivo cuando el objetivo principal es realizar transcripciones de archivos con modelos modernos.
No existe una única biblioteca correcta para todos los proyectos.
¿Qué es Vosk y cuándo utilizarlo?
Vosk es otra alternativa interesante para realizar reconocimiento offline.
Una de sus ventajas es que puede trabajar con modelos relativamente pequeños, por lo que resulta útil cuando queremos ejecutar reconocimiento local sin utilizar modelos demasiado pesados.
Puedes instalar la biblioteca con:
pip install vosk
Después necesitarás descargar un modelo correspondiente al idioma que quieras reconocer.
Vosk puede resultar interesante para:
- Raspberry Pi;
- aplicaciones locales;
- dispositivos con recursos limitados;
- comandos de voz offline;
- sistemas donde la privacidad sea importante.
Si tu objetivo es experimentar por primera vez, comenzaría con SpeechRecognition.
Si necesitas transcripción más avanzada, probaría Whisper.
Y si buscas reconocimiento offline ligero, evaluaría Vosk.
Cómo mejorar el reconocimiento de voz
No importa qué motor utilices: la calidad de entrada sigue siendo fundamental.
Puedes aplicar varias recomendaciones.
Reduce el ruido de fondo
El sonido ambiental puede hacer que el sistema confunda palabras.
Siempre que sea posible utiliza un espacio relativamente silencioso.
Utiliza un buen micrófono
No necesariamente necesitas comprar un micrófono profesional, pero un dispositivo extremadamente malo puede limitar incluso al mejor modelo.
Configura correctamente el idioma
Si sabes que el usuario hablará español, indícalo explícitamente cuando el motor lo permita.
Calibra el ruido ambiental
Con SpeechRecognition puedes utilizar:
reconocedor.adjust_for_ambient_noise(fuente)
Es una pequeña modificación que puede ayudar mucho cuando utilizamos un micrófono.
Prueba con diferentes voces
No pruebes tu aplicación únicamente contigo mismo.
Si el proyecto será utilizado por otras personas, prueba diferentes acentos, velocidades de habla, edades y tonos de voz.
Un programa que solamente entiende perfectamente a su desarrollador tiene un pequeño problema de ego.
Problemas comunes al hacer reconocimiento de voz en Python
Veamos algunos problemas que probablemente encontrarás tarde o temprano.
No module named speech_recognition
Si aparece:
ModuleNotFoundError: No module named 'speech_recognition'
instala la dependencia:
pip install SpeechRecognition
Si tienes varias instalaciones de Python:
python -m pip install SpeechRecognition
PyAudio no está instalado
Si el problema aparece al utilizar:
sr.Microphone()
comprueba la instalación de PyAudio.
pip install pyaudio
También verifica que el sistema operativo haya concedido permisos de micrófono a la terminal o al editor desde el que ejecutas Python.
El programa no entiende mi voz
Primero prueba:
reconocedor.adjust_for_ambient_noise(
fuente,
duration=1
)
Después verifica:
- micrófono correcto;
- volumen;
- ruido ambiental;
- idioma configurado;
- conexión a Internet si utilizas un servicio online.
El micrófono equivocado está seleccionado
Puedes listar los dispositivos disponibles:
for indice, nombre in enumerate(
sr.Microphone.list_microphone_names()
):
print(indice, nombre)
Después selecciona uno mediante su índice:
with sr.Microphone(device_index=1) as fuente:
audio = reconocedor.listen(fuente)
Cambia 1 por el índice correspondiente a tu dispositivo.
Ejemplo completo de reconocimiento de voz en Python
Terminemos reuniendo varios conceptos en un programa más completo.
import speech_recognition as sr
reconocedor = sr.Recognizer()
def escuchar():
with sr.Microphone() as fuente:
print("Ajustando micrófono...")
reconocedor.adjust_for_ambient_noise(
fuente,
duration=1
)
print("Habla ahora:")
try:
audio = reconocedor.listen(
fuente,
timeout=5,
phrase_time_limit=10
)
except sr.WaitTimeoutError:
print("No detecté ninguna voz")
return None
try:
texto = reconocedor.recognize_google(
audio,
language="es-ES"
)
return texto.lower()
except sr.UnknownValueError:
print("No pude entender el audio")
except sr.RequestError as error:
print("Error del servicio:", error)
return None
while True:
texto = escuchar()
if texto is None:
continue
print("Has dicho:", texto)
if "terminar" in texto:
print("Programa finalizado")
break
elif "hola" in texto:
print("¡Hola!")
elif "python" in texto:
print("Python también me gusta")
else:
print("Frase reconocida correctamente")
Este ejemplo incorpora:
- captura desde el micrófono;
- calibración de ruido;
- tiempo máximo de espera;
- reconocimiento en español;
- manejo de errores;
- comandos;
- escucha repetida.
Ya tenemos una base suficientemente buena para comenzar a desarrollar proyectos más interesantes.
Ideas de proyectos de reconocimiento de voz con Python
Una vez comprendido el funcionamiento básico, puedes utilizar estos conocimientos para construir proyectos reales.
Por ejemplo:
Asistente personal
Puedes reconocer órdenes como:
abre Google
qué hora es
abre mi editor
y ejecutar diferentes funciones dependiendo del comando.
Sistema de dictado
Captura la voz y guarda automáticamente el resultado dentro de un archivo:
with open(
"transcripcion.txt",
"a",
encoding="utf-8"
) as archivo:
archivo.write(texto + "\n")
Así puedes construir un pequeño dictado por voz.
Transcriptor de entrevistas
Utiliza Whisper para procesar grabaciones completas y guardar automáticamente el resultado.
Control de aplicaciones
Puedes combinar reconocimiento de voz con otras bibliotecas de Python para abrir programas, automatizar tareas o controlar diferentes partes del sistema.
Generador de subtítulos
Whisper puede formar parte de un programa encargado de transcribir el audio de vídeos para posteriormente generar subtítulos.
Como puedes ver, convertir voz en texto solamente es el primer paso.
Lo realmente interesante comienza cuando utilizamos ese texto dentro de otras aplicaciones.
Preguntas frecuentes sobre reconocimiento de voz con Python
¿Cuál es la mejor biblioteca de reconocimiento de voz para Python?
Depende del proyecto. SpeechRecognition es una excelente opción para comenzar y desarrollar prototipos sencillos, mientras que Whisper resulta muy interesante para transcribir archivos y Vosk para reconocimiento local ligero.
¿Python puede convertir voz en texto?
Sí. Puedes capturar audio desde el micrófono o cargar una grabación y utilizar un motor de reconocimiento para obtener el texto correspondiente.
¿Se puede hacer reconocimiento de voz en Python sin Internet?
Sí. Herramientas como Whisper, Vosk y PocketSphinx permiten desarrollar soluciones que procesan el audio localmente una vez instalados los componentes y modelos necesarios.
¿SpeechRecognition funciona en español?
Sí. Cuando utilices un motor compatible puedes especificar el idioma correspondiente.
Por ejemplo:
texto = reconocedor.recognize_google(
audio,
language="es-ES"
)
¿Cómo puedo reconocer voz desde el micrófono?
Con SpeechRecognition puedes utilizar sr.Microphone() como fuente y Recognizer.listen() para capturar el audio.
with sr.Microphone() as fuente:
audio = reconocedor.listen(fuente)
Después procesas ese audio con el motor que hayas elegido.
¿Puedo reconocer un archivo MP3 con Python?
Sí, aunque la forma concreta depende de la biblioteca.
Para transcribir directamente formatos como MP3, Whisper resulta especialmente cómodo:
import whisper
modelo = whisper.load_model("turbo")
resultado = modelo.transcribe("audio.mp3")
print(resultado["text"])
¿Qué puedo crear con reconocimiento de voz?
Puedes desarrollar asistentes virtuales, sistemas de dictado, herramientas de accesibilidad, transcriptores, generadores de subtítulos y aplicaciones controladas mediante comandos hablados.
Conclusión
Implementar reconocimiento de voz en Python puede ser mucho más sencillo de lo que parece inicialmente. Con SpeechRecognition podemos comenzar escuchando el micrófono y convirtiendo nuestras primeras frases en texto con muy pocas líneas de código.
A partir de esa base podemos crear comandos de voz, procesar archivos, desarrollar pequeños asistentes y mejorar la precisión ajustando el sistema al ruido ambiental.
Para proyectos centrados en transcripciones también tenemos alternativas como Whisper, mientras que herramientas como Vosk permiten explorar escenarios donde necesitamos reconocimiento local y menor dependencia de servicios externos.
¿El siguiente paso? Prueba primero el ejemplo básico con tu micrófono. Cuando funcione, añade dos o tres comandos propios. Es una forma sencilla de pasar de copiar código a construir tu primer proyecto real de reconocimiento de voz con Python.