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/fr/6-consumer/lessons/4-multiple-language-support/pi-translate-speech.md

8.3 KiB

Traduire la parole - Raspberry Pi

Dans cette partie de la leçon, vous allez écrire du code pour traduire du texte en utilisant le service de traduction.

Convertir du texte en parole à l'aide du service de traduction

L'API REST du service vocal ne prend pas en charge les traductions directes. Cependant, vous pouvez utiliser le service Translator pour traduire le texte généré par le service de reconnaissance vocale, ainsi que le texte de la réponse parlée. Ce service dispose d'une API REST que vous pouvez utiliser pour traduire le texte.

Tâche - utiliser la ressource Translator pour traduire du texte

  1. Votre minuteur intelligent aura deux langues définies : la langue du serveur utilisée pour entraîner LUIS (cette langue est également utilisée pour construire les messages destinés à l'utilisateur) et la langue parlée par l'utilisateur. Mettez à jour la variable language pour qu'elle corresponde à la langue parlée par l'utilisateur, et ajoutez une nouvelle variable appelée server_language pour la langue utilisée pour entraîner LUIS :

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

    Remplacez <user language> par le nom de la locale correspondant à la langue que vous utiliserez, par exemple fr-FR pour le français, ou zn-HK pour le cantonais.

    Remplacez <server language> par le nom de la locale correspondant à la langue utilisée pour entraîner LUIS.

    Vous pouvez trouver une liste des langues prises en charge et de leurs noms de locale dans la documentation sur le support des langues et des voix sur Microsoft Docs.

    💁 Si vous ne parlez pas plusieurs langues, vous pouvez utiliser un service comme Bing Translate ou Google Translate pour traduire de votre langue préférée vers une langue de votre choix. Ces services peuvent ensuite lire à haute voix le texte traduit.

    Par exemple, si vous entraînez LUIS en anglais mais souhaitez utiliser le français comme langue utilisateur, vous pouvez traduire des phrases comme "set a 2 minute and 27 second timer" de l'anglais au français en utilisant Bing Translate, puis utiliser le bouton Écouter la traduction pour prononcer la traduction dans votre microphone.

    Le bouton écouter la traduction sur Bing Translate

  2. Ajoutez la clé API du service Translator sous la variable speech_api_key :

    translator_api_key = '<key>'
    

    Remplacez <key> par la clé API de votre ressource Translator.

  3. Au-dessus de la fonction say, définissez une fonction translate_text qui traduira le texte de la langue du serveur vers la langue de l'utilisateur :

    def translate_text(text, from_language, to_language):
    

    Les langues source et cible sont passées à cette fonction. Votre application doit convertir de la langue utilisateur à la langue serveur lors de la reconnaissance vocale, et de la langue serveur à la langue utilisateur pour fournir un retour vocal.

  4. À l'intérieur de cette fonction, définissez l'URL et les en-têtes pour l'appel à l'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'
    }
    

    L'URL de cette API n'est pas spécifique à une localisation. La localisation est plutôt transmise dans un en-tête. La clé API est utilisée directement, donc contrairement au service vocal, il n'est pas nécessaire d'obtenir un jeton d'accès depuis l'API d'émission de jetons.

  5. En dessous, définissez les paramètres et le corps de l'appel :

    params = {
        'from': from_language,
        'to': to_language
    }
    
    body = [{
        'text' : text
    }]
    

    Les params définissent les paramètres à transmettre à l'appel API, en spécifiant les langues source et cible. Cet appel traduira le texte de la langue source vers la langue cible.

    Le body contient le texte à traduire. Il s'agit d'un tableau, car plusieurs blocs de texte peuvent être traduits dans le même appel.

  6. Effectuez l'appel à l'API REST et récupérez la réponse :

    response = requests.post(url, headers=headers, params=params, json=body)
    

    La réponse reçue est un tableau JSON, contenant un élément avec les traductions. Cet élément contient un tableau pour les traductions de tous les éléments transmis dans le corps de la requête.

    [
        {
            "translations": [
                {
                    "text": "Set a 2 minute 27 second timer.",
                    "to": "en"
                }
            ]
        }
    ]
    
  7. Retournez la propriété text de la première traduction du premier élément du tableau :

    return response.json()[0]['translations'][0]['text']
    
  8. Mettez à jour la boucle while True pour traduire le texte obtenu par l'appel à convert_speech_to_text de la langue utilisateur vers la langue serveur :

    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)
    

    Ce code affiche également les versions originale et traduite du texte dans la console.

  9. Mettez à jour la fonction say pour traduire le texte à prononcer de la langue serveur vers la langue utilisateur :

    def say(text):
        print('Original:', text)
        text = translate_text(text, server_language, language)
        print('Translated:', text)
        speech = get_speech(text)
        play_speech(speech)
    

    Ce code affiche également les versions originale et traduite du texte dans la console.

  10. Exécutez votre code. Assurez-vous que votre application fonctionnelle est en cours d'exécution, et demandez un minuteur dans la langue utilisateur, soit en parlant cette langue vous-même, soit en utilisant une application de traduction.

    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.
    

    💁 En raison des différentes façons de formuler une phrase dans différentes langues, vous pourriez obtenir des traductions légèrement différentes des exemples que vous avez donnés à LUIS. Si c'est le cas, ajoutez plus d'exemples à LUIS, réentraînez puis republiez le modèle.

💁 Vous pouvez trouver ce code dans le dossier code/pi.

😀 Votre programme de minuteur multilingue est un succès !

Avertissement :
Ce document a été traduit à l'aide du service de traduction automatique Co-op Translator. Bien que nous nous efforcions d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction.