11 KiB
Переклад мови - Raspberry Pi
У цій частині уроку ви напишете код для перекладу тексту за допомогою сервісу перекладу.
Перетворення тексту в мову за допомогою сервісу перекладу
REST API сервісу мовлення не підтримує прямий переклад, але ви можете використовувати сервіс Translator для перекладу тексту, згенерованого сервісом перетворення мови в текст, а також тексту для озвучення відповіді. Цей сервіс має REST API, який можна використовувати для перекладу тексту.
Завдання - використання ресурсу перекладача для перекладу тексту
-
Ваш розумний таймер матиме встановлені 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, щоб озвучити переклад у ваш мікрофон.
-
Додайте ключ API перекладача під змінною
speech_api_key
:translator_api_key = '<key>'
Замініть
<key>
на ключ API для вашого ресурсу сервісу перекладача. -
Над функцією
say
визначте функціюtranslate_text
, яка буде перекладати текст з мови сервера на мову користувача:def translate_text(text, from_language, to_language):
Мови
from
іto
передаються в цю функцію — ваш додаток повинен конвертувати з мови користувача на мову сервера під час розпізнавання мови і з мови сервера на мову користувача під час надання озвученого зворотного зв’язку. -
У цій функції визначте 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 видачі токенів.
-
Нижче визначте параметри та тіло для виклику:
params = { 'from': from_language, 'to': to_language } body = [{ 'text' : text }]
params
визначає параметри, які передаються у виклик API, передаючи мовиfrom
іto
. Цей виклик перекладатиме текст з мовиfrom
на мовуto
.body
містить текст для перекладу. Це масив, оскільки кілька блоків тексту можуть бути перекладені в одному виклику. -
Виконайте виклик REST API і отримайте відповідь:
response = requests.post(url, headers=headers, params=params, json=body)
Відповідь, що повертається, є JSON-масивом, який містить один елемент із перекладами. Цей елемент має масив із перекладами всіх елементів, переданих у тілі запиту.
[ { "translations": [ { "text": "Set a 2 minute 27 second timer.", "to": "en" } ] } ]
-
Поверніть властивість
test
з першого перекладу з першого елемента масиву:return response.json()[0]['translations'][0]['text']
-
Оновіть цикл
while True
, щоб перекладати текст із викликуconvert_speech_to_text
з мови користувача на мову сервера: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)
Цей код також виводить оригінальну та перекладену версії тексту в консоль.
-
Оновіть функцію
say
, щоб перекладати текст для озвучення з мови сервера на мову користувача:def say(text): print('Original:', text) text = translate_text(text, server_language, language) print('Translated:', text) speech = get_speech(text) play_speech(speech)
Цей код також виводить оригінальну та перекладену версії тексту в консоль.
-
Запустіть ваш код. Переконайтеся, що ваш функціональний додаток працює, і запросіть таймер мовою користувача, або говорячи цією мовою самостійно, або використовуючи додаток для перекладу.
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.
💁 Через різні способи висловлювання в різних мовах ви можете отримати переклади, які трохи відрізняються від прикладів, які ви надали LUIS. У такому випадку додайте більше прикладів у LUIS, повторно навчіть і знову опублікуйте модель.
💁 Ви можете знайти цей код у папці code/pi.
😀 Ваш багатомовний таймер працює успішно!
Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.