4. Código del proyecto

 

Cómo Crear un Asistente Virtual con Python


💻 4. Código del Proyecto - Construyendo el Cerebro del Asistente

Explicación para principiantes:
Ahora vamos a unir todas las librerías como piezas de LEGO para crear un asistente que pueda escuchar, entender y responder. Imagina que estás construyendo un robot paso a paso: primero los sensores (oídos), luego el cerebro (lógica), y finalmente las acciones (respuestas).

Estructura del código:

text

1. Importar herramientas (librerías) ✅

2. Configurar el micrófono y altavoz 🔊

3. Crear funciones (habilidades específicas) 🛠️

4. Programa principal (escuchar y actuar) 🔄


📦 Parte 1: Importar las Librerías - "La Caja de Herramientas"

python

# Estas son nuestras herramientas principales

import speech_recognition as sr        # Para ESCUCHAR (micrófono)

import pyttsx3                         # Para HABLAR (altavoz)

import datetime                        # Para saber la hora/fecha ⏰

import wikipedia                       # Para buscar información 📚

import pywhatkit                       # Para buscar en Google/YouTube 🌐

import pyjokes                         # Para contar chistes 😄

import requests                        # Para obtener datos de internet 📡

import yfinance as yf                  # Para información de bolsa 📈

import pyautogui                       # Para controlar la computadora 🖱️

import operator                        # Para cálculos matemáticos 🧮

import os                              # Para abrir archivos 📁

Explicación visual de las importaciones:

text

┌─────────────────┬─────────────────────────────┐

│   ESCUCHAR      │   HABLAR       │   ACTUAR   │

├─────────────────┼─────────────────┼────────────┤

│ speech_recognition │ pyttsx3      │ pyautogui  │

│                 │                 │ os         │

├─────────────────┼─────────────────┼────────────┤

│      BUSCAR     │    UTILIDADES  │  DATOS     │

├─────────────────┼─────────────────┼────────────┤

│ wikipedia       │ pyjokes         │ yfinance   │

│ pywhatkit       │ operator        │ requests   │

│                 │ datetime        │            │

└─────────────────┴─────────────────┴────────────┘


🔧 Parte 2: Configuración Inicial - "Encender los Dispositivos"

python

# 1. Configurar el RECONOCEDOR DE VOZ (los "oídos")

listener = sr.Recognizer()

# 'listener' es como un asistente que solo escucha


# 2. Configurar el SINTETIZADOR DE VOZ (la "boca")

engine = pyttsx3.init()

# 'engine' es el motor que produce la voz


# 3. Elegir la voz (algunas computadoras tienen varias)

voces = engine.getProperty('voices')

engine.setProperty('voice', voces[2].id)  # Prueba con 0, 1, o 2

🔍 ¿Qué hace cada línea?

  • sr.Recognizer(): Crea un objeto que puede entender voz humana

  • pyttsx3.init(): Inicializa el motor de texto a voz

  • voces[2].id: Selecciona la tercera voz disponible (índice 2)

Prueba rápida de voz:

python

# Prueba en consola para ver cuántas voces tienes

import pyttsx3

engine = pyttsx3.init()

voces = engine.getProperty('voices')

for i, voz in enumerate(voces):

    print(f"Voz {i}: {voz.name}")


🗣️ Parte 3: Funciones Esenciales - "Las Habilidades Básicas"

Función 1: Hablar - "La Boca del Asistente"

python

def hablar(texto):

    """Convierte texto en voz"""

    engine.say(texto)      # Prepara el texto para hablar

    engine.runAndWait()    # Habla y espera a terminar

    print(f"🤖: {texto}")  # También muestra en pantalla

Ejemplo de uso:

python

hablar("Hola, ¿cómo estás?")

# Resultado: Se escucha "Hola, ¿cómo estás?" por los parlantes

Función 2: Escuchar - "Los Oídos del Asistente"

python

def escuchar():

    """Escucha y convierte voz en texto"""

    while True:  # Intenta continuamente hasta entender

        with sr.Microphone() as source:  # Usa el micrófono

            print("🎤 Escuchando... (habla ahora)")

            

            # Escucha por máximo 5 segundos

            audio = listener.listen(source, phrase_time_limit=5)

            

            try:

                # Intenta entender usando Google (gratis)

                texto = listener.recognize_google(audio, language='es-ES').lower()

                print(f"👤 Tú dijiste: {texto}")

                return texto  # Devuelve lo que entendió

                

            except Exception as e:

                # Si no entendió, pide que repitas

                hablar("No te entendí, ¿puedes repetirlo?")

                print(f"Error: {e}")

                continue  # Vuelve a intentar

Visualización del proceso de escucha:

text

Tu voz → Micrófono → Audio digital → Google API → Texto → Python

  🎤        🎤         01010101       🌐 Google     "hola"    💻


🎯 Parte 4: Funciones Específicas - "Las Habilidades Avanzadas"

Habilidad 1: Decir la Hora

python

def dar_hora():

    hora = datetime.datetime.now().strftime('%H:%M')

    hablar(f"Son las {hora}")

    # Si son las 14:30 → "Son las catorce treinta"

Habilidad 2: Buscar en Wikipedia

python

def busqueda_wikipedia(pregunta):

    pregunta = pregunta.replace('busca en wikipedia', '').strip()

    wikipedia.set_lang('es')

    

    try:

        resultado = wikipedia.summary(pregunta, sentences=2)

        hablar(f"Según Wikipedia: {resultado}")

    except:

        hablar("No encontré información sobre eso")

Habilidad 3: Reproducir en YouTube

python

def busqueda_youtube(pedido):

    cancion = pedido.replace('reproduce', '').strip()

    hablar(f"Reproduciendo {cancion} en YouTube")

    pywhatkit.playonyt(cancion)  # Abre YouTube y reproduce

Habilidad 4: Contar un Chiste

python

def chiste():

    try:

        broma = pyjokes.get_joke(language='es')

        hablar(broma)

    except:

        hablar("¿Por qué los programadores confunden Halloween con Navidad? Porque OCT 31 = DEC 25")

Habilidad 5: Calcular Operaciones

python

def calcular():

    hablar("¿Qué quieres calcular? Di algo como '3 más 4'")

    

    # Diccionario para traducir palabras a operadores

    operadores = {

        'más': '+', 'menos': '-', 

        'por': '*', 'dividido': '/'

    }

    

    operacion = escuchar()

    

    # Convierte "3 más 4" → "3 + 4"

    for palabra, simbolo in operadores.items():

        operacion = operacion.replace(palabra, simbolo)

    

    try:

        resultado = eval(operacion)  # ¡Cuidado! eval() puede ser peligroso

        hablar(f"El resultado es {resultado}")

    except:

        hablar("No pude calcular eso")

⚠️ Nota de seguridad: eval() puede ejecutar código peligroso. En un proyecto real, usa una forma más segura.


🧠 Parte 5: Programa Principal - "El Cerebro que Decide"

python

def main():

    hablar("¡Hola! Soy tu asistente virtual. ¿En qué puedo ayudarte?")

    

    while True:  # Bucle infinito para estar siempre disponible

        print("\n" + "="*50)

        print("Esperando tu comando...")

        

        comando = escuchar()

        

        # Si dices "Alexa" o el nombre de tu asistente

        if 'asistente' in comando or 'oye' in comando:

            

            if 'hora' in comando:

                dar_hora()

                

            elif 'wikipedia' in comando:

                busqueda_wikipedia(comando)

                

            elif 'reproduce' in comando:

                busqueda_youtube(comando)

                

            elif 'chiste' in comando:

                chiste()

                

            elif 'calcula' in comando:

                calcular()

                

            elif 'adiós' in comando or 'salir' in comando:

                hablar("Hasta luego, ¡que tengas un buen día!")

                break  # Termina el programa

                

            else:

                hablar("No entendí ese comando. Prueba con: hora, wikipedia, reproduce, chiste o calcula")

        

        elif 'salir' in comando:  # Comando de emergencia

            hablar("Cerrando el programa")

            break


# Ejecutar el programa

if __name__ == "__main__":

    main()


🛠️ Versión Completa Simplificada (Para Empezar)

python

"""

ASISTENTE VIRTUAL BÁSICO - VERSIÓN SIMPLIFICADA

Autor: [Tu Nombre]

Fecha: [Fecha Actual]

"""


# ========== IMPORTAR HERRAMIENTAS ==========

import speech_recognition as sr

import pyttsx3

import datetime


# ========== CONFIGURACIÓN INICIAL ==========

# 1. Oídos del asistente

listener = sr.Recognizer()


# 2. Boca del asistente

engine = pyttsx3.init()


# 3. Probar voces disponibles

voces = engine.getProperty('voices')

engine.setProperty('voice', voces[0].id)  # Primera voz


# ========== FUNCIONES BÁSICAS ==========

def hablar(texto):

    """Hace que el asistente hable"""

    print(f"🤖: {texto}")

    engine.say(texto)

    engine.runAndWait()


def escuchar():

    """Escucha lo que dice el usuario"""

    try:

        with sr.Microphone() as source:

            print("🎤: Escuchando...")

            voz = listener.listen(source)

            texto = listener.recognize_google(voz, language='es-ES')

            texto = texto.lower()

            print(f"👤: {texto}")

            return texto

    except:

        hablar("No te escuché, ¿puedes repetir?")

        return ""


# ========== HABILIDADES DEL ASISTENTE ==========

def saludo():

    """Saluda al usuario"""

    hora = datetime.datetime.now().hour

    if hora < 12:

        hablar("¡Buenos días!")

    elif hora < 19:

        hablar("¡Buenas tardes!")

    else:

        hablar("¡Buenas noches!")


def decir_hora():

    """Dice la hora actual"""

    hora_actual = datetime.datetime.now().strftime("%H:%M")

    hablar(f"Son las {hora_actual}")


# ========== PROGRAMA PRINCIPAL ==========

def main():

    """Función principal del asistente"""

    saludo()

    hablar("Soy tu asistente virtual. Di 'hora' para saber la hora o 'adiós' para salir.")

    

    while True:

        comando = escuchar()

        

        if 'hora' in comando:

            decir_hora()

        elif 'adiós' in comando or 'salir' in comando:

            hablar("¡Hasta luego! Fue un placer ayudarte.")

            break

        elif comando:  # Si hay algún comando

            hablar(f"Dijiste: {comando}. Prueba con 'hora' o 'adiós'")


# ========== EJECUTAR EL PROGRAMA ==========

if __name__ == "__main__":

    main()


📋 Tabla de Comandos para tu Asistente

Comando que dices

Acción del asistente

Función que se ejecuta

"¿Qué hora es?"

Dice la hora actual

dar_hora()

"Busca en Wikipedia Python"

Lee información de Wikipedia

busqueda_wikipedia()

"Reproduce Shakira"

Abre YouTube y reproduce

busqueda_youtube()

"Cuéntame un chiste"

Dice un chiste aleatorio

chiste()

"Calcula 5 más 3"

Realiza la operación

calcular()

"Captura la pantalla"

Toma screenshot

captura_pantalla()

"Salir" o "Adiós"

Termina el programa

quit()


🔧 Personalización Importante

En el código original hay lugares que DEBES cambiar:

python

# 1. Cambia el nombre de tu asistente (línea ~92)

if 'aqui_va_el_nombre_de_tu_asistente' in comando:

# Cambia por:

if 'jarvis' in comando:  # o 'alexa', 'asistente', etc.


# 2. Para el clima, necesitas API Key (obtén una gratis en openweathermap.org)

api_key = 'tu_clave_aqui'  # Reemplaza esto

city_name = 'tu_ciudad'    # Reemplaza esto


# 3. Para capturas de pantalla, cambia la ruta

captura.save('C://Users/TU_USUARIO/Desktop/captura.png')


❓ Cuestionario de Repaso

Pregunta 1:

En la línea engine.setProperty('voice', voces[2].id), ¿qué hace el número 2?

  • A) Selecciona la segunda voz de la lista disponible

  • B) Ajusta el volumen al nivel 2

  • C) Selecciona la tercera voz de la lista (índice 2)

  • D) Establece la velocidad de habla a 2x

Respuesta correcta: C
Explicación: En programación, las listas empiezan en 0, así que voces[0] es la primera, voces[1] la segunda, y voces[2] la tercera.


Pregunta 2:

¿Qué función se encarga de convertir tu voz en texto que Python pueda entender?

  • A) hablar()

  • B) escuchar()

  • C) dar_hora()

  • D) busqueda_wikipedia()

Respuesta correcta: B
Explicación: La función escuchar() usa speech_recognition para capturar audio y convertirlo en texto.


Pregunta 3:

Si quieres que tu asistente diga "Hola mundo", ¿qué función usarías?

  • A) escuchar("Hola mundo")

  • B) hablar("Hola mundo")

  • C) print("Hola mundo")

  • D) engine("Hola mundo")

Respuesta correcta: B
Explicación: hablar() es nuestra función personalizada que usa pyttsx3 para convertir texto a voz.


Pregunta 4:

¿Qué estructura de control mantiene el asistente funcionando continuamente?

  • A) if-else

  • B) for loop

  • C) while True

  • D) try-except

Respuesta correcta: C
Explicación: while True crea un bucle infinito que solo se rompe cuando el usuario dice "salir".


Pregunta 5:

¿Qué hace la línea if '__main__' == __name__: al final del código?

  • A) Verifica si el programa está siendo ejecutado directamente

  • B) Comprueba si el usuario es el principal

  • C) Pregunta el nombre del asistente

  • D) Es un comentario decorativo

Respuesta correcta: A
Explicación: Esta es una convención de Python que permite que el código se ejecute solo cuando el archivo se corre directamente (no cuando se importa como módulo).


Pregunta 6 (Bonus):

¿Por qué usamos try-except en la función escuchar()?

  • A) Para que el programa sea más rápido

  • B) Para manejar errores cuando no se entiende la voz

  • C) Para convertir texto a voz

  • D) Para importar más librerías

Respuesta correcta: B
Explicación: try-except captura errores (como cuando el micrófono no capta bien) y evita que el programa se cierre inesperadamente.


🚀 Próximos Pasos y Mejoras

  1. Ejecuta el código simplificado primero para verificar que funciona

  2. Añade una habilidad a la vez (primero hora, luego Wikipedia, etc.)

  3. Personaliza el nombre de tu asistente

  4. Añade más comandos según tus necesidades

  5. Prueba en un entorno tranquilo para mejor reconocimiento de voz

💡 Consejo: Comienza con la versión simplificada y ve añadiendo funciones gradualmente. ¡Es mejor tener un asistente simple que funcione que uno complejo que no funciona!




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=yJlVqfO2nP0


https://www.youtube.com/watch?v=t-YO0XeHczU


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