11 KiB
Tradurre il parlato - Dispositivo IoT Virtuale
In questa parte della lezione, scriverai del codice per tradurre il parlato durante la conversione in testo utilizzando il servizio di riconoscimento vocale, quindi tradurrai il testo utilizzando il servizio Translator prima di generare una risposta vocale.
Utilizzare il servizio di riconoscimento vocale per tradurre il parlato
Il servizio di riconoscimento vocale può prendere il parlato e non solo convertirlo in testo nella stessa lingua, ma anche tradurre l'output in altre lingue.
Attività - utilizzare il servizio di riconoscimento vocale per tradurre il parlato
-
Apri il progetto
smart-timer
in VS Code e assicurati che l'ambiente virtuale sia caricato nel terminale. -
Aggiungi le seguenti istruzioni di importazione sotto gli import esistenti:
from azure.cognitiveservices import speech from azure.cognitiveservices.speech.translation import SpeechTranslationConfig, TranslationRecognizer import requests
Questo importa le classi utilizzate per tradurre il parlato e una libreria
requests
che verrà utilizzata per effettuare una chiamata al servizio Translator più avanti in questa lezione. -
Il tuo timer intelligente avrà impostate 2 lingue: la lingua del server utilizzata per addestrare LUIS (la stessa lingua è anche utilizzata per costruire i messaggi da comunicare all'utente) e la lingua parlata dall'utente. Aggiorna la variabile
language
per indicare la lingua che verrà parlata dall'utente e aggiungi una nuova variabile chiamataserver_language
per la lingua utilizzata per addestrare LUIS:language = '<user language>' server_language = '<server language>'
Sostituisci
<user language>
con il nome della locale della lingua che utilizzerai per parlare, ad esempiofr-FR
per il francese ozn-HK
per il cantonese.Sostituisci
<server language>
con il nome della locale della lingua utilizzata per addestrare LUIS.Puoi trovare un elenco delle lingue supportate e dei loro nomi di locale nella documentazione sul supporto delle lingue e delle voci su Microsoft Docs.
💁 Se non parli più lingue, puoi utilizzare un servizio come Bing Translate o Google Translate per tradurre dalla tua lingua preferita a una lingua a tua scelta. Questi servizi possono poi riprodurre l'audio del testo tradotto. Tieni presente che il riconoscitore vocale ignorerà alcuni output audio dal tuo dispositivo, quindi potresti dover utilizzare un dispositivo aggiuntivo per riprodurre il testo tradotto.
Ad esempio, se addestri LUIS in inglese ma vuoi utilizzare il francese come lingua dell'utente, puoi tradurre frasi come "imposta un timer di 2 minuti e 27 secondi" dall'inglese al francese utilizzando Bing Translate, quindi utilizzare il pulsante Ascolta traduzione per pronunciare la traduzione nel tuo microfono.
-
Sostituisci le dichiarazioni
recognizer_config
erecognizer
con le seguenti:translation_config = SpeechTranslationConfig(subscription=speech_api_key, region=location, speech_recognition_language=language, target_languages=(language, server_language)) recognizer = TranslationRecognizer(translation_config=translation_config)
Questo crea una configurazione di traduzione per riconoscere il parlato nella lingua dell'utente e creare traduzioni nella lingua dell'utente e del server. Successivamente utilizza questa configurazione per creare un riconoscitore di traduzione, un riconoscitore vocale che può tradurre l'output del riconoscimento vocale in più lingue.
💁 La lingua originale deve essere specificata nei
target_languages
, altrimenti non otterrai alcuna traduzione. -
Aggiorna la funzione
recognized
, sostituendo l'intero contenuto della funzione con il seguente: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)
Questo codice verifica se l'evento riconosciuto è stato attivato perché il parlato è stato tradotto (questo evento può essere attivato in altri momenti, ad esempio quando il parlato è stato riconosciuto ma non tradotto). Se il parlato è stato tradotto, trova la traduzione nel dizionario
args.result.translations
che corrisponde alla lingua del server.Il dizionario
args.result.translations
è indicizzato in base alla parte linguistica dell'impostazione della locale, non all'intera impostazione. Ad esempio, se richiedi una traduzione infr-FR
per il francese, il dizionario conterrà una voce perfr
, non perfr-FR
.Il testo tradotto viene quindi inviato all'IoT Hub.
-
Esegui questo codice per testare le traduzioni. Assicurati che la tua app di funzione sia in esecuzione e richiedi un timer nella lingua dell'utente, parlando direttamente in quella lingua o utilizzando un'app di traduzione.
(.venv) ➜ smart-timer python app.py Connecting Connected Translated text: Set a timer of 2 minutes and 27 seconds.
Tradurre il testo utilizzando il servizio Translator
Il servizio di riconoscimento vocale non supporta la traduzione del testo in parlato, ma puoi utilizzare il servizio Translator per tradurre il testo. Questo servizio ha un'API REST che puoi utilizzare per tradurre il testo.
Attività - utilizzare la risorsa Translator per tradurre il testo
-
Aggiungi la chiave API del Translator sotto la variabile
speech_api_key
:translator_api_key = '<key>'
Sostituisci
<key>
con la chiave API per la tua risorsa del servizio Translator. -
Sopra la funzione
say
, definisci una funzionetranslate_text
che tradurrà il testo dalla lingua del server alla lingua dell'utente:def translate_text(text):
-
All'interno di questa funzione, definisci l'URL e gli header per la chiamata all'API REST:
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' }
L'URL per questa API non è specifico per la posizione, invece la posizione viene passata come header. La chiave API viene utilizzata direttamente, quindi a differenza del servizio di riconoscimento vocale non è necessario ottenere un token di accesso dall'API del token issuer.
-
Sotto questo, definisci i parametri e il corpo per la chiamata:
params = { 'from': server_language, 'to': language } body = [{ 'text' : text }]
I
params
definiscono i parametri da passare alla chiamata API, passando le lingue di origine e di destinazione. Questa chiamata tradurrà il testo dalla linguafrom
alla linguato
.Il
body
contiene il testo da tradurre. Questo è un array, poiché più blocchi di testo possono essere tradotti nella stessa chiamata. -
Effettua la chiamata all'API REST e ottieni la risposta:
response = requests.post(url, headers=headers, params=params, json=body)
La risposta che arriva è un array JSON, con un elemento che contiene le traduzioni. Questo elemento ha un array per le traduzioni di tutti gli elementi passati nel corpo.
[ { "translations": [ { "text": "Chronométrant votre minuterie de 2 minutes 27 secondes.", "to": "fr" } ] } ]
-
Restituisci la proprietà
text
dalla prima traduzione del primo elemento nell'array:return response.json()[0]['translations'][0]['text']
-
Aggiorna la funzione
say
per tradurre il testo da pronunciare prima che venga generato l'SSML:print('Original:', text) text = translate_text(text) print('Translated:', text)
Questo codice stampa anche la versione originale e tradotta del testo nella console.
-
Esegui il tuo codice. Assicurati che la tua app di funzione sia in esecuzione e richiedi un timer nella lingua dell'utente, parlando direttamente in quella lingua o utilizzando un'app di traduzione.
(.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.
💁 A causa dei diversi modi di esprimere qualcosa in lingue diverse, potresti ottenere traduzioni leggermente diverse dagli esempi forniti a LUIS. In tal caso, aggiungi più esempi a LUIS, riaddestra e ripubblica il modello.
💁 Puoi trovare questo codice nella cartella code/virtual-iot-device.
😀 Il tuo programma di timer multilingue è stato un successo!
Disclaimer:
Questo documento è stato tradotto utilizzando il servizio di traduzione AI Co-op Translator. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione.