11 KiB
Beszéd fordítása - Virtuális IoT eszköz
A lecke ezen részében kódot fogsz írni, amely a beszédet szöveggé alakítja a beszédfelismerő szolgáltatás segítségével, majd a szöveget lefordítja a Fordító szolgáltatással, mielőtt egy beszélt választ generálna.
A beszédfelismerő szolgáltatás használata beszéd fordítására
A beszédfelismerő szolgáltatás nemcsak a beszédet tudja szöveggé alakítani ugyanazon a nyelven, hanem az eredményt más nyelvekre is le tudja fordítani.
Feladat - a beszédfelismerő szolgáltatás használata beszéd fordítására
-
Nyisd meg a
smart-timer
projektet a VS Code-ban, és győződj meg róla, hogy a virtuális környezet betöltődött a terminálban. -
Add hozzá a következő import utasításokat a meglévő importok alá:
from azure.cognitiveservices import speech from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer import requests
Ez importálja azokat az osztályokat, amelyek a beszéd fordításához szükségesek, valamint egy
requests
könyvtárat, amelyet később a Fordító szolgáltatás hívásához fogsz használni. -
Az okos időzítőnek két nyelvet kell beállítanod - a szerver nyelvét, amelyet a LUIS betanításához használtál (ugyanez a nyelv használatos a felhasználónak szóló üzenetek létrehozásához is), és a felhasználó által beszélt nyelvet. Frissítsd a
language
változót a felhasználó által beszélt nyelvre, és adj hozzá egy új változótserver_language
néven a LUIS betanításához használt nyelvhez:language = '<user language>' server_language = '<server language>'
Cseréld ki a
<user language>
helyére a beszélt nyelv helyi beállításának nevét, példáulfr-FR
a franciához, vagyzn-HK
a kantonihoz.Cseréld ki a
<server language>
helyére a LUIS betanításához használt nyelv helyi beállításának nevét.A támogatott nyelvek és azok helyi beállításainak listáját megtalálod a Microsoft dokumentációjában a nyelv- és hangtámogatásról.
💁 Ha nem beszélsz több nyelvet, használhatsz olyan szolgáltatásokat, mint a Bing Translate vagy a Google Translate, hogy lefordítsd a preferált nyelvedet egy másik nyelvre. Ezek a szolgáltatások képesek lejátszani a lefordított szöveg hangját is. Vedd figyelembe, hogy a beszédfelismerő figyelmen kívül hagyhat néhány hangkimenetet az eszközödről, ezért szükséged lehet egy másik eszközre a lefordított szöveg lejátszásához.
Például, ha angolul tanítod be a LUIS-t, de franciát szeretnél használni felhasználói nyelvként, lefordíthatod az olyan mondatokat, mint például "set a 2 minute and 27 second timer" angolról franciára a Bing Translate segítségével, majd a Listen translation gombbal mondhatod el a fordítást a mikrofonodba.
-
Cseréld le a
recognizer_config
ésrecognizer
deklarációkat a következőre:translation_config = SpeechTranslationConfig(subscription=speech_api_key, region=location, speech_recognition_language=language, target_languages=(language, server_language)) recognizer = TranslationRecognizer(translation_config=translation_config)
Ez létrehoz egy fordítási konfigurációt, amely felismeri a beszédet a felhasználói nyelven, és fordításokat készít a felhasználói és a szerver nyelvre. Ezután ezt a konfigurációt használja egy fordítási felismerő létrehozásához - egy olyan beszédfelismerőhöz, amely a beszédfelismerés eredményét több nyelvre is le tudja fordítani.
💁 Az eredeti nyelvet meg kell adni a
target_languages
mezőben, különben nem kapsz fordításokat. -
Frissítsd a
recognized
függvényt, cseréld le a függvény teljes tartalmát a következőre: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)
Ez a kód ellenőrzi, hogy a felismerési esemény azért lett-e aktiválva, mert a beszédet lefordították (ez az esemény máskor is aktiválódhat, például amikor a beszédet felismerik, de nem fordítják le). Ha a beszédet lefordították, megkeresi a fordítást az
args.result.translations
szótárban, amely megfelel a szerver nyelvének.Az
args.result.translations
szótár a helyi beállítás nyelvi részére van kulcsolva, nem az egész beállításra. Például, hafr-FR
-re kérsz fordítást franciára, a szótár tartalmazni fog egy bejegyzéstfr
-re, nem pedigfr-FR
-re.A lefordított szöveget ezután elküldi az IoT Hubnak.
-
Futtasd a kódot a fordítások teszteléséhez. Győződj meg róla, hogy a funkcióalkalmazásod fut, és kérj egy időzítőt a felhasználói nyelven, akár úgy, hogy magad beszéled azt a nyelvet, akár egy fordító alkalmazás segítségével.
(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds.
Szöveg fordítása a Fordító szolgáltatással
A beszédfelismerő szolgáltatás nem támogatja a szöveg visszafordítását beszéddé, ehelyett a Fordító szolgáltatást használhatod a szöveg fordítására. Ez a szolgáltatás egy REST API-t biztosít, amelyet a szöveg fordítására használhatsz.
Feladat - a Fordító erőforrás használata szöveg fordítására
-
Add hozzá a Fordító API kulcsát a
speech_api_key
alá:translator_api_key = '<key>'
Cseréld ki a
<key>
helyére a Fordító szolgáltatás erőforrásának API kulcsát. -
A
say
függvény fölé definiálj egytranslate_text
függvényt, amely a szöveget a szerver nyelvéről a felhasználói nyelvre fordítja:def translate_text(text):
-
Ebben a függvényben definiáld az URL-t és a fejlécet a REST API híváshoz:
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' }
Ennek az API-nak az URL-je nem helyspecifikus, ehelyett a helyet egy fejlécben kell megadni. Az API kulcsot közvetlenül használják, így a beszédfelismerő szolgáltatással ellentétben nincs szükség hozzáférési token beszerzésére a tokenkibocsátó API-tól.
-
Ez alatt definiáld a hívás paramétereit és törzsét:
params = { 'from': server_language, 'to': language } body = [{ 'text' : text }]
A
params
határozza meg az API híváshoz átadandó paramétereket, megadva a forrás- és célnyelveket. Ez a hívás afrom
nyelven lévő szöveget fordítja le ato
nyelvre.A
body
tartalmazza a lefordítandó szöveget. Ez egy tömb, mivel több szövegrészlet is lefordítható ugyanabban a hívásban. -
Hajtsd végre a REST API hívást, és szerezd meg a választ:
response = requests.post(url, headers=headers, params=params, json=body)
A visszakapott válasz egy JSON tömb, amely egy elemet tartalmaz a fordításokkal. Ez az elem egy tömböt tartalmaz az összes fordításról, amelyeket a törzsben átadtál.
[ { "translations": [ { "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.", "to": "fr" } ] } ]
-
Add vissza az első elem első fordításának
text
tulajdonságát:return response.json()[0]['translations'][0]['text']
-
Frissítsd a
say
függvényt, hogy a kimondandó szöveget lefordítsa, mielőtt az SSML-t generálná:print('Original:', text) text = translate_text(text) print('Translated:', text)
Ez a kód az eredeti és a lefordított szöveget is kiírja a konzolra.
-
Futtasd a kódot. Győződj meg róla, hogy a funkcióalkalmazásod fut, és kérj egy időzítőt a felhasználói nyelven, akár úgy, hogy magad beszéled azt a nyelvet, akár egy fordító alkalmazás segítségével.
(.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.
💁 A különböző nyelveken való kifejezésmódok eltérései miatt előfordulhat, hogy a fordítások kissé eltérnek a LUIS-nek adott példáktól. Ha ez a helyzet, adj hozzá több példát a LUIS-hez, tanítsd újra, majd publikáld újra a modellt.
💁 Ezt a kódot megtalálod a code/virtual-iot-device mappában.
😀 A többnyelvű időzítő programod sikeres volt!
Felelősség kizárása:
Ez a dokumentum az AI fordítási szolgáltatás, a Co-op Translator segítségével lett lefordítva. Bár törekszünk a pontosságra, kérjük, vegye figyelembe, hogy az automatikus fordítások hibákat vagy pontatlanságokat tartalmazhatnak. Az eredeti dokumentum az eredeti nyelvén tekintendő hiteles forrásnak. Fontos információk esetén javasolt professzionális, emberi fordítást igénybe venni. Nem vállalunk felelősséget semmilyen félreértésért vagy téves értelmezésért, amely a fordítás használatából eredhet.