9. NUEVO - Guía de Idiomas disponibles para la librería

 

9. NUEVO - Guía de Idiomas Disponibles para la Librería

Explicación para principiantes:
Tu asistente virtual no solo puede entender español, ¡puede entender más de 60 idiomas y dialectos diferentes! En esta lección, vamos a explorar cómo hacer que tu asistente sea multilingüe. Es como tener un traductor personal integrado en tu código.

Objetivo de esta lección:

  • Entender los códigos de idioma de Google Speech Recognition

  • Configurar tu asistente para diferentes idiomas

  • Crear un asistente que detecte idioma automáticamente

  • Implementar cambio de idioma por comando de voz

Analogía:
Imagina que tu asistente es como un hotel de lujo que tiene recepcionistas que hablan muchos idiomas. Tú decides qué recepcionista atiende según el idioma del huésped.


📚 ¿Por qué son Importantes los Códigos de Idioma?

Cuando usas recognize_google(), le debes decir exactamente qué idioma esperas. Google tiene modelos especializados para cada idioma y dialecto.

python

# Español de España vs Español de México

texto_es = listener.recognize_google(audio, language='es-ES')  # "ordenador"

texto_mx = listener.recognize_google(audio, language='es-MX')  # "computadora"


# Inglés de USA vs Inglés del Reino Unido

texto_us = listener.recognize_google(audio, language='en-US')  # "elevator"

texto_uk = listener.recognize_google(audio, language='en-GB')  # "lift"

Formato del código de idioma:

text

es-ES

│  │

│  └─ País/Región (ES = España)

└─ Idioma (es = español)


🗺️ Mapa Visual de Idiomas Disponibles

🇪🇸 ESPAÑOL (14 variantes)

text

Español Global:

├── es-ES   → España (castellano)

├── es-MX   → México

├── es-AR   → Argentina

├── es-CO   → Colombia

├── es-PE   → Perú

├── es-CL   → Chile

├── es-VE   → Venezuela

├── es-US   → Estados Unidos

└── ... (6 más)

Diferencia práctica:

python

# Mismo audio, diferente interpretación según país:

Audio: "Voy a tomar el auto para ir al trabajo"


es-ES: "Voy a coger el coche para ir al trabajo"

es-MX: "Voy a tomar el carro para ir al trabajo"

es-AR: "Voy a agarrar el auto para ir al trabajo"

🇬🇧 INGLÉS (7 variantes)

text

Inglés Global:

├── en-US   → Estados Unidos

├── en-GB   → Reino Unido

├── en-AU   → Australia

├── en-CA   → Canadá

├── en-IN   → India

├── en-NZ   → Nueva Zelanda

└── en-ZA   → Sudáfrica

🇨🇳 CHINO (4 variantes)

text

Chino Global:

├── zh-CN   → Chino Mandarín (simplificado)

├── zh-TW   → Taiwán (tradicional)

├── zh-HK   → Hong Kong (simplificado)

└── zh-yue  → Cantonés (tradicional)

🌍 OTROS IDIOMAS PRINCIPALES

text

Europa:

├── fr-FR   → Francés

├── de-DE   → Alemán

├── it-IT   → Italiano

├── pt-PT   → Portugués

├── pt-BR   → Portugués brasileño

└── ru      → Ruso


América:

├── es-*    → (todos los españoles)

└── pt-BR   → Portugués brasileño


Asia:

├── ja      → Japonés

├── ko      → Coreano

├── ar-*    → Árabe (10 variantes)

└── id      → Indonesio


💻 Implementación Práctica: Asistente Multilingüe

Versión 1: Asistente con Idioma Fijo

python

import speech_recognition as sr


# Configuración básica con idioma fijo

def asistente_espanol():

    listener = sr.Recognizer()

    

    with sr.Microphone() as source:

        audio = listener.listen(source)

        

        # ESPAÑOL de España

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

        print(f"🇪🇸 Entendí: {texto}")

        

        # ESPAÑOL de México

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

        print(f"🇲🇽 Entendí: {texto}")

        

        # INGLÉS de USA

        texto = listener.recognize_google(audio, language='en-US')

        print(f"🇺🇸 Entendí: {texto}")

