time: para manejar pausas.

 


1. Explicación del código

El código implementa un asistente de voz que escucha comandos, los procesa y responde por voz y texto.

Librerías utilizadas:

  • pyttsx3: para convertir texto a voz (síntesis de voz).

  • speech_recognition as sr: para capturar y reconocer voz.

  • datetime: para obtener fecha y hora.

  • pywhatkit: para buscar y reproducir videos en YouTube.

  • time: para manejar pausas.

Funciones principales:

  1. hablar(texto):
    Convierte un texto en voz usando pyttsx3. Configura voz, velocidad y volumen.

  2. bienvenida():
    Da un mensaje de bienvenida.

  3. mostrar_comandos():
    Muestra en consola los comandos disponibles y también los dice por voz.

  4. busqueda_youtube(busca):
    Extrae el término de búsqueda del comando y usa pywhatkit.playonyt() para abrir YouTube y buscar.

  5. escuchar():
    Es el bucle principal.

    • Escucha con el micrófono.

    • Reconoce el audio con Google Speech Recognition.

    • Procesa comandos como:

      • "adiós""salir": finaliza el programa.

      • "comandos""ayuda": muestra ayuda.

      • "día""fecha""hoy": da la fecha.

      • "hora": da la hora formateada.

      • "busca en youtube": realiza búsqueda en YouTube.

    • Si no entiende, pide repetir.

    • Si hay silencio repetido, sugiere usar comandos.

  6. Ejecución principal:
    Se muestra un mensaje de inicio, se ejecuta bienvenida() y se llama a escuchar().


2. Nombre para el asistente

Siguiendo la estructura de la imagen, el asistente se llama Ava, ya que en el código del image.png se usa:

python
if 'ava' in comando:

Esto indica que el asistente responde al nombre Ava.
El nombre podría ser cualquier otro, pero en la estructura del código original está configurado para activarse con la palabra "ava".


3. Estructura del código de la imagen

El fragmento que muestras en la imagen sería algo así:

python
while True:
    comando = escuchar()

    if 'ava' in comando:
        # Aquí irían las acciones del asistente
        if 'qué hora es' in comando:
            dar_hora()
        elif 'qué día es' in comando:
            dar_día()
        elif 'busca en wikipedia' in comando:
            busqueda_wikipedia(comando)

Esto significa que el asistente solo responde cuando escucha su nombre ("ava") seguido de un comando.


Resumen

  • Nombre del asistente: Ava

  • Función: Asistente de voz que reconoce comandos, responde con voz y texto, y puede dar la hora, fecha, buscar en YouTube y mostrar ayuda.

  • Activación: En la imagen se activa con "ava", aunque en el código mejorado que me diste no está esa condición, sino que escucha todo el tiempo y responde directamente a los comandos.

import pyttsx3
import speech_recognition as sr
import datetime
import pywhatkit
import time

# Inicializar reconocimiento de voz
listener = sr.Recognizer()

def hablar(texto):
    """Convierte texto a voz - Versión optimizada"""
    try:
        engine = pyttsx3.init()
       
        voices = engine.getProperty('voices')
        engine.setProperty('voice', voices[0].id)
        engine.setProperty('rate', 170)
        engine.setProperty('volume', 1)
       
        print(f"🤖: {texto}")
        engine.say(texto)
        engine.runAndWait()
        engine.stop()
    except Exception as e:
        print(f"Error al hablar: {e}")

def bienvenida():
    """Saludo inicial con instrucciones"""
    hablar("Bienvenido de vuelta. Di comandos para ver lo que puedo hacer")

def mostrar_comandos():
    """Muestra los comandos disponibles"""
    print("\n📋 COMANDOS DISPONIBLES:")
    print("  • 'hora' - Te digo la hora")
    print("  • 'fecha', 'día' o 'hoy' - Te digo la fecha")
    print("  • 'busca en youtube [lo que quieras]' - Busca en YouTube")
    print("  • 'comandos' - Muestro esta lista")
    print("  • 'adiós' o 'salir' - Salgo del programa")
    print("-" * 40)
    hablar("Puedes preguntarme la hora, la fecha, o buscar en YouTube")

