12 KiB
Käännä puhe - Wio Terminal
Tässä osassa oppituntia kirjoitat koodia tekstin kääntämiseen käyttäen käännöspalvelua.
Muunna teksti puheeksi käännöspalvelun avulla
Puhepalvelun REST API ei tue suoria käännöksiä, mutta voit käyttää Translator-palvelua kääntämään tekstin, joka on luotu puheesta tekstiksi -palvelulla, sekä puhutun vastauksen tekstiä. Tämä palvelu tarjoaa REST API:n tekstin kääntämiseen, mutta sen käytön helpottamiseksi se kääritään toiseen HTTP-triggeriin funktiosovelluksessasi.
Tehtävä - luo palveluton funktio tekstin kääntämiseen
-
Avaa
smart-timer-trigger
-projektisi VS Codessa ja avaa terminaali varmistaen, että virtuaaliympäristö on aktivoitu. Jos ei, sulje ja luo terminaali uudelleen. -
Avaa
local.settings.json
-tiedosto ja lisää asetukset käännöspalvelun API-avaimelle ja sijainnille:"TRANSLATOR_KEY": "<key>", "TRANSLATOR_LOCATION": "<location>"
Korvaa
<key>
käännöspalveluresurssisi API-avaimella. Korvaa<location>
sijainnilla, jota käytit luodessasi käännöspalveluresurssin. -
Lisää uusi HTTP-triggeri tähän sovellukseen nimeltä
translate-text
käyttämällä seuraavaa komentoa VS Code -terminaalissa funktiosovelluksen projektin juurikansiossa:func new --name translate-text --template "HTTP trigger"
Tämä luo HTTP-triggerin nimeltä
translate-text
. -
Korvaa
translate-text
-kansion__init__.py
-tiedoston sisältö seuraavalla: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'])
Tämä koodi poimii tekstin ja kielet HTTP-pyynnöstä. Se tekee sitten pyynnön käännöspalvelun REST API:lle, välittäen kielet URL-parametreina ja käännettävän tekstin pyynnön runkona. Lopuksi käännös palautetaan.
-
Aja funktiosovelluksesi paikallisesti. Voit sitten kutsua sitä työkalulla kuten curl samalla tavalla kuin testasit
text-to-timer
HTTP-triggeriä. Muista välittää käännettävä teksti ja kielet JSON-runkoina:{ "text": "Définir une minuterie de 30 secondes", "from_language": "fr-FR", "to_language": "en-US" }
Tämä esimerkki kääntää Définir une minuterie de 30 secondes ranskasta Yhdysvaltain englantiin. Se palauttaa Set a 30-second timer.
💁 Löydät tämän koodin code/functions-kansiosta.
Tehtävä - käytä käännösfunktiota tekstin kääntämiseen
-
Avaa
smart-timer
-projekti VS Codessa, jos se ei ole jo auki. -
Älykäs ajastimesi käyttää kahta kieltä - palvelimen kieltä, jota käytettiin LUIS:n kouluttamiseen (sama kieli käytetään myös käyttäjälle puhuttavien viestien rakentamiseen), ja käyttäjän puhumaa kieltä. Päivitä
LANGUAGE
-vakioconfig.h
-otsikkotiedostossa käyttäjän puhumaksi kieleksi ja lisää uusi vakio nimeltäSERVER_LANGUAGE
LUIS:n koulutuksessa käytetylle kielelle:const char *LANGUAGE = "<user language>"; const char *SERVER_LANGUAGE = "<server language>";
Korvaa
<user language>
kielen paikallisnimi, jolla aiot puhua, esimerkiksifr-FR
ranskalle taizn-HK
kantonille.Korvaa
<server language>
LUIS:n koulutuksessa käytetyn kielen paikallisnimi.Löydät tuettujen kielten ja niiden paikallisnimien listan Microsoftin dokumentaatiosta.
💁 Jos et puhu useita kieliä, voit käyttää palvelua kuten Bing Translate tai Google Translate kääntääksesi suosikkikielestäsi valitsemaasi kieleen. Nämä palvelut voivat myös toistaa käännetyn tekstin äänenä.
Esimerkiksi, jos koulutat LUIS:n englanniksi, mutta haluat käyttää ranskaa käyttäjän kielenä, voit kääntää lauseita kuten "set a 2 minute and 27 second timer" englannista ranskaksi Bing Translaten avulla ja käyttää Kuuntele käännös-painiketta puhuaksesi käännöksen mikrofoniin.
-
Lisää käännöspalvelun API-avain ja sijainti
SPEECH_LOCATION
-kohdan alle:const char *TRANSLATOR_API_KEY = "<KEY>"; const char *TRANSLATOR_LOCATION = "<LOCATION>";
Korvaa
<KEY>
käännöspalveluresurssisi API-avaimella. Korvaa<LOCATION>
sijainnilla, jota käytit luodessasi käännöspalveluresurssin. -
Lisää käännöspalvelun triggerin URL
VOICE_URL
-kohdan alle:const char *TRANSLATE_FUNCTION_URL = "<URL>";
Korvaa
<URL>
translate-text
HTTP-triggerin URL:lla funktiosovelluksessasi. Tämä on sama kuinTEXT_TO_TIMER_FUNCTION_URL
-arvo, paitsi että funktiolla on nimitranslate-text
eikätext-to-timer
. -
Lisää uusi tiedosto
src
-kansioon nimeltätext_translator.h
. -
Tämä uusi
text_translator.h
-otsikkotiedosto sisältää luokan tekstin kääntämiseen. Lisää tiedostoon seuraava luokan määrittämiseksi:#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;
Tämä määrittää
TextTranslator
-luokan sekä sen instanssin. Luokalla on yksi kenttä WiFi-asiakkaalle. -
Lisää tämän luokan
public
-osioon metodi tekstin kääntämiseen:String translateText(String text, String from_language, String to_language) { }
Tämä metodi ottaa kielen, josta käännetään, ja kielen, johon käännetään. Kun käsitellään puhetta, puhe käännetään käyttäjän kielestä LUIS-palvelimen kieleen, ja vastauksia annettaessa se käännetään LUIS-palvelimen kielestä käyttäjän kieleen.
-
Lisää tähän metodiin koodi JSON-runkojen rakentamiseksi, jotka sisältävät käännettävän tekstin ja kielet:
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);
-
Tämän alle lisää seuraava koodi rungon lähettämiseksi palveluttomaan funktiosovellukseen:
HTTPClient httpClient; httpClient.begin(_client, TRANSLATE_FUNCTION_URL); int httpResponseCode = httpClient.POST(body);
-
Lisää seuraavaksi koodi vastauksen hakemiseksi:
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); }
-
Lopuksi lisää koodi yhteyden sulkemiseksi ja käännetyn tekstin palauttamiseksi:
httpClient.end(); return translated_text;
Tehtävä - käännä tunnistettu puhe ja vastaukset
-
Avaa
main.cpp
-tiedosto. -
Lisää tiedoston alkuun include-direktiivi
TextTranslator
-luokan otsikkotiedostolle:#include "text_translator.h"
-
Teksti, joka sanotaan, kun ajastin asetetaan tai päättyy, täytyy kääntää. Tee tämä lisäämällä seuraava
say
-funktion ensimmäiseksi riviksi:text = textTranslator.translateText(text, LANGUAGE, SERVER_LANGUAGE);
Tämä kääntää tekstin käyttäjän kielelle.
-
processAudio
-funktiossa teksti haetaan tallennetusta äänestäString text = speechToText.convertSpeechToText();
-kutsulla. Tämän kutsun jälkeen käännä teksti:String text = speechToText.convertSpeechToText(); text = textTranslator.translateText(text, LANGUAGE, SERVER_LANGUAGE);
Tämä kääntää tekstin käyttäjän kielestä palvelimella käytettyyn kieleen.
-
Rakenna tämä koodi, lataa se Wio Terminaliin ja testaa se sarjamonitorin kautta. Kun näet
Ready
sarjamonitorissa, paina C-painiketta (vasemmanpuoleinen painike, lähimpänä virtakytkintä) ja puhu. Varmista, että funktiosovelluksesi on käynnissä, ja pyydä ajastinta käyttäjän kielellä joko puhumalla itse tai käyttämällä käännössovellusta.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.
💁 Löydät tämän koodin code/wio-terminal-kansiosta.
😀 Monikielinen ajastinohjelmasi onnistui!
Vastuuvapauslauseke:
Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua Co-op Translator. Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä.