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
🎯 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:
✅ 60+ idiomas disponibles para tu asistente
✅ Diferencias entre dialectos (es-ES vs es-MX)
✅ Cómo cambiar idiomas dinámicamente
✅ Detección automática de idioma
✅ Comandos de voz para cambiar idioma
✅ 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
Publicar un comentario