4.7 KiB
Teksto į kalbą - Virtualus IoT įrenginys
Šioje pamokos dalyje rašysite kodą, kuris konvertuos tekstą į kalbą, naudodamas kalbos paslaugą.
Konvertuoti tekstą į kalbą
Kalbos paslaugų SDK, kurį naudojote ankstesnėje pamokoje tekstui konvertuoti į kalbą, taip pat gali būti naudojamas tekstui konvertuoti atgal į kalbą. Prašant kalbos, reikia nurodyti balsą, kuris bus naudojamas, nes kalba gali būti generuojama naudojant įvairius balsus.
Kiekviena kalba palaiko įvairius balsus, o kalbos paslaugų SDK galite gauti sąrašą balsų, palaikomų kiekvienai kalbai.
Užduotis - konvertuoti tekstą į kalbą
-
Atidarykite
smart-timer
projektą VS Code ir įsitikinkite, kad terminale įkeltas virtualus aplinkos nustatymas. -
Importuokite
SpeechSynthesizer
išazure.cognitiveservices.speech
paketo, pridėdami jį prie esamų importų:from azure.cognitiveservices.speech import SpeechConfig, SpeechRecognizer, SpeechSynthesizer
-
Virš
say
funkcijos sukurkite kalbos konfigūraciją, kuri bus naudojama su kalbos sintezatoriumi:speech_config = SpeechConfig(subscription=speech_api_key, region=location) speech_config.speech_synthesis_language = language speech_synthesizer = SpeechSynthesizer(speech_config=speech_config)
Tai naudoja tą patį API raktą, vietą ir kalbą, kurie buvo naudojami atpažinimo įrankyje.
-
Po to pridėkite šį kodą, kad gautumėte balsą ir nustatytumėte jį kalbos konfigūracijoje:
voices = speech_synthesizer.get_voices_async().get().voices first_voice = next(x for x in voices if x.locale.lower() == language.lower()) speech_config.speech_synthesis_voice_name = first_voice.short_name
Šis kodas gauna visų galimų balsų sąrašą, tada suranda pirmą balsą, kuris atitinka naudojamą kalbą.
💁 Visą palaikomų balsų sąrašą galite rasti Microsoft Docs kalbų ir balsų palaikymo dokumentacijoje. Jei norite naudoti konkretų balsą, galite pašalinti šią funkciją ir tiesiogiai nurodyti balsą pagal šios dokumentacijos balsų pavadinimą. Pavyzdžiui:
speech_config.speech_synthesis_voice_name = 'hi-IN-SwaraNeural'
-
Atnaujinkite
say
funkcijos turinį, kad sugeneruotumėte SSML atsakymui:ssml = f'<speak version=\'1.0\' xml:lang=\'{language}\'>' ssml += f'<voice xml:lang=\'{language}\' name=\'{first_voice.short_name}\'>' ssml += text ssml += '</voice>' ssml += '</speak>'
-
Po to sustabdykite kalbos atpažinimą, perskaitykite SSML, tada vėl paleiskite atpažinimą:
recognizer.stop_continuous_recognition() speech_synthesizer.speak_ssml(ssml) recognizer.start_continuous_recognition()
Atpažinimas sustabdomas, kol tekstas yra skaitomas, kad būtų išvengta situacijos, kai laikmačio paleidimo pranešimas yra atpažįstamas, siunčiamas į LUIS ir galimai interpretuojamas kaip naujo laikmačio nustatymo užklausa.
💁 Galite tai išbandyti, iškomentuodami eilutes, kurios sustabdo ir vėl paleidžia atpažinimą. Nustatykite vieną laikmatį, ir galite pastebėti, kad pranešimas nustato naują laikmatį, kuris sukelia naują pranešimą, vedantį į naują laikmatį, ir taip be galo!
-
Paleiskite programą ir įsitikinkite, kad funkcijų programa taip pat veikia. Nustatykite kelis laikmačius, ir išgirsite balsu sakomą atsakymą, kad jūsų laikmatis buvo nustatytas, o vėliau kitą atsakymą, kai laikmatis baigsis.
💁 Šį kodą galite rasti code-spoken-response/virtual-iot-device aplanke.
😀 Jūsų laikmačio programa buvo sėkminga!
Atsakomybės apribojimas:
Šis dokumentas buvo išverstas naudojant dirbtinio intelekto vertimo paslaugą Co-op Translator. Nors siekiame tikslumo, atkreipiame 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 naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus aiškinimus, kylančius dėl šio vertimo naudojimo.