9.9 KiB
Išversti kalbą – Virtualus IoT įrenginys
Šioje pamokos dalyje rašysite kodą, kuris išvers kalbą konvertuojant ją į tekstą naudojant kalbos paslaugą, o tada išvers tekstą naudodami Translator paslaugą prieš sugeneruodami garsinį atsakymą.
Naudokite kalbos paslaugą kalbos vertimui
Kalbos paslauga gali ne tik konvertuoti kalbą į tekstą ta pačia kalba, bet ir išversti rezultatą į kitas kalbas.
Užduotis – naudokite kalbos paslaugą kalbos vertimui
-
Atidarykite
smart-timer
projektą VS Code ir įsitikinkite, kad terminale įjungta virtuali aplinka. -
Pridėkite šiuos importo sakinius po esamais importais:
from azure.cognitiveservices import speech from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer import requests
Tai importuoja klases, naudojamas kalbos vertimui, ir
requests
biblioteką, kuri bus naudojama vėliau šioje pamokoje skambinant į Translator paslaugą. -
Jūsų išmanusis laikmatis turės nustatytas 2 kalbas – serverio kalbą, kuri buvo naudojama LUIS mokymui (ta pati kalba taip pat naudojama pranešimams, skirtiems vartotojui), ir vartotojo kalbą. Atnaujinkite
language
kintamąjį, kad jis atitiktų vartotojo kalbą, ir pridėkite naują kintamąjįserver_language
, kuris nurodys kalbą, naudotą LUIS mokymui:language = '<user language>' server_language = '<server language>'
Pakeiskite
<user language>
į kalbos lokalės pavadinimą, kuria kalbėsite, pavyzdžiui,fr-FR
prancūzų kalbai arbazn-HK
kantoniečių kalbai.Pakeiskite
<server language>
į lokalės pavadinimą, naudotą LUIS mokymui.Palaikomų kalbų ir jų lokalės pavadinimų sąrašą galite rasti Microsoft dokumentacijoje apie kalbų ir balsų palaikymą.
💁 Jei nekalbate keliomis kalbomis, galite naudoti tokias paslaugas kaip Bing Translate arba Google Translate, kad išverstų iš jūsų pageidaujamos kalbos į pasirinktą kalbą. Šios paslaugos taip pat gali atkurti išversto teksto garsą. Atkreipkite dėmesį, kad kalbos atpažinimo įrankis gali ignoruoti kai kuriuos jūsų įrenginio garso išvesties signalus, todėl gali prireikti papildomo įrenginio išverstam tekstui atkurti.
Pavyzdžiui, jei LUIS mokote anglų kalba, bet norite naudoti prancūzų kalbą kaip vartotojo kalbą, galite išversti sakinius, tokius kaip „set a 2 minute and 27 second timer“, iš anglų į prancūzų kalbą naudodami Bing Translate, tada naudoti Listen translation mygtuką, kad ištartumėte vertimą į mikrofoną.
-
Pakeiskite
recognizer_config
irrecognizer
deklaracijas į šias:translation_config = SpeechTranslationConfig(subscription=speech_api_key, region=location, speech_recognition_language=language, target_languages=(language, server_language)) recognizer = TranslationRecognizer(translation_config=translation_config)
Tai sukuria vertimo konfigūraciją, kad būtų atpažįstama kalba vartotojo kalba ir sukuriami vertimai vartotojo ir serverio kalbomis. Tada ši konfigūracija naudojama vertimo atpažinimo įrankiui sukurti – kalbos atpažinimo įrankiui, kuris gali išversti kalbos atpažinimo rezultatą į kelias kalbas.
💁 Pradinė kalba turi būti nurodyta
target_languages
, kitaip negausite jokių vertimų. -
Atnaujinkite
recognized
funkciją, pakeisdami visą funkcijos turinį šiuo: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)
Šis kodas patikrina, ar atpažinimo įvykis buvo suaktyvintas dėl to, kad kalba buvo išversta (šis įvykis gali būti suaktyvintas ir kitais atvejais, pavyzdžiui, kai kalba atpažįstama, bet neišverčiama). Jei kalba buvo išversta, ji suranda vertimą
args.result.translations
žodyne, kuris atitinka serverio kalbą.args.result.translations
žodynas yra pagrįstas kalbos dalimi iš lokalės nustatymo, o ne visu nustatymu. Pavyzdžiui, jei prašote vertimo įfr-FR
prancūzų kalbai, žodyne bus įrašasfr
, o nefr-FR
.Išverstas tekstas tada siunčiamas į IoT Hub.
-
Paleiskite šį kodą, kad išbandytumėte vertimus. Įsitikinkite, kad jūsų funkcijų programa veikia, ir paprašykite laikmačio vartotojo kalba, kalbėdami ta kalba patys arba naudodami vertimo programėlę.
(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds.
Išverskite tekstą naudodami Translator paslaugą
Kalbos paslauga nepalaiko teksto vertimo atgal į kalbą, todėl galite naudoti Translator paslaugą tekstui išversti. Ši paslauga turi REST API, kurią galite naudoti tekstui išversti.
Užduotis – naudokite Translator resursą tekstui išversti
-
Pridėkite Translator API raktą po
speech_api_key
:translator_api_key = '<key>'
Pakeiskite
<key>
į jūsų Translator paslaugos resurso API raktą. -
Virš
say
funkcijos apibrėžkitetranslate_text
funkciją, kuri išvers tekstą iš serverio kalbos į vartotojo kalbą:def translate_text(text):
-
Šioje funkcijoje apibrėžkite URL ir antraštes REST API skambučiui:
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' }
Šios API URL nėra specifinis vietovei, vietovė perduodama kaip antraštė. API raktas naudojamas tiesiogiai, todėl, skirtingai nei kalbos paslaugoje, nereikia gauti prieigos rakto iš rakto išdavėjo API.
-
Po to apibrėžkite parametrus ir užklausos turinį:
params = { 'from': server_language, 'to': language } body = [{ 'text' : text }]
params
apibrėžia parametrus, perduodamus API skambučiui, nurodant iš ir į kalbas. Šis skambutis išvers tekstą išfrom
kalbos įto
kalbą.body
nurodo tekstą, kurį reikia išversti. Tai yra masyvas, nes vienu skambučiu galima išversti kelis teksto blokus. -
Atlikite REST API skambutį ir gaukite atsakymą:
response = requests.post(url, headers=headers, params=params, json=body)
Atsakymas, kuris grįžta, yra JSON masyvas, kuriame yra vienas elementas su vertimais. Šis elementas turi masyvą su visų
body
perduotų elementų vertimais.[ { "translations": [ { "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.", "to": "fr" } ] } ]
-
Grąžinkite
text
savybę iš pirmojo vertimo pirmame masyvo elemente:return response.json()[0]['translations'][0]['text']
-
Atnaujinkite
say
funkciją, kad išverstų tekstą prieš sugeneruojant SSML:print('Original:', text) text = translate_text(text) print('Translated:', text)
Šis kodas taip pat išspausdina originalią ir išverstą teksto versijas konsolėje.
-
Paleiskite savo kodą. Įsitikinkite, kad jūsų funkcijų programa veikia, ir paprašykite laikmačio vartotojo kalba, kalbėdami ta kalba patys arba naudodami vertimo programėlę.
(.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.
💁 Dėl skirtingų būdų, kaip galima pasakyti tą patį skirtingomis kalbomis, galite gauti vertimus, kurie šiek tiek skiriasi nuo pavyzdžių, kuriuos pateikėte LUIS. Jei taip nutinka, pridėkite daugiau pavyzdžių į LUIS, pertreniruokite ir vėl paskelbkite modelį.
💁 Šį kodą galite rasti code/virtual-iot-device aplanke.
😀 Jūsų daugiakalbis laikmačio programa buvo sėkminga!
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant AI vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, prašome atkreipti dėmesį, kad automatiniai vertimai gali turėti klaidų ar netikslumų. Originalus dokumentas jo gimtąja kalba turėtų būti laikomas autoritetingu šaltiniu. Kritinei informacijai rekomenduojama profesionali žmogaus vertimo paslauga. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius naudojant šį vertimą.