12 KiB
Preložiť reč - Wio Terminal
V tejto časti lekcie napíšete kód na preklad textu pomocou prekladateľskej služby.
Prevod textu na reč pomocou prekladateľskej služby
REST API služby reči nepodporuje priame preklady, namiesto toho môžete použiť prekladateľskú službu na preklad textu generovaného službou prevodu reči na text a textu hovorených odpovedí. Táto služba má REST API, ktoré môžete použiť na preklad textu, ale aby bolo jej použitie jednoduchšie, zabalíme ju do ďalšieho HTTP triggera vo vašej aplikácii funkcií.
Úloha - vytvorte serverless funkciu na preklad textu
-
Otvorte svoj projekt
smart-timer-trigger
vo VS Code a otvorte terminál, pričom sa uistite, že virtuálne prostredie je aktivované. Ak nie, ukončite a znova vytvorte terminál. -
Otvorte súbor
local.settings.json
a pridajte nastavenia pre API kľúč prekladateľskej služby a jej umiestnenie:"TRANSLATOR_KEY": "<key>", "TRANSLATOR_LOCATION": "<location>"
Nahraďte
<key>
API kľúčom pre váš zdroj prekladateľskej služby. Nahraďte<location>
umiestnením, ktoré ste použili pri vytváraní zdroja prekladateľskej služby. -
Pridajte nový HTTP trigger do tejto aplikácie s názvom
translate-text
pomocou nasledujúceho príkazu z terminálu VS Code v koreňovom priečinku projektu aplikácie funkcií:func new --name translate-text --template "HTTP trigger"
Týmto sa vytvorí HTTP trigger s názvom
translate-text
. -
Nahraďte obsah súboru
__init__.py
v priečinkutranslate-text
nasledujúcim:import logging import os import requests import azure.functions as func location = os.environ['TRANSLATOR_LOCATION'] translator_key = os.environ['TRANSLATOR_KEY'] def main(req: func.HttpRequest) -> func.HttpResponse: req_body = req.get_json() from_language = req_body['from_language'] to_language = req_body['to_language'] text = req_body['text'] logging.info(f'Translating {text} from {from_language} to {to_language}') url = f'https://api.cognitive.microsofttranslator.com/translate?api-version=3.0' headers = { 'Ocp-Apim-Subscription-Key': translator_key, 'Ocp-Apim-Subscription-Region': location, 'Content-type': 'application/json' } params = { 'from': from_language, 'to': to_language } body = [{ 'text' : text }] response = requests.post(url, headers=headers, params=params, json=body) return func.HttpResponse(response.json()[0]['translations'][0]['text'])
Tento kód extrahuje text a jazyky z HTTP požiadavky. Potom odošle požiadavku na REST API prekladateľa, pričom jazyky odovzdá ako parametre URL a text na preklad ako telo požiadavky. Nakoniec sa vráti preložený text.
-
Spustite svoju aplikáciu funkcií lokálne. Potom ju môžete zavolať pomocou nástroja ako curl rovnakým spôsobom, ako ste testovali HTTP trigger
text-to-timer
. Uistite sa, že text na preklad a jazyky odovzdávate ako JSON telo:{ "text": "Définir une minuterie de 30 secondes", "from_language": "fr-FR", "to_language": "en-US" }
Tento príklad prekladá Définir une minuterie de 30 secondes z francúzštiny do americkej angličtiny. Vráti Set a 30-second timer.
💁 Tento kód nájdete v priečinku code/functions.
Úloha - použite prekladateľskú funkciu na preklad textu
-
Otvorte projekt
smart-timer
vo VS Code, ak ešte nie je otvorený. -
Váš inteligentný časovač bude mať nastavené 2 jazyky - jazyk servera, ktorý bol použitý na trénovanie LUIS (rovnaký jazyk sa používa aj na vytváranie správ pre používateľa), a jazyk, ktorým hovorí používateľ. Aktualizujte konštantu
LANGUAGE
v hlavičkovom súboreconfig.h
na jazyk, ktorým bude hovoriť používateľ, a pridajte novú konštantu s názvomSERVER_LANGUAGE
pre jazyk použitý na trénovanie LUIS:const char *LANGUAGE = "<user language>"; const char *SERVER_LANGUAGE = "<server language>";
Nahraďte
<user language>
názvom lokality pre jazyk, ktorým budete hovoriť, napríkladfr-FR
pre francúzštinu alebozn-HK
pre kantončinu.Nahraďte
<server language>
názvom lokality pre jazyk použitý na trénovanie LUIS.Zoznam podporovaných jazykov a ich názvov lokalít nájdete v dokumentácii o podpore jazykov a hlasov na Microsoft docs.
💁 Ak nehovoríte viacerými jazykmi, môžete použiť službu ako Bing Translate alebo Google Translate na preklad z vášho preferovaného jazyka do iného jazyka podľa vášho výberu. Tieto služby môžu následne prehrávať zvuk preloženého textu.
Napríklad, ak trénujete LUIS v angličtine, ale chcete používať francúzštinu ako jazyk používateľa, môžete preložiť vety ako "set a 2 minute and 27 second timer" z angličtiny do francúzštiny pomocou Bing Translate, a potom použiť tlačidlo Listen translation na prehranie prekladu do vášho mikrofónu.
-
Pridajte API kľúč prekladateľa a jeho umiestnenie pod
SPEECH_LOCATION
:const char *TRANSLATOR_API_KEY = "<KEY>"; const char *TRANSLATOR_LOCATION = "<LOCATION>";
Nahraďte
<KEY>
API kľúčom pre váš zdroj prekladateľskej služby. Nahraďte<LOCATION>
umiestnením, ktoré ste použili pri vytváraní zdroja prekladateľskej služby. -
Pridajte URL triggera prekladateľa pod
VOICE_URL
:const char *TRANSLATE_FUNCTION_URL = "<URL>";
Nahraďte
<URL>
URL adresou pre HTTP triggertranslate-text
vo vašej aplikácii funkcií. Táto bude rovnaká ako hodnotaTEXT_TO_TIMER_FUNCTION_URL
, okrem názvu funkcie, ktorý budetranslate-text
namiestotext-to-timer
. -
Pridajte nový súbor do priečinka
src
s názvomtext_translator.h
. -
Tento nový hlavičkový súbor
text_translator.h
bude obsahovať triedu na preklad textu. Pridajte do tohto súboru nasledujúce na deklaráciu tejto triedy:#pragma once #include <Arduino.h> #include <ArduinoJson.h> #include <HTTPClient.h> #include <WiFiClient.h> #include "config.h" class TextTranslator { public: private: WiFiClient _client; }; TextTranslator textTranslator;
Toto deklaruje triedu
TextTranslator
, spolu s jej inštanciou. Trieda má jedno pole pre WiFi klienta. -
Do sekcie
public
tejto triedy pridajte metódu na preklad textu:String translateText(String text, String from_language, String to_language) { }
Táto metóda prijíma jazyk, z ktorého sa prekladá, a jazyk, do ktorého sa prekladá. Pri práci s rečou sa reč preloží z jazyka používateľa do jazyka servera LUIS a pri odpovediach sa preloží z jazyka servera LUIS do jazyka používateľa.
-
V tejto metóde pridajte kód na zostavenie JSON tela obsahujúceho text na preklad a jazyky:
DynamicJsonDocument doc(1024); doc["text"] = text; doc["from_language"] = from_language; doc["to_language"] = to_language; String body; serializeJson(doc, body); Serial.print("Translating "); Serial.print(text); Serial.print(" from "); Serial.print(from_language); Serial.print(" to "); Serial.print(to_language);
-
Pod týmto pridajte nasledujúci kód na odoslanie tela do serverless funkcie:
HTTPClient httpClient; httpClient.begin(_client, TRANSLATE_FUNCTION_URL); int httpResponseCode = httpClient.POST(body);
-
Ďalej pridajte kód na získanie odpovede:
String translated_text = ""; if (httpResponseCode == 200) { translated_text = httpClient.getString(); Serial.print("Translated: "); Serial.println(translated_text); } else { Serial.print("Failed to translate text - error "); Serial.println(httpResponseCode); }
-
Nakoniec pridajte kód na uzavretie spojenia a vrátenie preloženého textu:
httpClient.end(); return translated_text;
Úloha - preložte rozpoznanú reč a odpovede
-
Otvorte súbor
main.cpp
. -
Pridajte direktívu
include
na začiatku súboru pre hlavičkový súbor triedyTextTranslator
:#include "text_translator.h"
-
Text, ktorý sa hovorí, keď je časovač nastavený alebo vyprší, je potrebné preložiť. Na tento účel pridajte nasledujúce ako prvý riadok funkcie
say
:text = textTranslator.translateText(text, LANGUAGE, SERVER_LANGUAGE);
Týmto sa text preloží do jazyka používateľa.
-
Vo funkcii
processAudio
sa text získava z nahraného zvuku pomocou volaniaString text = speechToText.convertSpeechToText();
. Po tomto volaní preložte text:String text = speechToText.convertSpeechToText(); text = textTranslator.translateText(text, LANGUAGE, SERVER_LANGUAGE);
Týmto sa text preloží z jazyka používateľa do jazyka používaného na serveri.
-
Zostavte tento kód, nahrajte ho do vášho Wio Terminal a otestujte ho cez sériový monitor. Keď uvidíte
Ready
v sériovom monitore, stlačte tlačidlo C (to na ľavej strane, najbližšie k vypínaču) a hovorte. Uistite sa, že vaša aplikácia funkcií beží, a požiadajte o časovač v jazyku používateľa, buď hovorením týmto jazykom, alebo použitím prekladovej aplikácie.Connecting to WiFi.. Connected! Got access token. Ready. Starting recording... Finished recording Sending speech... Speech sent! {"RecognitionStatus":"Success","DisplayText":"Définir une minuterie de 2 minutes 27 secondes.","Offset":9600000,"Duration":40400000} Translating Définir une minuterie de 2 minutes 27 secondes. from fr-FR to en-US Translated: Set a timer of 2 minutes 27 seconds. Set a timer of 2 minutes 27 seconds. {"seconds": 147} Translating 2 minute 27 second timer started. from en-US to fr-FR Translated: 2 minute 27 seconde minute a commencé. 2 minute 27 seconde minute a commencé. Translating Times up on your 2 minute 27 second timer. from en-US to fr-FR Translated: Chronométrant votre minuterie de 2 minutes 27 secondes. Chronométrant votre minuterie de 2 minutes 27 secondes.
💁 Tento kód nájdete v priečinku code/wio-terminal.
😀 Váš viacjazyčný program časovača bol úspešný!
Upozornenie:
Tento dokument bol preložený pomocou služby na automatický preklad Co-op Translator. Aj keď sa snažíme o presnosť, upozorňujeme, že automatické preklady môžu obsahovať chyby alebo nepresnosti. Pôvodný dokument v jeho pôvodnom jazyku by mal byť považovaný za autoritatívny zdroj. Pre kritické informácie sa odporúča profesionálny ľudský preklad. Nezodpovedáme za akékoľvek nedorozumenia alebo nesprávne interpretácie vyplývajúce z použitia tohto prekladu.