Versión 2: Asistente que Detecta Idioma Automáticamente

python

import speech_recognition as sr


class AsistenteMultilingue:

    def __init__(self):

        self.listener = sr.Recognizer()

        self.idioma_actual = 'es-ES'  # Idioma por defecto

        

        # Diccionario de idiomas disponibles

        self.idiomas = {

            'español': 'es-ES',

            'español mexicano': 'es-MX',

            'inglés': 'en-US',

            'inglés británico': 'en-GB',

            'francés': 'fr-FR',

            'alemán': 'de-DE',

            'portugués': 'pt-BR',

            'italiano': 'it-IT'

        }

    

    def cambiar_idioma(self, nombre_idioma):

        """Cambia el idioma del asistente"""

        if nombre_idioma in self.idiomas:

            self.idioma_actual = self.idiomas[nombre_idioma]

            print(f"✅ Idioma cambiado a: {nombre_idioma}")

            return True

        else:

            print(f"❌ Idioma no disponible: {nombre_idioma}")

            return False

    

    def escuchar(self):

        """Escucha en el idioma actual"""

        with sr.Microphone() as source:

            print(f"🎤 Escuchando en {self.idioma_actual}...")

            audio = self.listener.listen(source)

            

            try:

                texto = self.listener.recognize_google(

                    audio, 

                    language=self.idioma_actual

                )

                print(f"📝 Entendí: {texto}")

                return texto.lower()

            except:

                print("❌ No entendí")

                return ""


# Uso del asistente multilingüe

asistente = AsistenteMultilingue()


# Cambiar a diferentes idiomas

asistente.cambiar_idioma('inglés')  # Ahora entiende inglés

asistente.cambiar_idioma('francés')  # Ahora entiende francés

asistente.cambiar_idioma('español mexicano')  # Español de México

Versión 3: Asistente que Reconoce el Idioma Hablado

python

import speech_recognition as sr


def detectar_idioma(audio):

    """Intenta detectar en qué idioma se está hablando"""

    listener = sr.Recognizer()

    

    # Lista de idiomas a probar (de más probable a menos)

    idiomas_a_probar = [

        ('es-ES', 'Español'),

        ('es-MX', 'Español Mexicano'),

        ('en-US', 'Inglés'),

        ('fr-FR', 'Francés'),

        ('pt-BR', 'Portugués'),

        ('de-DE', 'Alemán'),

        ('it-IT', 'Italiano')

    ]

    

    for codigo_idioma, nombre_idioma in idiomas_a_probar:

        try:

            texto = listener.recognize_google(audio, language=codigo_idioma)

            # Si no hubo error, asumimos que es el idioma correcto

            return codigo_idioma, nombre_idioma, texto

        except:

            continue  # Probamos el siguiente idioma

    

    return None, None, ""  # No se pudo detectar


# Uso:

listener = sr.Recognizer()

with sr.Microphone() as source:

    audio = listener.listen(source)

    

    codigo, nombre, texto = detectar_idioma(audio)

    

    if texto:

        print(f"🌐 Idioma detectado: {nombre}")

        print(f"📝 Texto: {texto}")

    else:

        print("❌ No se pudo detectar el idioma")


🎮 Juego de Prueba: "Adivina el Idioma"

python

"""

JUEGO: Adivina en qué idioma estoy hablando

El asistente detecta automáticamente y te dice si adivinaste

"""


import speech_recognition as sr

import random


