1-7. Transforma tu audio a texto
7. Transforma tu Audio a Texto - Los "Oídos" de tu Asistente
Explicación para principiantes:
Objetivo de esta lección:
Configurar el reconocimiento de voz
Capturar audio del micrófono
Convertir audio en texto
Manejar errores comunes
Analogía:
Piensa en esto como enseñarle a un amigo extranjero a entender español:
Tu voz = Sonidos en español
speech_recognition = Amigo que está aprendiendo
Texto = Lo que tu amigo escribe después de entenderte
📦 Paso 3: Instalar la Librería de Reconocimiento de Voz
¿Qué es speech_recognition?
Es una librería que actúa como traductor de voz a texto. Usa inteligencia artificial de Google (gratis) para entender lo que dices.
Instalación paso a paso:
Método 1: Usando la Terminal de VSCode (Recomendado)
Abre la terminal: View → Terminal o presiona Ctrl + Ñ
Escribe este comando:
bash
python -m pip install speechrecognition
Presiona Enter y espera a que termine
Método 2: Usando CMD/Command Prompt
Presiona Windows + R, escribe cmd y presiona Enter
Escribe:
bash
python -m pip install speechrecognition
¿Qué deberías ver?
text
Collecting speechrecognition
Downloading SpeechRecognition-3.10.0-py3-none-any.whl
Installing collected packages: speechrecognition
Successfully installed speechrecognition-3.10.0
Problema común: Si ves "pip no se reconoce", revisa la lección 2 sobre "Add Python to PATH".
Solución Directa para Python 3.10
Ya que tienes Python 3.10, podemos instalar PyAudio directamente sin usar pipwin. El error que ves es porque pipwin intenta buscar en una página que ya no existe.
Método 1: Instalación Directa (MÁS FÁCIL)
Simplemente ejecuta:
pip install pyaudiopython -m pip install pyaudioSi esto falla (lo cual es posible en Windows), usa el método 2.
Codio (o cualquier entorno Python):
import speech_recognition as sr
listener = sr.Recognizer()
with sr.Microphone() as source:
print('Escuchando...')
# Ajustar para ruido ambiental
listener.adjust_for_ambient_noise(source)
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
print('Texto reconocido:', text)
except Exception as e:
print('No pude entenderlo bien, repítelo por favor')
print('Error:', e)🔧 Correcciones realizadas:
Identación del listen: El método listen() debe estar dentro del bloque with, no después.
Ajuste por ruido: Agregué listener.adjust_for_ambient_noise(source) para mejorar la precisión.
Variable e en el except: Moví print(e) dentro del bloque except, ya que fuera no está definida.
Mensaje más claro: Agregué "Texto reconocido:" antes del resultado.
Identación del listen: El método listen() debe estar dentro del bloque with, no después.
Ajuste por ruido: Agregué listener.adjust_for_ambient_noise(source) para mejorar la precisión.
Variable e en el except: Moví print(e) dentro del bloque except, ya que fuera no está definida.
Mensaje más claro: Agregué "Texto reconocido:" antes del resultado.
📦 Requisitos en Codio:
Ejecuta esto en la terminal de Codio primero:
pip install SpeechRecognition pyaudioNota para Codio: Si pyaudio falla, puedes usar el reconocimiento con archivos de audio o instalar las dependencias del sistema:
sudo apt-get update
sudo apt-get install portaudio19-dev python3-pyaudio
pip install pyaudioErrores en el código original que he corregido:
Indentación incorrecta en la línea del print('Escuchando...')
Falta de indentación en el bloque try-except
El print(e) estaba fuera del except (no tendría sentido)
Faltaba la f en el print para mostrar el texto correctamente
Indentación incorrecta en la línea del print('Escuchando...')
Falta de indentación en el bloque try-except
El print(e) estaba fuera del except (no tendría sentido)
Faltaba la f en el print para mostrar el texto correctamente
Para detener el programa:
Como es un bucle infinito, para terminar el programa debes presionar:
Ctrl + C en la terminal
Cerrar la ventana de ejecución
Tutorial de Reconocimiento de Voz en Python
📋 ¿Para qué sirve este código?
Este programa permite convertir voz en texto usando Python. Es útil para:
Crear asistentes de voz
Transcribir reuniones o entrevistas
Desarrollar sistemas de comandos por voz
Hacer accesibles aplicaciones para personas con discapacidad visual
Automatizar tareas mediante comandos hablados
Crear asistentes de voz
Transcribir reuniones o entrevistas
Desarrollar sistemas de comandos por voz
Hacer accesibles aplicaciones para personas con discapacidad visual
Automatizar tareas mediante comandos hablados
🔍 Explicación línea por línea
1. Importar la librería
import speech_recognition as sr
Importamos la librería speech_recognition que nos permite trabajar con reconocimiento de voz. La abreviamos como sr por convención.
import speech_recognition as sr
speech_recognition que nos permite trabajar con reconocimiento de voz. La abreviamos como sr por convención.2. Crear el reconocedor
listener = sr.Recognizer()
Creamos un objeto Recognizer() que será el encargado de procesar el audio y convertirlo a texto.
listener = sr.Recognizer()
Recognizer() que será el encargado de procesar el audio y convertirlo a texto.3. Acceder al micrófono
with sr.Microphone() as source:
Abrimos el micrófono como fuente de audio. El bloque with asegura que el micrófono se cierre correctamente después de usarlo.
with sr.Microphone() as source:
with asegura que el micrófono se cierre correctamente después de usarlo.4. Mensaje de inicio
print('Escuchando...')
Indicamos al usuario que el programa está listo para escuchar.
print('Escuchando...')
5. Ajuste por ruido ambiental
listener.adjust_for_ambient_noise(source)
El programa escucha el ruido de fondo durante 1 segundo y ajusta los umbrales para filtrarlo. Esto mejora la precisión.
listener.adjust_for_ambient_noise(source)
6. Grabar el audio
audio = listener.listen(source, phrase_time_limit=5)
Graba audio desde el micrófono
phrase_time_limit=5: máximo 5 segundos de grabación
Detiene la grabación cuando detecta silencio o alcanza el límite
audio = listener.listen(source, phrase_time_limit=5)
Graba audio desde el micrófono
phrase_time_limit=5: máximo 5 segundos de grabación
Detiene la grabación cuando detecta silencio o alcanza el límite
7. Procesar el audio
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
recognize_google(): envía el audio a los servidores de Google
language='es-US': especifica que el audio está en español (EE.UU.)
Devuelve el texto reconocido
try: print('Reconociendo...') text = listener.recognize_google(audio, language='es-US')
recognize_google(): envía el audio a los servidores de Google
language='es-US': especifica que el audio está en español (EE.UU.)
Devuelve el texto reconocido
8. Mostrar resultado
print('Texto reconocido:', text)
Muestra en pantalla lo que se ha reconocido.
print('Texto reconocido:', text)
9. Manejo de errores
except Exception as e:
print('No pude entenderlo bien, repítelo por favor')
print('Error:', e)
Si algo sale mal (audio confuso, sin conexión, etc.), mostramos un mensaje amigable y el error técnico.
except Exception as e: print('No pude entenderlo bien, repítelo por favor') print('Error:', e)
🛠️ Requisitos de instalación
En tu computadora:
pip install SpeechRecognition
pip install pyaudio
pip install SpeechRecognition pip install pyaudio
En Codio (sistema Linux):
# Instalar dependencias del sistema
sudo apt-get update
sudo apt-get install portaudio19-dev python3-pyaudio
# Instalar librerías Python
pip install SpeechRecognition pyaudio
# Instalar dependencias del sistema sudo apt-get update sudo apt-get install portaudio19-dev python3-pyaudio # Instalar librerías Python pip install SpeechRecognition pyaudio
🚀 Cómo usarlo
Ejecuta el programa
Habla claramente al micrófono cuando veas "Escuchando..."
Espera el resultado
Ejecuta el programa
Habla claramente al micrófono cuando veas "Escuchando..."
Espera el resultado
💡 Posibles mejoras
Puedes modificar:
phrase_time_limit: para grabar más o menos tiempo
language: para otros idiomas ('en-US', 'fr-FR', 'es-ES')
El motor de reconocimiento (Google, Sphinx, Bing, etc.)
phrase_time_limit: para grabar más o menos tiempo
language: para otros idiomas ('en-US', 'fr-FR', 'es-ES')
El motor de reconocimiento (Google, Sphinx, Bing, etc.)
⚠️ Notas importantes
Se requiere conexión a internet (usa el servicio de Google)
Habla claro y a velocidad normal
Evita ambientes con mucho ruido
El micrófono debe estar funcionando correctamente
Se requiere conexión a internet (usa el servicio de Google)
Habla claro y a velocidad normal
Evita ambientes con mucho ruido
El micrófono debe estar funcionando correctamente
📝 Ejemplo de salida
Escuchando...
Reconociendo...
Texto reconocido: hola mundo cómo estás
Escuchando... Reconociendo... Texto reconocido: hola mundo cómo estás
¿Cómo funciona el flujo del bucle?
Iteración 1: Escucho → "Hola mundo" → Reconozco → Imprimo "Hola mundo"
Iteración 2: Escucho → "¿Cómo estás?" → Reconozco → Imprimo "¿Cómo estás?"
Iteración 3: Escucho → (ruido de fondo) → Error → "No pude entenderlo"
Iteración 4: Escucho → "Adiós" → Reconozco → Imprimo "Adiós"
...y así hasta que el usuario detenga el programa (Ctrl+C)
Iteración 1: Escucho → "Hola mundo" → Reconozco → Imprimo "Hola mundo"
Iteración 2: Escucho → "¿Cómo estás?" → Reconozco → Imprimo "¿Cómo estás?"
Iteración 3: Escucho → (ruido de fondo) → Error → "No pude entenderlo"
Iteración 4: Escucho → "Adiós" → Reconozco → Imprimo "Adiós"
...y así hasta que el usuario detenga el programa (Ctrl+C)
while True:
while True:🔧 Código corregido
import speech_recognition as sr
listener = sr.Recognizer()
while True:
with sr.Microphone() as source:
print('Escuchando...')
# Ajustar para ruido ambiental
listener.adjust_for_ambient_noise(source)
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
print('Texto reconocido:', text)
# Opción para salir del bucle
if text.lower() == "salir":
print("¡Hasta luego!")
break
except Exception as e:
print('No pude entenderlo bien, repítelo por favor')
print('Error:', e)
import speech_recognition as sr listener = sr.Recognizer() while True: with sr.Microphone() as source: print('Escuchando...') # Ajustar para ruido ambiental listener.adjust_for_ambient_noise(source) audio = listener.listen(source, phrase_time_limit=5) try: print('Reconociendo...') text = listener.recognize_google(audio, language='es-US') print('Texto reconocido:', text) # Opción para salir del bucle if text.lower() == "salir": print("¡Hasta luego!") break except Exception as e: print('No pude entenderlo bien, repítelo por favor') print('Error:', e)
🔄 ¿Qué es while True y cómo funciona?
Definición
while True crea un bucle infinito - un bloque de código que se ejecuta repetidamente sin detenerse automáticamente.
while True crea un bucle infinito - un bloque de código que se ejecuta repetidamente sin detenerse automáticamente.En este contexto:
El programa ahora:
Escucha continuamente una frase tras otra
No se detiene después del primer reconocimiento
Sigue ejecutándose hasta que lo detengamos manualmente
Escucha continuamente una frase tras otra
No se detiene después del primer reconocimiento
Sigue ejecutándose hasta que lo detengamos manualmente
Flujo de ejecución:
Inicio del programa
↓
while True (comienza el bucle)
↓
Escucha → Reconoce → Muestra texto
↓
(vuelve a empezar)
↓
Escucha → Reconoce → Muestra texto
↓
(vuelve a empezar)
↓
... (así infinitamente)
Inicio del programa
↓
while True (comienza el bucle)
↓
Escucha → Reconoce → Muestra texto
↓
(vuelve a empezar)
↓
Escucha → Reconoce → Muestra texto
↓
(vuelve a empezar)
↓
... (así infinitamente)🎯 Ventajas del bucle infinito aquí
Diálogo continuo: Puedes hablar múltiples frases sin reiniciar el programa
Experiencia tipo asistente: Como hablar con Siri o Alexa
Persistencia: Sigue funcionando hasta que decidas salir
Diálogo continuo: Puedes hablar múltiples frases sin reiniciar el programa
Experiencia tipo asistente: Como hablar con Siri o Alexa
Persistencia: Sigue funcionando hasta que decidas salir
🛑 ¿Cómo detenerlo?
Opción 1: Usar la palabra "salir" (implementada en el código)
if text.lower() == "salir":
print("¡Hasta luego!")
break # La palabra clave break rompe el bucle
if text.lower() == "salir": print("¡Hasta luego!") break # La palabra clave break rompe el bucle
Opción 2: Interrupción manual
Presiona Ctrl + C en la terminal para forzar la detención
Ctrl + C en la terminal para forzar la detenciónOpción 3: Cerrar la ventana
Si estás en un IDE, cierra la ventana de ejecución
📝 Ejemplo de uso con while True
Escuchando...
Reconociendo...
Texto reconocido: hola cómo estás
Escuchando...
Reconociendo...
Texto reconocido: cuál es tu nombre
Escuchando...
Reconociendo...
Texto reconocido: salir
¡Hasta luego!
(El programa termina)
Escuchando... Reconociendo... Texto reconocido: hola cómo estás Escuchando... Reconociendo... Texto reconocido: cuál es tu nombre Escuchando... Reconociendo... Texto reconocido: salir ¡Hasta luego! (El programa termina)
⚠️ Precaución con while True
Consume recursos si no hay pausas entre iteraciones
Puede colgar el programa si no hay forma de salir
Siempre incluye una condición de salida (como break o Ctrl+C)
Consume recursos si no hay pausas entre iteraciones
Puede colgar el programa si no hay forma de salir
Siempre incluye una condición de salida (como break o Ctrl+C)
💡 Mejora adicional: Pausa entre reconocimientos
Para no saturar el procesador, puedes agregar una pequeña pausa:
import speech_recognition as sr
import time # Importar time para usar sleep
listener = sr.Recognizer()
while True:
with sr.Microphone() as source:
print('Escuchando...')
listener.adjust_for_ambient_noise(source)
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
print('Texto reconocido:', text)
if text.lower() == "salir":
print("¡Hasta luego!")
break
except Exception as e:
print('No pude entenderlo bien, repítelo por favor')
time.sleep(0.5) # Pequeña pausa de 0.5 segundos
¡El while True transforma tu programa en un asistente de voz continuo!
import speech_recognition as sr import time # Importar time para usar sleep listener = sr.Recognizer() while True: with sr.Microphone() as source: print('Escuchando...') listener.adjust_for_ambient_noise(source) audio = listener.listen(source, phrase_time_limit=5) try: print('Reconociendo...') text = listener.recognize_google(audio, language='es-US') print('Texto reconocido:', text) if text.lower() == "salir": print("¡Hasta luego!") break except Exception as e: print('No pude entenderlo bien, repítelo por favor') time.sleep(0.5) # Pequeña pausa de 0.5 segundos
while True transforma tu programa en un asistente de voz continuo! ❓ Cuestionario de Repaso
Pregunta 1:
¿Qué hace la línea import speech_recognition as sr?
A) Crea un nuevo archivo llamado sr
B) Importa la librería y le da el alias "sr"
C) Elimina la librería speech_recognition
D) Convierte texto a voz automáticamente
Respuesta correcta: B
Explicación: as sr crea un "apodo" para la librería, permitiéndonos escribir sr.Recognizer() en lugar de speech_recognition.Recognizer().
Pregunta 2:
¿Para qué sirve el parámetro phrase_time_limit=5?
A) Limita el reconocimiento a 5 palabras
B) Hace que el programa espere 5 segundos antes de escuchar
C) Limita la grabación a máximo 5 segundos
D) Establece el volumen al 5%
Respuesta correcta: C
Explicación: Esto evita que el programa se quede "pegado" grabando indefinidamente si no hablas.
Pregunta 3:
¿Qué estructura usamos para manejar errores al convertir audio a texto?
A) if-else
B) while True
C) try-except
D) for-in
Respuesta correcta: C
Explicación: try-except permite intentar una operación riesgosa (como llamar a Google) y tener un plan B si falla.
Pregunta 4:
Si el programa siempre dice "No entendí", ¿cuál NO es una causa probable?
A) Estás hablando muy bajo
B) Tu micrófono no funciona
C) No tienes conexión a internet
D) El código tiene muchos comentarios
Respuesta correcta: D
Explicación: Los comentarios no afectan la ejecución del programa. Los problemas suelen ser de hardware (micrófono) o conexión (internet).
Pregunta 5:
¿Qué hace listener.adjust_for_ambient_noise()?
A) Sube el volumen del micrófono
B) Calibra el micrófono para filtrar ruido de fondo
C) Apaga otros programas que hagan ruido
D) Cambia el idioma de reconocimiento
Respuesta correcta: B
Explicación: Escucha el ruido ambiente por 1 segundo para luego restarlo del audio, mejorando la claridad de tu voz.
Pregunta 6 (Bonus):
¿Por qué convertimos el texto a minúsculas con .lower()?
A) Para que se vea más bonito
B) Para hacer comparaciones sin importar mayúsculas/minúsculas
C) Para que Google lo entienda mejor
D) Para ahorrar memoria RAM
Respuesta correcta: B
Explicación: "HOLA", "Hola" y "hola" son diferentes para Python. Al convertir todo a minúsculas, 'hola' in texto funcionará sin importar cómo lo digas.
🌟 ¡Lo Lograste!
Has creado la base de tu asistente virtual:
✅ Puede escuchar tu voz a través del micrófono
✅ Puede entender lo que dices (con ayuda de Google)
✅ Puede tomar decisiones basadas en lo que entendió
✅ Es resistente a errores gracias al manejo de excepciones
Próximos pasos:
Ejecuta el código completo y prueba con diferentes frases
Experimenta cambiando el tiempo límite a 3 o 8 segundos
Añade 2 comandos personalizados que te gustaría que entienda
Graba un video corto mostrando tu asistente en acción
💡 Consejo final: Si tienes problemas con PyAudio, no te desanimes. Es el obstáculo más común y una vez que lo superes, todo será más fácil.
https://www.youtube.com/watch?v=Pj9KbAKpQyk
https://www.youtube.com/watch?v=-0tIy8wWtzE
https://www.youtube.com/watch?v=YqSSId7xfwU
https://www.youtube.com/watch?v=MjK-j7YJ5YI
https://www.youtube.com/watch?v=l2G8-iQYfoA
https://www.youtube.com/watch?v=t-YO0XeHczU
Comentarios
Publicar un comentario