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/de/6-consumer/lessons/4-multiple-language-support/virtual-device-translate-sp...

11 KiB

Übersetze Sprache - Virtuelles IoT-Gerät

In diesem Teil der Lektion schreiben Sie Code, um Sprache bei der Umwandlung in Text mit dem Sprachdienst zu übersetzen, anschließend Text mit dem Übersetzungsdienst zu übersetzen und schließlich eine gesprochene Antwort zu generieren.

Verwenden Sie den Sprachdienst, um Sprache zu übersetzen

Der Sprachdienst kann Sprache nicht nur in Text in derselben Sprache umwandeln, sondern auch die Ausgabe in andere Sprachen übersetzen.

Aufgabe - Verwenden Sie den Sprachdienst, um Sprache zu übersetzen

  1. Öffnen Sie das Projekt smart-timer in VS Code und stellen Sie sicher, dass die virtuelle Umgebung im Terminal geladen ist.

  2. Fügen Sie die folgenden Importanweisungen unter den bestehenden Imports hinzu:

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

    Dies importiert Klassen, die zur Übersetzung von Sprache verwendet werden, sowie eine requests-Bibliothek, die später in dieser Lektion für einen Aufruf des Übersetzungsdienstes verwendet wird.

  3. Ihr Smart-Timer wird zwei Sprachen haben - die Sprache des Servers, die für das Training von LUIS verwendet wurde (diese Sprache wird auch verwendet, um Nachrichten zu erstellen, die dem Benutzer gesprochen werden), und die Sprache, die vom Benutzer gesprochen wird. Aktualisieren Sie die Variable language, um die Sprache festzulegen, die vom Benutzer gesprochen wird, und fügen Sie eine neue Variable namens server_language für die Sprache hinzu, die für das Training von LUIS verwendet wurde:

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

    Ersetzen Sie <user language> durch den Gebietsschemanamen der Sprache, in der Sie sprechen werden, z. B. fr-FR für Französisch oder zn-HK für Kantonesisch.

    Ersetzen Sie <server language> durch den Gebietsschemanamen der Sprache, die für das Training von LUIS verwendet wurde.

    Eine Liste der unterstützten Sprachen und ihrer Gebietsschemanamen finden Sie in der Dokumentation zur Sprach- und Sprachunterstützung auf Microsoft Docs.

    💁 Wenn Sie keine mehreren Sprachen sprechen, können Sie einen Dienst wie Bing Translate oder Google Translate verwenden, um von Ihrer bevorzugten Sprache in eine Sprache Ihrer Wahl zu übersetzen. Diese Dienste können dann Audio des übersetzten Textes abspielen. Beachten Sie, dass der Spracherkenner einige Audioausgaben von Ihrem Gerät ignorieren kann, sodass Sie möglicherweise ein zusätzliches Gerät benötigen, um den übersetzten Text abzuspielen.

    Wenn Sie beispielsweise LUIS auf Englisch trainieren, aber Französisch als Benutzersprache verwenden möchten, können Sie Sätze wie "set a 2 minute and 27 second timer" von Englisch ins Französische mit Bing Translate übersetzen und dann die Schaltfläche Listen translation verwenden, um die Übersetzung in Ihr Mikrofon zu sprechen.

    Die Schaltfläche "Listen translation" auf Bing Translate

  4. Ersetzen Sie die Deklarationen recognizer_config und recognizer durch Folgendes:

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

    Dies erstellt eine Übersetzungskonfiguration, um Sprache in der Benutzersprache zu erkennen und Übersetzungen in der Benutzer- und Serversprache zu erstellen. Anschließend wird diese Konfiguration verwendet, um einen Übersetzungsrekognizer zu erstellen - einen Sprachrekognizer, der die Ausgabe der Spracherkennung in mehrere Sprachen übersetzen kann.

    💁 Die ursprüngliche Sprache muss in den target_languages angegeben werden, andernfalls erhalten Sie keine Übersetzungen.

  5. Aktualisieren Sie die Funktion recognized, indem Sie den gesamten Inhalt der Funktion durch Folgendes ersetzen:

    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)
    

    Dieser Code überprüft, ob das erkannte Ereignis ausgelöst wurde, weil Sprache übersetzt wurde (dieses Ereignis kann zu anderen Zeiten ausgelöst werden, z. B. wenn die Sprache erkannt, aber nicht übersetzt wurde). Wenn die Sprache übersetzt wurde, findet er die Übersetzung im Wörterbuch args.result.translations, die der Serversprache entspricht.

    Das Wörterbuch args.result.translations ist nach dem Sprachteil der Gebietsschemaeinstellung und nicht nach der gesamten Einstellung geordnet. Wenn Sie beispielsweise eine Übersetzung in fr-FR für Französisch anfordern, enthält das Wörterbuch einen Eintrag für fr, nicht für fr-FR.

    Der übersetzte Text wird dann an den IoT-Hub gesendet.

  6. Führen Sie diesen Code aus, um die Übersetzungen zu testen. Stellen Sie sicher, dass Ihre Funktions-App läuft, und fordern Sie einen Timer in der Benutzersprache an, entweder indem Sie diese Sprache selbst sprechen oder eine Übersetzungs-App verwenden.

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