class JuegoIdiomas:

    def __init__(self):

        self.listener = sr.Recognizer()

        

        # Idiomas para el juego

        self.idiomas_juego = {

            'es-ES': 'Español',

            'en-US': 'Inglés Americano',

            'fr-FR': 'Francés',

            'it-IT': 'Italiano',

            'pt-BR': 'Portugués Brasileño'

        }

    

    def jugar(self):

        """Juego principal"""

        print("=" * 50)

        print("        JUEGO: ADIVINA EL IDIOMA")

        print("=" * 50)

        print("Instrucciones:")

        print("1. Habla una frase en CUALQUIER idioma de la lista")

        print("2. Yo intentaré adivinar en qué idioma hablaste")

        print("3. Idiomas posibles:")

        

        for i, (codigo, nombre) in enumerate(self.idiomas_juego.items(), 1):

            print(f"   {i}. {nombre}")

        

        print("=" * 50)

        

        puntos = 0

        rondas = 3

        

        for ronda in range(1, rondas + 1):

            print(f"\n🎮 RONDA {ronda} de {rondas}")

            print("🎤 Habla ahora (máximo 5 segundos)...")

            

            with sr.Microphone() as source:

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

            

            # Intentar reconocer en cada idioma

            resultados = {}

            for codigo, nombre in self.idiomas_juego.items():

                try:

                    texto = self.listener.recognize_google(audio, language=codigo)

                    resultados[codigo] = (nombre, texto)

                except:

                    continue

            

            if resultados:

                # El idioma con texto más largo probablemente es el correcto

                idioma_ganador = max(resultados.keys(), 

                                   key=lambda x: len(resultados[x][1]))

                nombre_idioma, texto = resultados[idioma_ganador]

                

                print(f"🤖 Creo que hablaste en: {nombre_idioma}")

                print(f"📝 Entendí: '{texto}'")

                

                # Preguntar al usuario si acertamos

                respuesta = input("¿Acerte? (sí/no): ").lower()

                if respuesta in ['sí', 'si', 's', 'yes', 'y']:

                    puntos += 1

                    print("✅ ¡Punto para mí!")

                else:

                    print("❌ Esta ronda es tuya")

            else:

                print("❌ No pude entender ningún idioma conocido")

        

        # Resultados finales

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

        print("          RESULTADOS FINALES")

        print("=" * 50)

        print(f"Puntuación Asistente: {puntos}/{rondas}")

        print(f"Puntuación Tuya: {rondas - puntos}/{rondas}")

        

        if puntos > rondas - puntos:

            print("🏆 ¡Gané el juego!")

        elif puntos < rondas - puntos:

            print("🎯 ¡Ganaste tú!")

        else:

            print("🤝 ¡Empate!")


# Ejecutar el juego

juego = JuegoIdiomas()

juego.jugar()


🔧 Código Útil: Selector de Idioma por Comando de Voz

python

"""

ASISTENTE CON CAMBIO DE IDIOMA POR VOZ

Di "cambia a inglés" o "speak in french"

"""


import speech_recognition as sr

import pyttsx3


class AsistenteGlobal:

    def __init__(self):

        self.listener = sr.Recognizer()

        self.engine = pyttsx3.init()

        

        # Mapeo de comandos a códigos de idioma

        self.comandos_idioma = {

            # Español

            'español': 'es-ES',

            'español españa': 'es-ES',

            'español méxico': 'es-MX',

            'español argentina': 'es-AR',

            'español colombia': 'es-CO',

            

            # Inglés

            'inglés': 'en-US',

            'inglés estados unidos': 'en-US',

            'inglés reino unido': 'en-GB',

            'inglés británico': 'en-GB',

            'inglés australia': 'en-AU',

            

            # Otros

            'francés': 'fr-FR',

            'alemán': 'de-DE',

            'italiano': 'it-IT',

            'portugués': 'pt-BR',

            'japonés': 'ja',

            'chino': 'zh-CN'

        }

        

        self.idioma_actual = 'es-ES'

    

    def hablar(self, texto):

        """Habla el texto en el idioma actual"""

        print(f"🤖 [{self.idioma_actual}]: {texto}")

        self.engine.say(texto)

        self.engine.runAndWait()

    

    def procesar_comando(self, texto):

        """Procesa comandos especiales de cambio de idioma"""

        texto = texto.lower()

        

        # Buscar comandos de cambio de idioma

        for comando, codigo in self.comandos_idioma.items():

            if comando in texto:

                self.idioma_actual = codigo

                pais = codigo.split('-')[-1] if '-' in codigo else codigo

                self.hablar(f"Idioma cambiado a {comando}")

                return True

        

        # Comandos normales

        if 'hola' in texto:

            self.hablar("¡Hola! ¿Cómo estás?")

        elif 'cómo estás' in texto:

            self.hablar("Muy bien, gracias por preguntar")

        elif 'adiós' in texto:

            self.hablar("Hasta luego, fue un placer ayudarte")

            return 'salir'

        

        return False

    

    def ejecutar(self):

        """Bucle principal del asistente"""

        self.hablar("Asistente global activado. Di 'cambia a inglés' para cambiar idioma.")

        

        while True:

            try:

                with sr.Microphone() as source:

                    print(f"\n🎤 Escuchando en {self.idioma_actual}...")

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

                    

                    texto = self.listener.recognize_google(

                        audio, 

                        language=self.idioma_actual

                    )

                    

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

                    

                    # Procesar comando

                    resultado = self.procesar_comando(texto)

                    

                    if resultado == 'salir':

                        break

                        

            except sr.UnknownValueError:

                print("❌ No entendí")

            except Exception as e:

                print(f"⚠️ Error: {e}")


