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
-
Öffnen Sie das Projekt
smart-timer
in VS Code und stellen Sie sicher, dass die virtuelle Umgebung im Terminal geladen ist. -
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. -
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 namensserver_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 oderzn-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.
-
Ersetzen Sie die Deklarationen
recognizer_config
undrecognizer
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. -
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 infr-FR
für Französisch anfordern, enthält das Wörterbuch einen Eintrag fürfr
, nicht fürfr-FR
.Der übersetzte Text wird dann an den IoT-Hub gesendet.
-
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
-
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. -
Definieren Sie oberhalb der Funktion
say
eine Funktiontranslate_text
, die Text von der Serversprache in die Benutzersprache übersetzt:def translate_text(text):
-
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.
-
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 derfrom
-Sprache in dieto
-Sprache.Der
body
enthält den zu übersetzenden Text. Dies ist ein Array, da mehrere Textblöcke im selben Aufruf übersetzt werden können. -
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" } ] } ]
-
Geben Sie die Eigenschaft
text
der ersten Übersetzung des ersten Elements im Array zurück:return response.json()[0]['translations'][0]['text']
-
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.
-
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.