Übersetzen Sie Text mit dem Übersetzungsdienst

Der Sprachdienst unterstützt keine Rückübersetzung von Text in Sprache. Stattdessen können Sie den Übersetzungsdienst verwenden, um den Text zu übersetzen. Dieser Dienst verfügt über eine REST-API, die Sie zur Übersetzung des Textes verwenden können.

Aufgabe - Verwenden Sie die Übersetzungsressource, um Text zu übersetzen

  1. Fügen Sie den API-Schlüssel des Übersetzungsdienstes unterhalb des speech_api_key hinzu:

    translator_api_key = '<key>'
    

    Ersetzen Sie <key> durch den API-Schlüssel für Ihre Übersetzungsdienstressource.

  2. Definieren Sie oberhalb der Funktion say eine Funktion translate_text, die Text von der Serversprache in die Benutzersprache übersetzt:

    def translate_text(text):
    
  3. Definieren Sie innerhalb dieser Funktion die URL und die Header für den REST-API-Aufruf:

    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'
    }
    

    Die URL für diese API ist nicht ortsspezifisch, stattdessen wird der Standort als Header übergeben. Der API-Schlüssel wird direkt verwendet, sodass im Gegensatz zum Sprachdienst kein Zugriffstoken von der Token-Aussteller-API abgerufen werden muss.

  4. Definieren Sie darunter die Parameter und den Body für den Aufruf:

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

    Die params definieren die Parameter, die an den API-Aufruf übergeben werden, und geben die Ausgangs- und Zielsprachen an. Dieser Aufruf übersetzt Text in der from-Sprache in die to-Sprache.

    Der body enthält den zu übersetzenden Text. Dies ist ein Array, da mehrere Textblöcke im selben Aufruf übersetzt werden können.

  5. Führen Sie den REST-API-Aufruf aus und holen Sie die Antwort:

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

    Die Antwort, die zurückkommt, ist ein JSON-Array mit einem Element, das die Übersetzungen enthält. Dieses Element hat ein Array für Übersetzungen aller im Body übergebenen Elemente.

    [
        {
            "translations": [
                {
                    "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.",
                    "to": "fr"
                }
            ]
        }
    ]
    
  6. Geben Sie die Eigenschaft text der ersten Übersetzung des ersten Elements im Array zurück:

    return response.json()[0]['translations'][0]['text']
    
  7. Aktualisieren Sie die Funktion say, um den zu sprechenden Text zu übersetzen, bevor das SSML generiert wird:

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

    Dieser Code druckt auch die ursprüngliche und die übersetzte Version des Textes in die Konsole.

  8. Führen Sie Ihren Code aus. Stellen Sie sicher, dass Ihre Funktions-App läuft, und fordern Sie einen Timer in der Benutzersprache an, entweder indem Sie diese Sprache selbst sprechen oder eine Übersetzungs-App verwenden.

    (.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.
    

    💁 Aufgrund der unterschiedlichen Ausdrucksweisen in verschiedenen Sprachen können Sie Übersetzungen erhalten, die leicht von den Beispielen abweichen, die Sie LUIS gegeben haben. Wenn dies der Fall ist, fügen Sie LUIS weitere Beispiele hinzu, trainieren Sie das Modell erneut und veröffentlichen Sie es erneut.

💁 Sie finden diesen Code im Ordner code/virtual-iot-device.

😀 Ihr mehrsprachiges Timer-Programm war ein Erfolg!

Haftungsausschluss:
Dieses Dokument wurde mit dem KI-Übersetzungsdienst Co-op Translator übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die sich aus der Nutzung dieser Übersetzung ergeben.