# Iniciar asistente global

asistente = AsistenteGlobal()

asistente.ejecutar()


📋 Tabla de Referencia Rápida

Idioma

Código

Comando de voz sugerido

Español (España)

es-ES

"español" o "español españa"

Español (México)

es-MX

"español méxico"

Inglés (USA)

en-US

"inglés" o "inglés usa"

Inglés (UK)

en-GB

"inglés británico"

Francés

fr-FR

"francés"

Alemán

de-DE

"alemán"

Italiano

it-IT

"italiano"

Portugués (Brasil)

pt-BR

"portugués"

Chino

zh-CN

"chino"

Japonés

ja

"japonés"


🎯 Proyecto Final: Traductor en Tiempo Real

python

"""

TRADUCTOR EN TIEMPO REAL

Habla en un idioma, escucha la traducción en otro

"""


import speech_recognition as sr

import pyttsx3

from googletrans import Translator


class TraductorVoz:

    def __init__(self, idioma_entrada='es-ES', idioma_salida='en'):

        self.listener = sr.Recognizer()

        self.engine = pyttsx3.init()

        self.traductor = Translator()

        

        self.idioma_entrada = idioma_entrada

        self.idioma_salida = idioma_salida

        

        # Mapeo de códigos Google a códigos googletrans

        self.mapeo_idiomas = {

            'es-ES': 'es', 'es-MX': 'es', 'es-AR': 'es',

            'en-US': 'en', 'en-GB': 'en', 'en-AU': 'en',

            'fr-FR': 'fr', 'de-DE': 'de', 'it-IT': 'it',

            'pt-BR': 'pt', 'ja': 'ja', 'zh-CN': 'zh-cn'

        }

    

    def traducir_voz(self):

        """Escucha, traduce y habla la traducción"""

        print(f"🎤 Habla en {self.idioma_entrada} (máximo 10 segundos)...")

        

        with sr.Microphone() as source:

            audio = self.listener.listen(source, phrase_time_limit=10)

            

            try:

                # Reconocer en idioma de entrada

                texto_original = self.listener.recognize_google(

                    audio, 

                    language=self.idioma_entrada

                )

                

                print(f"📝 Original ({self.idioma_entrada}): {texto_original}")

                

                # Traducir

                codigo_entrada = self.mapeo_idiomas.get(self.idioma_entrada, 'es')

                traduccion = self.traductor.translate(

                    texto_original,

                    src=codigo_entrada,

                    dest=self.idioma_salida

                )

                

                print(f"🌐 Traducción ({self.idioma_salida}): {traduccion.text}")

                

                # Hablar traducción

                self.engine.say(traduccion.text)

                self.engine.runAndWait()

                

                return texto_original, traduccion.text

                

            except Exception as e:

                print(f"❌ Error: {e}")

                return None, None

    

    def cambiar_idiomas(self, entrada, salida):

        """Cambia los idiomas de entrada y salida"""

        self.idioma_entrada = entrada

        self.idioma_salida = salida

        print(f"✅ Entrada: {entrada}, Salida: {salida}")


