You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/lt/6-consumer/lessons/4-multiple-language-support/pi-translate-speech.md

7.5 KiB

Išversti kalbą - Raspberry Pi

Šioje pamokos dalyje rašysite kodą, skirtą tekstui versti naudojant vertimo paslaugą.

Konvertuokite tekstą į kalbą naudodami vertimo paslaugą

Kalbos paslaugos REST API nepalaiko tiesioginių vertimų, tačiau galite naudoti Vertėjo paslaugą, kad išverstumėte tekstą, sugeneruotą kalbos į tekstą paslaugos, ir atsakymo tekstą. Ši paslauga turi REST API, kurią galite naudoti tekstui versti.

Užduotis - naudokite vertėjo išteklius tekstui versti

  1. 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 vartotojui kurti), ir vartotojo kalbą. Atnaujinkite language kintamąjį, kad jis atitiktų kalbą, kuria kalbės vartotojas, ir pridėkite naują kintamąjį, pavadintą 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 arba zn-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šverstumėte iš savo pageidaujamos kalbos į pasirinktą kalbą. Šios paslaugos taip pat gali atkurti išverstą tekstą kaip garsą.

    Pavyzdžiui, jei LUIS mokote anglų kalba, bet norite naudoti prancūzų kalbą kaip vartotojo kalbą, galite išversti sakinius, tokius kaip „nustatykite 2 minučių ir 27 sekundžių laikmatį“, iš anglų į prancūzų kalbą naudodami Bing Translate, tada naudokite mygtuką Klausyti vertimo, kad įrašytumėte vertimą į mikrofoną.

    Mygtukas „Klausyti vertimo“ Bing Translate

  2. Pridėkite vertėjo API raktą po speech_api_key:

    translator_api_key = '<key>'
    

    Pakeiskite <key> į savo vertėjo paslaugos ištekliaus API raktą.

  3. Virš say funkcijos apibrėžkite translate_text funkciją, kuri išvers tekstą iš serverio kalbos į vartotojo kalbą:

    def translate_text(text, from_language, to_language):
    

    Šiai funkcijai perduodamos pradinė ir tikslinė kalbos - jūsų programa turi konvertuoti iš vartotojo kalbos į serverio kalbą, kai atpažįstama kalba, ir iš serverio kalbos į vartotojo kalbą, kai pateikiamas atsakymas.

  4. Šios funkcijos viduje apibrėžkite URL ir antraštes REST API užklausai:

    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 žetono iš žetonų išdavimo API.

  5. Po to apibrėžkite parametrus ir užklausos turinį:

    params = {
        'from': from_language,
        'to': to_language
    }
    
    body = [{
        'text' : text
    }]
    

    params apibrėžia parametrus, perduodamus API užklausai, nurodant pradinę ir tikslinę kalbas. Ši užklausa išvers tekstą iš pradinės kalbos į tikslinę kalbą.

    body nurodo tekstą, kurį reikia išversti. Tai yra masyvas, nes vienoje užklausoje galima išversti kelis teksto blokus.

  6. Atlikite REST API užklausą ir gaukite atsakymą:

    response = requests.post(url, headers=headers, params=params, json=body)
    

    Atsakymas yra JSON masyvas, kuriame yra vienas elementas su vertimais. Šis elementas turi masyvą su visų body perduotų elementų vertimais.

    [
        {
            "translations": [
                {
                    "text": "Set a 2 minute 27 second timer.",
                    "to": "en"
                }
            ]
        }
    ]
    
  7. Grąžinkite pirmojo masyvo elemento pirmojo vertimo test savybę:

    return response.json()[0]['translations'][0]['text']
    
  8. Atnaujinkite while True ciklą, kad išverstų tekstą iš convert_speech_to_text funkcijos iš vartotojo kalbos į serverio kalbą:

    if len(text) > 0:
        print('Original:', text)
        text = translate_text(text, language, server_language)
        print('Translated:', text)
    
        message = Message(json.dumps({ 'speech': text }))
        device_client.send_message(message)
    

    Šis kodas taip pat išspausdina pradinę ir išverstą teksto versijas konsolėje.

  9. Atnaujinkite say funkciją, kad išverstų tekstą iš serverio kalbos į vartotojo kalbą:

    def say(text):
        print('Original:', text)
        text = translate_text(text, server_language, language)
        print('Translated:', text)
        speech = get_speech(text)
        play_speech(speech)
    

    Šis kodas taip pat išspausdina pradinę ir išverstą teksto versijas konsolėje.

  10. 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ę.

    pi@raspberrypi:~/smart-timer $ python3 app.py
    Connecting
    Connected
    Using voice fr-FR-DeniseNeural
    Original: Définir une minuterie de 2 minutes et 27 secondes.
    Translated: 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ų sakinių formuluočių 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/pi aplanke.

😀 Jūsų daugiakalbis laikmatis buvo sėkmingas!


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 naudoti profesionalų žmogaus vertimą. Mes neprisiimame atsakomybės už nesusipratimus ar klaidingus interpretavimus, atsiradusius dėl šio vertimo naudojimo.