10 KiB
Preložiť reč - Virtuálne IoT zariadenie
V tejto časti lekcie napíšete kód na preklad reči pri jej prevode na text pomocou služby na spracovanie reči, následne preložíte text pomocou služby Translator a nakoniec vygenerujete hovorenú odpoveď.
Použitie služby na spracovanie reči na preklad reči
Služba na spracovanie reči dokáže nielen previesť reč na text v rovnakom jazyku, ale aj preložiť výstup do iných jazykov.
Úloha - použitie služby na spracovanie reči na preklad reči
-
Otvorte projekt
smart-timer
vo VS Code a uistite sa, že virtuálne prostredie je načítané v termináli. -
Pridajte nasledujúce importy pod existujúce importy:
from azure.cognitiveservices import speech from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer import requests
Týmto sa importujú triedy používané na preklad reči a knižnica
requests
, ktorá sa neskôr v tejto lekcii použije na volanie služby Translator. -
Váš inteligentný časovač bude mať nastavené 2 jazyky - jazyk servera, ktorý bol použitý na trénovanie LUIS (rovnaký jazyk sa používa aj na vytváranie správ pre používateľa), a jazyk, ktorým hovorí používateľ. Aktualizujte premennú
language
na jazyk, ktorým bude hovoriť používateľ, a pridajte novú premennúserver_language
pre jazyk použitý na trénovanie LUIS:language = '<user language>' server_language = '<server language>'
Nahraďte
<user language>
názvom lokalizácie jazyka, ktorým budete hovoriť, napríkladfr-FR
pre francúzštinu alebozn-HK
pre kantončinu.Nahraďte
<server language>
názvom lokalizácie jazyka použitého na trénovanie LUIS.Zoznam podporovaných jazykov a ich názvov lokalizácií nájdete v dokumentácii o podpore jazykov a hlasov na Microsoft Docs.
💁 Ak nehovoríte viacerými jazykmi, môžete použiť službu ako Bing Translate alebo Google Translate na preklad z vášho preferovaného jazyka do iného jazyka. Tieto služby môžu následne prehrať zvuk preloženého textu. Uvedomte si, že rozpoznávač reči môže ignorovať niektoré zvukové výstupy z vášho zariadenia, takže možno budete potrebovať ďalšie zariadenie na prehrávanie preloženého textu.
Napríklad, ak trénujete LUIS v angličtine, ale chcete používať francúzštinu ako jazyk používateľa, môžete preložiť vety ako „nastav časovač na 2 minúty a 27 sekúnd“ z angličtiny do francúzštiny pomocou Bing Translate, a potom použiť tlačidlo Listen translation na prehranie prekladu do vášho mikrofónu.
-
Nahraďte deklarácie
recognizer_config
arecognizer
nasledujúcim:translation_config = SpeechTranslationConfig(subscription=speech_api_key, region=location, speech_recognition_language=language, target_languages=(language, server_language)) recognizer = TranslationRecognizer(translation_config=translation_config)
Týmto sa vytvorí konfiguračný súbor na rozpoznávanie reči v jazyku používateľa a na vytváranie prekladov v jazyku používateľa a servera. Následne sa tento konfiguračný súbor použije na vytvorenie prekladového rozpoznávača - rozpoznávača reči, ktorý dokáže preložiť výstup rozpoznávania reči do viacerých jazykov.
💁 Pôvodný jazyk musí byť špecifikovaný v
target_languages
, inak nedostanete žiadne preklady. -
Aktualizujte funkciu
recognized
, pričom nahraďte celý obsah funkcie nasledujúcim: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)
Tento kód kontroluje, či bola udalosť rozpoznania spustená kvôli prekladu reči (táto udalosť môže byť spustená aj v iných prípadoch, napríklad keď je reč rozpoznaná, ale nie preložená). Ak bola reč preložená, nájde preklad v slovníku
args.result.translations
, ktorý zodpovedá jazyku servera.Slovník
args.result.translations
je kľúčovaný podľa jazykovej časti nastavenia lokalizácie, nie celého nastavenia. Napríklad, ak požiadate o preklad dofr-FR
pre francúzštinu, slovník bude obsahovať položku prefr
, niefr-FR
.Preložený text sa potom odošle do IoT Hub.
-
Spustite tento kód na otestovanie prekladov. Uistite sa, že vaša funkcia aplikácie beží, a požiadajte o časovač v jazyku používateľa, buď hovorením týmto jazykom, alebo použitím prekladovej aplikácie.
(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds.
Preklad textu pomocou služby Translator
Služba na spracovanie reči nepodporuje preklad textu späť na reč, namiesto toho môžete použiť službu Translator na preklad textu. Táto služba má REST API, ktoré môžete použiť na preklad textu.
Úloha - použitie zdroja Translator na preklad textu
-
Pridajte API kľúč pre Translator pod
speech_api_key
:translator_api_key = '<key>'
Nahraďte
<key>
API kľúčom pre váš zdroj služby Translator. -
Nad funkciou
say
definujte funkciutranslate_text
, ktorá bude prekladať text z jazyka servera do jazyka používateľa:def translate_text(text):
-
V tejto funkcii definujte URL a hlavičky pre volanie REST API:
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' }
URL pre toto API nie je špecifické pre lokalitu, namiesto toho sa lokalita odovzdáva ako hlavička. API kľúč sa používa priamo, takže na rozdiel od služby na spracovanie reči nie je potrebné získavať prístupový token z API na vydávanie tokenov.
-
Pod týmto definujte parametre a telo pre volanie:
params = { 'from': server_language, 'to': language } body = [{ 'text' : text }]
params
definuje parametre, ktoré sa odovzdávajú volaniu API, pričom sa odovzdávajú jazykyfrom
ato
. Toto volanie preloží text z jazykafrom
do jazykato
.body
obsahuje text na preklad. Toto je pole, pretože v jednom volaní je možné preložiť viacero blokov textu. -
Vykonajte volanie REST API a získajte odpoveď:
response = requests.post(url, headers=headers, params=params, json=body)
Odpoveď, ktorá sa vráti, je JSON pole, ktoré obsahuje jednu položku s prekladmi. Táto položka má pole pre preklady všetkých položiek odovzdaných v tele.
[ { "translations": [ { "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.", "to": "fr" } ] } ]
-
Vráťte vlastnosť
text
z prvého prekladu z prvej položky v poli:return response.json()[0]['translations'][0]['text']
-
Aktualizujte funkciu
say
, aby preložila text na výslovnosť predtým, ako sa vygeneruje SSML:print('Original:', text) text = translate_text(text) print('Translated:', text)
Tento kód tiež vypíše pôvodnú a preloženú verziu textu do konzoly.
-
Spustite svoj kód. Uistite sa, že vaša funkcia aplikácie beží, a požiadajte o časovač v jazyku používateľa, buď hovorením týmto jazykom, alebo použitím prekladovej aplikácie.
(.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.
💁 Kvôli rôznym spôsobom vyjadrovania v rôznych jazykoch môžete dostať preklady, ktoré sa mierne líšia od príkladov, ktoré ste poskytli LUIS. Ak je to tak, pridajte viac príkladov do LUIS, znova trénujte a potom znova publikujte model.
💁 Tento kód nájdete v priečinku code/virtual-iot-device.
😀 Váš viacjazyčný program časovača bol úspešný!
Upozornenie:
Tento dokument bol preložený pomocou služby na automatický preklad Co-op Translator. Aj keď sa snažíme o presnosť, upozorňujeme, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Za autoritatívny zdroj by sa mal považovať pôvodný dokument v jeho pôvodnom jazyku. Pre dôležité informácie odporúčame profesionálny ľudský preklad. Nezodpovedáme za žiadne nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.