# Ejemplo de uso

traductor = TraductorVoz(idioma_entrada='es-ES', idioma_salida='en')


# Traducir español a inglés

texto_es, texto_en = traductor.traducir_voz()


# Cambiar a francés como salida

traductor.cambiar_idiomas('es-ES', 'fr')

texto_es, texto_fr = traductor.traducir_voz()


❓ Cuestionario de Repaso

Pregunta 1:

¿Cuál es la diferencia entre es-ES y es-MX en Google Speech Recognition?

  • A) es-ES es más rápido que es-MX

  • B) es-ES entiende español de España, es-MX español de México

  • C) es-ES es gratuito, es-MX es de pago

  • D) No hay diferencia, son iguales

Respuesta correcta: B
Explicación: Google entrena modelos separados para diferentes dialectos. es-ES entiende mejor "coche" y "ordenador", mientras es-MX entiende mejor "carro" y "computadora".


Pregunta 2:

Si quieres que tu asistente entienda inglés británico, ¿qué código debes usar?

  • A) en-US

  • B) en-UK

  • C) en-GB

  • D) en-BR

Respuesta correcta: C
Explicación: El código para inglés británico es en-GB (Great Britain). en-US es para inglés americano.


Pregunta 3:

¿Qué hace la función detectar_idioma(audio) en nuestro código?

  • A) Traduce el audio a inglés automáticamente

  • B) Prueba varios idiomas hasta encontrar uno que funcione

  • C) Cambia el volumen del micrófono

  • D) Guarda el audio en un archivo

Respuesta correcta: B
Explicación: Intenta reconocer el audio en diferentes idiomas uno por uno hasta que uno funcione sin error.


Pregunta 4:

¿Cuántos dialectos de español soporta Google Speech Recognition según la lista?

  • A) 3

  • B) 7

  • C) 14

  • D) 21

Respuesta correcta: C
Explicación: Hay 14 variantes de español: España, México, Argentina, Colombia, Perú, Chile, Venezuela, USA, y 6 más.


Pregunta 5:

¿Por qué es útil tener un asistente multilingüe?

  • A) Puede atender a usuarios de diferentes países

  • B) Hace que el código sea más corto

  • C) No necesita internet para funcionar

  • D) Es más rápido que un asistente monolingüe

Respuesta correcta: A
Explicación: Un asistente multilingüe puede servir a personas que hablan diferentes idiomas, haciendo tu aplicación más accesible globalmente.


Pregunta 6 (Bonus):

Si alguien dice "I want to book a lift to the first floor", ¿qué código de idioma probablemente funcionó?

  • A) en-US (inglés americano)

  • B) en-GB (inglés británico)

  • C) es-ES (español)

  • D) fr-FR (francés)

Respuesta correcta: B
Explicación: "Lift" es la palabra británica para elevador (en USA es "elevator"), y "first floor" en UK es la planta baja (en USA sería "second floor").


🌟 Resumen: Tu Asistente Ahora es Global

Lo que has aprendido:

  1. ✅ 60+ idiomas disponibles para tu asistente

  2. ✅ Diferencias entre dialectos (es-ES vs es-MX)

  3. ✅ Cómo cambiar idiomas dinámicamente

  4. ✅ Detección automática de idioma

  5. ✅ Comandos de voz para cambiar idioma

  6. ✅ Traducción en tiempo real

Proyecto sugerido: Crea un asistente turístico que:

  • Detecta automáticamente el idioma del usuario

  • Responde en el mismo idioma

  • Ofrece traducciones a otros idiomas

  • Da información sobre diferentes países

🌍 ¡Tu asistente ahora está listo para conquistar el mundo!


Crea un tutorial  para principiantes de un

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

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