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/bg/6-consumer/lessons/4-multiple-language-support/virtual-device-translate-sp...

15 KiB

Превод на реч - Виртуално IoT устройство

В тази част от урока ще напишете код за превод на реч при преобразуване в текст с помощта на услугата за реч, след това ще преведете текста с услугата Translator, преди да генерирате говорен отговор.

Използване на услугата за реч за превод на реч

Услугата за реч може да преобразува реч не само в текст на същия език, но и да преведе резултата на други езици.

Задача - използване на услугата за реч за превод на реч

  1. Отворете проекта smart-timer в VS Code и се уверете, че виртуалната среда е заредена в терминала.

  2. Добавете следните изявления за импортиране под съществуващите импорти:

    from azure.cognitiveservices import speech
    from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer
    import requests
    

    Това импортира класове, използвани за превод на реч, и библиотеката requests, която ще се използва за извикване на услугата Translator по-късно в този урок.

  3. Вашият смарт таймер ще има зададени 2 езика - езикът на сървъра, който е използван за обучение на LUIS (същият език се използва и за създаване на съобщенията за потребителя), и езикът, на който говори потребителят. Актуализирайте променливата language, за да бъде езикът, на който ще говори потребителят, и добавете нова променлива, наречена server_language, за езика, използван за обучение на LUIS:

    language = '<user language>'
    server_language = '<server language>'
    

    Заменете <user language> с името на локала за езика, на който ще говорите, например fr-FR за френски или zn-HK за кантонски.

    Заменете <server language> с името на локала за езика, използван за обучение на LUIS.

    Можете да намерите списък с поддържаните езици и техните имена на локали в документацията за поддръжка на език и глас в Microsoft docs.

    💁 Ако не говорите няколко езика, можете да използвате услуга като Bing Translate или Google Translate, за да преведете от предпочитания от вас език на избран от вас език. Тези услуги могат да възпроизвеждат аудио на преведения текст. Имайте предвид, че разпознавачът на реч ще игнорира някои аудио изходи от вашето устройство, така че може да се наложи да използвате допълнително устройство, за да възпроизведете преведения текст.

    Например, ако обучите LUIS на английски, но искате да използвате френски като език на потребителя, можете да преведете изречения като "set a 2 minute and 27 second timer" от английски на френски с Bing Translate, след това използвайте бутона Listen translation, за да говорите превода в микрофона си.

    Бутонът Listen translation в Bing Translate

  4. Заменете декларациите recognizer_config и recognizer със следното:

    translation_config = SpeechTranslationConfig(subscription=speech_api_key,
                                                 region=location,
                                                 speech_recognition_language=language,
                                                 target_languages=(language, server_language))
    
    recognizer = TranslationRecognizer(translation_config=translation_config)
    

    Това създава конфигурация за превод, за да разпознае речта на езика на потребителя и да създаде преводи на езика на потребителя и сървъра. След това използва тази конфигурация, за да създаде разпознавател за превод - разпознавател на реч, който може да преведе резултата от разпознаването на реч на няколко езика.

    💁 Оригиналният език трябва да бъде посочен в target_languages, в противен случай няма да получите никакви преводи.

  5. Актуализирайте функцията recognized, като замените цялото съдържание на функцията със следното:

    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)
    

    Този код проверява дали събитието за разпознаване е било задействано, защото речта е била преведена (това събитие може да се задейства и в други случаи, като например когато речта е разпозната, но не е преведена). Ако речта е била преведена, тя намира превода в речника args.result.translations, който съответства на езика на сървъра.

    Речникът args.result.translations е ключиран според езиковата част на настройката за локал, а не цялата настройка. Например, ако поискате превод на fr-FR за френски, речникът ще съдържа запис за fr, а не за fr-FR.

    Преведеният текст след това се изпраща към IoT Hub.

  6. Стартирайте този код, за да тествате преводите. Уверете се, че вашето приложение функционира, и поискайте таймер на езика на потребителя, като говорите на този език сами или използвате приложение за превод.

    (.venv) ➜  smart-timer python app.py
    Connecting
    Connected
    Translated text: Set a timer of 2 minutes and 27 seconds.
    

Превод на текст с услугата Translator

Услугата за реч не поддържа превод на текст обратно в реч, вместо това можете да използвате услугата Translator, за да преведете текста. Тази услуга има REST API, който можете да използвате за превод на текста.

Задача - използване на ресурса Translator за превод на текст

  1. Добавете API ключа на Translator под speech_api_key:

    translator_api_key = '<key>'
    

    Заменете <key> с API ключа за вашия ресурс на услугата Translator.

  2. Над функцията say дефинирайте функция translate_text, която ще превежда текст от езика на сървъра към езика на потребителя:

    def translate_text(text):
    
  3. Вътре в тази функция дефинирайте URL и заглавията за 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 за този API не е специфичен за местоположение, вместо това местоположението се предава като заглавие. API ключът се използва директно, така че за разлика от услугата за реч няма нужда да се получава токен за достъп от API за издаване на токени.

  4. Под това дефинирайте параметрите и тялото за извикването:

    params = {
        'from': server_language,
        'to': language
    }
    
    body = [{
        'text' : text
    }]
    

    params дефинира параметрите, които да се предадат на API извикването, като се предават езиците from и to. Това извикване ще преведе текст от езика from на езика to.

    body съдържа текста за превод. Това е масив, тъй като множество блокове текст могат да бъдат преведени в едно извикване.

  5. Направете извикването към REST API и вземете отговора:

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

    Отговорът, който се връща, е JSON масив, с един елемент, който съдържа преводите. Този елемент има масив за преводите на всички елементи, предадени в тялото.

    [
        {
            "translations": [
                {
                    "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.",
                    "to": "fr"
                }
            ]
        }
    ]
    
  6. Върнете свойството text от първия превод от първия елемент в масива:

    return response.json()[0]['translations'][0]['text']
    
  7. Актуализирайте функцията say, за да преведе текста, който трябва да бъде казан, преди да се генерира SSML:

    print('Original:', text)
    text = translate_text(text)
    print('Translated:', text)
    

    Този код също така отпечатва оригиналната и преведената версия на текста в конзолата.

  8. Стартирайте вашия код. Уверете се, че вашето приложение функционира, и поискайте таймер на езика на потребителя, като говорите на този език сами или използвате приложение за превод.

    (.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.
    

    💁 Поради различните начини за изразяване на нещо на различни езици, може да получите преводи, които са малко различни от примерите, които сте дали на LUIS. Ако това е така, добавете повече примери към LUIS, обучете отново и публикувайте модела.

💁 Можете да намерите този код в папката code/virtual-iot-device.

😀 Вашата многоезична програма за таймер беше успешна!


Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.