def busqueda_youtube(busca):
    """
    Toma un comando, extrae el término de búsqueda y lo reproduce en YouTube.
    """
    # Limpiar el comando
    busca = busca.replace('busca en youtube', '').strip()
   
    if not busca:
        hablar("¿Qué quieres que busque en YouTube?")
        return
   
    # Dar retroalimentación de voz
    hablar(f'Buscando {busca} en YouTube')
    # Ejecutar la búsqueda en YouTube
    try:
        pywhatkit.playonyt(busca)
    except Exception as e:
        hablar("No pude realizar la búsqueda en YouTube")
        print(f"Error YouTube: {e}")

def escuchar():
    """Bucle principal con mejor manejo de pausas y tiempo"""
    intentos_fallidos = 0
   
    while True:
        with sr.Microphone() as source:
            try:
                # Ajuste rápido de ruido ambiental
                listener.adjust_for_ambient_noise(source, duration=0.5)
                print("\n🎤 Escuchando... (di 'adiós' para salir)")
               
                # Escuchar con timeout para no bloquear
                audio = listener.listen(source, timeout=3, phrase_time_limit=5)
               
                print("Reconociendo...")
                text = listener.recognize_google(audio, language="es-MX")
                text = text.lower()
               
                # Limpiar acentos
                text = text.replace("á","a").replace("é","e").replace("í","i").replace("ó","o").replace("ú","u")
               
                print(f"👤 Dijiste: {text}")
               
                # Reiniciar contador de intentos fallidos
                intentos_fallidos = 0
               
                # ========== COMANDOS ==========
               
                # Comando para salir
                if "adiós" in text or "adios" in text or "salir" in text or "hasta luego" in text:
                    hablar("Hasta luego, que tengas un buen día")
                    break  # Sale del bucle
               
                # Comando para mostrar ayuda
                elif "comandos" in text or "ayuda" in text or "qué puedes hacer" in text:
                    mostrar_comandos()
               
                # Comando para fecha/día
                elif "dia" in text or "día" in text or "fecha" in text or "hoy" in text:
                    hoy = datetime.datetime.now()
                    respuesta = f"Hoy es {hoy.day} del {hoy.month} del {hoy.year}"
                    print(f"📅 {respuesta}")
                    hablar(respuesta)
               
                # Comando para hora
                elif "hora" in text:
                    ahora = datetime.datetime.now()
                    # Formato más natural
                    if ahora.minute == 0:
                        respuesta = f"Son las {ahora.hour} en punto"
                    elif ahora.minute < 10:
                        respuesta = f"Son las {ahora.hour} con cero {ahora.minute}"
                    else:
                        respuesta = f"Son las {ahora.hour} con {ahora.minute}"
                    print(f"⏰ {respuesta}")
                    hablar(respuesta)
               
                # Comando para YouTube
                elif 'busca en youtube' in text:
                    busqueda_youtube(text)
               
                # Comando no reconocido
                else:
                    hablar("No tengo una respuesta para eso")
                    print("💡 Tip: Di 'comandos' para ver lo que puedo hacer")
               
                # Pequeña pausa después de procesar cada comando
                time.sleep(0.5)
               
            except sr.WaitTimeoutError:
                # Timeout - no se detectó voz
                intentos_fallidos += 1
                if intentos_fallidos >= 3:
                    # Después de 3 silencios, mostrar un tip
                    print("💡 Si necesitas ayuda, di 'comandos'")
                    intentos_fallidos = 0
                continue
               
            except sr.UnknownValueError:
                print("❌ No entendí el audio")
                hablar("No te entendí, ¿puedes repetir?")
                time.sleep(0.5)
               
            except Exception as e:
                print("Error:", e)
                hablar("No pude entender lo que dijiste")
                time.sleep(0.5)

if __name__ == "__main__":
    print("=" * 50)
    print("🤖 ASISTENTE DE VOZ MEJORADO")
    print("=" * 50)
    print("📌 Di 'comandos' para ver todas las opciones")
    print("📌 Di 'adiós' para salir")
    print("-" * 50)
   
    bienvenida()
    escuchar()
   
    print("\n👋 Programa finalizado")

Comentarios

Entradas más populares de este blog

1-7. Transforma tu audio a texto

10. Haz que tu asistente hable

8. NUEVO - Solución si tu micrófono no está captando tu audio