8.0 KiB
Traducir discurso - Raspberry Pi
En esta parte de la lección, escribirás código para traducir texto utilizando el servicio de traducción.
Convertir texto a discurso usando el servicio de traducción
La API REST del servicio de voz no admite traducciones directas; en su lugar, puedes usar el servicio de Traducción para traducir el texto generado por el servicio de voz a texto, así como el texto de la respuesta hablada. Este servicio tiene una API REST que puedes usar para traducir el texto.
Tarea - usar el recurso de traducción para traducir texto
-
Tu temporizador inteligente tendrá configurados 2 idiomas: el idioma del servidor que se utilizó para entrenar LUIS (el mismo idioma también se usa para construir los mensajes que se le hablarán al usuario) y el idioma hablado por el usuario. Actualiza la variable
language
para que sea el idioma que hablará el usuario, y agrega una nueva variable llamadaserver_language
para el idioma utilizado para entrenar LUIS:language = '<user language>' server_language = '<server language>'
Sustituye
<user language>
por el nombre de la configuración regional del idioma que hablarás, por ejemplo,fr-FR
para francés ozn-HK
para cantonés.Sustituye
<server language>
por el nombre de la configuración regional del idioma utilizado para entrenar LUIS.Puedes encontrar una lista de los idiomas admitidos y sus nombres de configuración regional en la documentación de soporte de idiomas y voces en Microsoft Docs.
💁 Si no hablas varios idiomas, puedes usar un servicio como Bing Translate o Google Translate para traducir de tu idioma preferido a otro idioma de tu elección. Estos servicios también pueden reproducir audio del texto traducido.
Por ejemplo, si entrenas LUIS en inglés pero deseas usar francés como idioma del usuario, puedes traducir frases como "set a 2 minute and 27 second timer" del inglés al francés usando Bing Translate, y luego usar el botón Escuchar traducción para hablar la traducción en tu micrófono.
-
Agrega la clave de la API del traductor debajo de
speech_api_key
:translator_api_key = '<key>'
Sustituye
<key>
por la clave de la API de tu recurso del servicio de traducción. -
Encima de la función
say
, define una funcióntranslate_text
que traduzca texto del idioma del servidor al idioma del usuario:def translate_text(text, from_language, to_language):
Los idiomas de origen y destino se pasan a esta función: tu aplicación necesita convertir del idioma del usuario al idioma del servidor al reconocer el habla, y del idioma del servidor al idioma del usuario al proporcionar retroalimentación hablada.
-
Dentro de esta función, define la URL y los encabezados para la llamada a la API REST:
url = f'https://api.cognitive.microsofttranslator.com/translate?api-version=3.0' headers = { 'Ocp-Apim-Subscription-Key': translator_api_key, 'Ocp-Apim-Subscription-Region': location, 'Content-type': 'application/json' }
La URL para esta API no es específica de la ubicación; en su lugar, la ubicación se pasa como un encabezado. La clave de la API se usa directamente, por lo que, a diferencia del servicio de voz, no es necesario obtener un token de acceso de la API emisora de tokens.
-
Debajo de esto, define los parámetros y el cuerpo para la llamada:
params = { 'from': from_language, 'to': to_language } body = [{ 'text' : text }]
Los
params
definen los parámetros que se pasarán a la llamada de la API, especificando los idiomas de origen y destino. Esta llamada traducirá el texto del idiomafrom
al idiomato
.El
body
contiene el texto a traducir. Es un arreglo, ya que se pueden traducir múltiples bloques de texto en la misma llamada. -
Realiza la llamada a la API REST y obtén la respuesta:
response = requests.post(url, headers=headers, params=params, json=body)
La respuesta que se recibe es un arreglo JSON, con un elemento que contiene las traducciones. Este elemento tiene un arreglo con las traducciones de todos los elementos pasados en el cuerpo.
[ { "translations": [ { "text": "Set a 2 minute 27 second timer.", "to": "en" } ] } ]
-
Devuelve la propiedad
text
de la primera traducción del primer elemento en el arreglo:return response.json()[0]['translations'][0]['text']
-
Actualiza el bucle
while True
para traducir el texto de la llamada aconvert_speech_to_text
del idioma del usuario al idioma del servidor:if len(text) > 0: print('Original:', text) text = translate_text(text, language, server_language) print('Translated:', text) message = Message(json.dumps({ 'speech': text })) device_client.send_message(message)
Este código también imprime las versiones original y traducida del texto en la consola.
-
Actualiza la función
say
para traducir el texto a decir del idioma del servidor al idioma del usuario:def say(text): print('Original:', text) text = translate_text(text, server_language, language) print('Translated:', text) speech = get_speech(text) play_speech(speech)
Este código también imprime las versiones original y traducida del texto en la consola.
-
Ejecuta tu código. Asegúrate de que tu aplicación de funciones esté en ejecución y solicita un temporizador en el idioma del usuario, ya sea hablando ese idioma tú mismo o usando una aplicación de traducción.
pi@raspberrypi:~/smart-timer $ python3 app.py Connecting Connected Using voice fr-FR-DeniseNeural Original: Définir une minuterie de 2 minutes et 27 secondes. Translated: Set a timer of 2 minutes and 27 seconds. Original: 2 minute 27 second timer started. Translated: 2 minute 27 seconde minute a commencé. Original: Times up on your 2 minute 27 second timer. Translated: Chronométrant votre minuterie de 2 minutes 27 secondes.
💁 Debido a las diferentes formas de decir algo en distintos idiomas, es posible que obtengas traducciones ligeramente diferentes a los ejemplos que diste a LUIS. Si este es el caso, agrega más ejemplos a LUIS, vuelve a entrenar y luego vuelve a publicar el modelo.
💁 Puedes encontrar este código en la carpeta code/pi.
😀 ¡Tu programa de temporizador multilingüe fue un éxito!
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción.