13-1-Función Hablar
Construyendo un Asistente de Voz en Python
Introducción
Vamos a construir paso a paso un asistente de voz que pueda:
Darnos la bienvenida
Escuchar lo que decimos
Reconocer nuestro habla
Respondernos en voz alta
📦 Paso 1: Instalación de librerías necesarias
Primero, necesitamos instalar las librerías que utilizaremos:
pip install pyttsx3 speechrecognition pyaudioExplicación:
pyttsx3: Convierte texto a voz (funciona sin internet)speechrecognition: Reconoce el habla y la convierte a textopyaudio: Permite acceder al micrófono (necesario para speechrecognition)
🔧 Paso 2: Importar librerías y configurar el motor de voz
import pyttsx3
import speech_recognition as sr
# Inicializar el motor de texto a voz
engine = pyttsx3.init()¿Qué hace este código?
Importamos las librerías necesarias
Inicializamos el motor que convertirá texto a voz
🔊 Paso 3: Primera función - Hablar
Vamos a crear nuestra primera función que permita al programa hablar:
def hablar(por_hablar):
"""
Función que recibe un texto y lo reproduce en voz alta
"""
engine.say(por_hablar)
engine.runAndWait()
# Probamos la función
hablar('hola')Explicación detallada:
def hablar(por_hablar):- Definimos una función que recibe un parámetro llamadopor_hablarengine.say(por_hablar)- Encola el texto para ser reproducidoengine.runAndWait()- Procesa la cola y reproduce el audio (el programa espera hasta que termine)hablar('hola')- Llamamos a la función y le decimos que diga "hola"
¡Importante! El parámetro por_hablar es dinámico, por lo que podemos hacer que diga cualquier texto.
🎤 Paso 4: Configurar el reconocimiento de voz
Ahora necesitamos configurar el reconocedor de voz:
# Crear un reconocedor de voz
listener = sr.Recognizer()Este objeto será el encargado de escuchar y reconocer lo que decimos.
🎧 Paso 5: Probar el reconocimiento de voz
Vamos a crear un programa simple que escuche y reconozca lo que decimos:
# Configurar el micrófono como fuente de audio
with sr.Microphone() as source:
print('Escuchando...')
# Escuchar con un límite de 5 segundos
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
# Reconocer usando Google Speech Recognition
text = listener.recognize_google(audio, language='es-US')
print(text)
except Exception as e:
print('No pude entenderlo bien, repítelo por favor')
print(e)Explicación paso a paso:
with sr.Microphone() as source:- Abrimos el micrófono como fuente de audiolistener.listen(source, phrase_time_limit=5)- Escuchamos por 5 segundos máximolistener.recognize_google()- Enviamos el audio a Google para reconocimientolanguage='es-US'- Indicamos que el idioma es españoltry...except- Capturamos errores si no entiende lo que decimos
🔄 Paso 6: Integrar el habla con el reconocimiento
Ahora vamos a combinar lo que aprendimos: que el programa hable lo que reconoció:
def hablar(por_hablar):
engine.say(por_hablar)
engine.runAndWait()
# Escuchar y responder
with sr.Microphone() as source:
print('Escuchando...')
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
hablar(text) # ¡Ahora dice lo que reconoció!
print(text)
except Exception as e:
hablar('No pude entenderlo bien, repítelo por favor')
print(e)Diferencia clave: Ahora usamos hablar(text) en lugar de print(text) para que el programa nos responda en voz alta.
🔁 Paso 7: Crear un bucle infinito
Queremos que nuestro asistente esté siempre escuchando, no solo una vez:
while True:
with sr.Microphone() as source:
print('Escuchando...')
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
hablar(text)
print(text)
except Exception as e:
hablar('No pude entenderlo bien, repítelo por favor')
print(e)¿Qué cambió?
while True:crea un bucle infinitoDespués de responder, el programa vuelve a escuchar
👋 Paso 8: Agregar un mensaje de bienvenida
Vamos a crear una función específica para dar la bienvenida:
def bienvenida():
engine.say("Bienvenido de vuelta.")
engine.runAndWait()
# Llamar a la bienvenida
bienvenida()
while True:
with sr.Microphone() as source:
print('Escuchando...')
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
hablar(text)
print(text)
except Exception as e:
hablar('No pude entenderlo bien, repítelo por favor')
print(e)📝 Paso 9: Organizar el código en funciones
Vamos a ordenar todo nuestro código creando una función escuchar():
def escuchar():
while True:
with sr.Microphone() as source:
print('Escuchando...')
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
hablar(text)
print(text)
except Exception as e:
hablar('No pude entenderlo bien, repítelo por favor')
print(e)
# Programa principal
bienvenida()
escuchar()Ventaja: Ahora tenemos código más limpio y organizado con funciones bien definidas.
🎭 Paso 10: Personalizar la voz (opcional)
Podemos cambiar la voz que utiliza nuestro asistente:
# Obtener las voces disponibles
voces = engine.getProperty('voices')
# Cambiar a una voz específica (el índice varía según el sistema)
engine.setProperty('voice', voces[2].id) # Prueba con 0, 1, 2...
def bienvenida():
engine.say("Bienvenido de vuelta.")
engine.runAndWait()
def hablar(por_hablar):
engine.say(por_hablar)
engine.runAndWait()
def escuchar():
while True:
with sr.Microphone() as source:
print('Escuchando...')
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
text = listener.recognize_google(audio, language='es-US')
hablar(text)
print(text)
except Exception as e:
hablar('No pude entenderlo bien, repítelo por favor')
print(e)
# Programa principal
bienvenida()
escuchar()📋 Código completo final
import pyttsx3
import speech_recognition as sr
# Inicializar el motor de texto a voz
engine = pyttsx3.init()
# Configurar voz (opcional)
voces = engine.getProperty('voices')
# Descomenta la línea siguiente para cambiar la voz
# engine.setProperty('voice', voces[2].id) # Ajusta el índice según tu sistema
# Inicializar el reconocedor de voz
listener = sr.Recognizer()
def bienvenida():
"""Da un mensaje de bienvenida"""
engine.say("Bienvenido de vuelta.")
engine.runAndWait()
def hablar(por_hablar):
"""
Convierte texto a voz
Args:
por_hablar (str): El texto que se convertirá en audio
"""
engine.say(por_hablar)
engine.runAndWait()
def escuchar():
"""
Escucha continuamente a través del micrófono y responde en voz alta
"""
while True:
with sr.Microphone() as source:
print('Escuchando...')
# Escuchar por un máximo de 5 segundos
audio = listener.listen(source, phrase_time_limit=5)
try:
print('Reconociendo...')
# Reconocer usando Google Speech Recognition
text = listener.recognize_google(audio, language='es-US')
# Responder en voz alta
hablar(text)
# También mostrar en consola
print(f"Has dicho: {text}")
except Exception as e:
# Si no entiende, pedir que repita
hablar('No pude entenderlo bien, repítelo por favor')
print(f"Error: {e}")
# Programa principal
if __name__ == "__main__":
bienvenida()
escuchar()🎯 Resumen de lo aprendido
| Paso | Función | Propósito |
|---|---|---|
| 1-2 | Importaciones y configuración | Preparar el entorno |
| 3 | hablar() | Convertir texto a voz |
| 4-5 | Reconocimiento básico | Escuchar y convertir voz a texto |
| 6 | Integración | Hablar lo que se reconoció |
| 7 | Bucle infinito | Escuchar continuamente |
| 8 | bienvenida() | Mensaje inicial |
| 9 | escuchar() | Organizar el código |
| 10 | Personalización de voz | Cambiar la voz del asistente |
🚀 Próximos pasos
Ahora que tienes un asistente básico, puedes:
Agregar comandos específicos (ej: "abrir navegador")
Integrar con APIs externas
Mejorar el manejo de errores
Crear una interfaz gráfica
Comentarios
Publicar un comentario