You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/es/6-consumer/lessons/4-multiple-language-support/virtual-device-translate-sp...

11 KiB

Traducir voz - Dispositivo IoT Virtual

En esta parte de la lección, escribirás código para traducir voz al convertirla en texto utilizando el servicio de voz, luego traducirás el texto usando el servicio de Traducción antes de generar una respuesta hablada.

Usar el servicio de voz para traducir voz

El servicio de voz puede tomar voz y no solo convertirla en texto en el mismo idioma, sino también traducir el resultado a otros idiomas.

Tarea - usar el servicio de voz para traducir voz

  1. Abre el proyecto smart-timer en VS Code y asegúrate de que el entorno virtual esté cargado en la terminal.

  2. Agrega las siguientes declaraciones de importación debajo de las importaciones existentes:

    from azure.cognitiveservices import speech
    from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer
    import requests
    

    Esto importa las clases utilizadas para traducir voz y una biblioteca requests que se usará para realizar una llamada al servicio de Traducción más adelante en esta lección.

  3. Tu temporizador inteligente tendrá 2 idiomas configurados: el idioma del servidor que se utilizó para entrenar LUIS (el mismo idioma también se utiliza 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 llamada server_language para el idioma utilizado para entrenar LUIS:

    language = '<user language>'
    server_language = '<server language>'
    

    Reemplaza <user language> con el nombre de la configuración regional del idioma que hablarás, por ejemplo, fr-FR para francés o zn-HK para cantonés.

    Reemplaza <server language> con el nombre de la configuración regional del idioma utilizado para entrenar LUIS.

    Puedes encontrar una lista de los idiomas compatibles 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 un idioma de tu elección. Estos servicios pueden reproducir audio del texto traducido. Ten en cuenta que el reconocedor de voz ignorará parte del audio de salida de tu dispositivo, por lo que es posible que necesites usar un dispositivo adicional para reproducir el 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, luego usar el botón Escuchar traducción para hablar la traducción en tu micrófono.

    El botón escuchar traducción en Bing Translate

  4. Reemplaza las declaraciones recognizer_config y recognizer con lo siguiente:

    translation_config = SpeechTranslationConfig(subscription=speech_api_key,
                                                 region=location,
                                                 speech_recognition_language=language,
                                                 target_languages=(language, server_language))
    
    recognizer = TranslationRecognizer(translation_config=translation_config)
    

    Esto crea una configuración de traducción para reconocer voz en el idioma del usuario y generar traducciones en el idioma del usuario y del servidor. Luego utiliza esta configuración para crear un reconocedor de traducción: un reconocedor de voz que puede traducir el resultado del reconocimiento de voz a múltiples idiomas.

    💁 El idioma original debe especificarse en target_languages, de lo contrario no obtendrás ninguna traducción.

  5. Actualiza la función recognized, reemplazando todo el contenido de la función con lo siguiente:

    if args.result.reason == speech.ResultReason.TranslatedSpeech:
        language_match = next(l for l in args.result.translations if server_language.lower().startswith(l.lower()))
        text = args.result.translations[language_match]
        if (len(text) > 0):
            print(f'Translated text: {text}')
    
            message = Message(json.dumps({ 'speech': text }))
            device_client.send_message(message)
    

    Este código verifica si el evento reconocido se activó porque la voz fue traducida (este evento puede activarse en otros momentos, como cuando la voz es reconocida pero no traducida). Si la voz fue traducida, encuentra la traducción en el diccionario args.result.translations que coincide con el idioma del servidor.

    El diccionario args.result.translations está indexado por la parte del idioma de la configuración regional, no por toda la configuración. Por ejemplo, si solicitas una traducción a fr-FR para francés, el diccionario contendrá una entrada para fr, no para fr-FR.

    Luego, el texto traducido se envía al IoT Hub.

  6. Ejecuta este código para probar las traducciones. 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 utilizando una aplicación de traducción.

    (.venv) ➜  smart-timer python app.py
    Connecting
    Connected
    Translated text: Set a timer of 2 minutes and 27 seconds.
    

Traducir texto usando el servicio de traducción

El servicio de voz no admite la traducción de texto de vuelta a voz, en su lugar puedes usar el servicio de Traducción para traducir el texto. Este servicio tiene una API REST que puedes usar para traducir el texto.

Tarea - usar el recurso de traducción para traducir texto

  1. Agrega la clave de la API de traducción debajo de speech_api_key:

    translator_api_key = '<key>'
    

    Reemplaza <key> con la clave de API para tu recurso de servicio de traducción.

  2. Encima de la función say, define una función translate_text que traducirá texto del idioma del servidor al idioma del usuario:

    def translate_text(text):
    
  3. 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 API se utiliza directamente, por lo que, a diferencia del servicio de voz, no es necesario obtener un token de acceso de la API emisora de tokens.

  4. Debajo de esto, define los parámetros y el cuerpo para la llamada:

    params = {
        'from': server_language,
        'to': language
    }
    
    body = [{
        'text' : text
    }]
    

    Los params definen los parámetros para pasar a la llamada de la API, pasando los idiomas de origen y destino. Esta llamada traducirá texto en el idioma from al idioma to.

    El body contiene el texto a traducir. Esto es un arreglo, ya que se pueden traducir múltiples bloques de texto en la misma llamada.

  5. 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 regresa es un arreglo JSON, con un elemento que contiene las traducciones. Este elemento tiene un arreglo para las traducciones de todos los elementos pasados en el cuerpo.

    [
        {
            "translations": [
                {
                    "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.",
                    "to": "fr"
                }
            ]
        }
    ]
    
  6. Devuelve la propiedad text de la primera traducción del primer elemento en el arreglo:

    return response.json()[0]['translations'][0]['text']
    
  7. Actualiza la función say para traducir el texto antes de que se genere el SSML:

    print('Original:', text)
    text = translate_text(text)
    print('Translated:', text)
    

    Este código también imprime las versiones original y traducida del texto en la consola.

  8. 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 utilizando una aplicación de traducción.

    (.venv) ➜  smart-timer python app.py
    Connecting
    Connected
    Translated text: 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 diferentes idiomas, es posible que obtengas traducciones que sean 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/virtual-iot-device.

😀 ¡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 lograr precisión, tenga en cuenta que las traducciones automáticas 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.