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/it/6-consumer/lessons/4-multiple-language-support/pi-translate-speech.md

7.9 KiB

Tradurre il discorso - Raspberry Pi

In questa parte della lezione, scriverai codice per tradurre il testo utilizzando il servizio di traduzione.

Convertire il testo in parlato utilizzando il servizio di traduzione

L'API REST del servizio di sintesi vocale non supporta traduzioni dirette, ma puoi utilizzare il servizio Translator per tradurre il testo generato dal servizio di riconoscimento vocale e il testo della risposta vocale. Questo servizio dispone di un'API REST che puoi utilizzare per tradurre il testo.

Attività - utilizzare la risorsa Translator per tradurre il testo

  1. 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 con la lingua che sarà parlata dall'utente e aggiungi una nuova variabile chiamata server_language per la lingua utilizzata per addestrare LUIS:

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

    Sostituisci <user language> con il nome della locale per la lingua che utilizzerai, ad esempio fr-FR per il francese o zn-HK per il cantonese.

    Sostituisci <server language> con il nome della locale per la 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 anche riprodurre l'audio del testo tradotto.

    Ad esempio, se addestri LUIS in inglese ma vuoi utilizzare il francese come lingua 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 microfono.

    Il pulsante Ascolta traduzione su Bing Translate

  2. Aggiungi la chiave API del servizio Translator sotto la variabile speech_api_key:

    translator_api_key = '<key>'
    

    Sostituisci <key> con la chiave API per la risorsa del servizio Translator.

  3. Sopra la funzione say, definisci una funzione translate_text che tradurrà il testo dalla lingua del server alla lingua dell'utente:

    def translate_text(text, from_language, to_language):
    

    Le lingue di origine e destinazione vengono passate a questa funzione: la tua app deve convertire dalla lingua utente alla lingua del server quando riconosce il parlato e dalla lingua del server alla lingua utente quando fornisce un feedback vocale.

  4. All'interno di questa funzione, definisci l'URL e gli header per la chiamata 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 sintesi vocale, non è necessario ottenere un token di accesso dall'API di emissione token.

  5. Sotto questo, definisci i parametri e il corpo della chiamata:

    params = {
        'from': from_language,
        'to': to_language
    }
    
    body = [{
        'text' : text
    }]
    

    I params definiscono i parametri da passare alla chiamata API, passando le lingue di origine e destinazione. Questa chiamata tradurrà il testo dalla lingua from alla lingua to.

    Il body contiene il testo da tradurre. Questo è un array, poiché è possibile tradurre più blocchi di testo nella stessa chiamata.

  6. 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": "Set a 2 minute 27 second timer.",
                    "to": "en"
                }
            ]
        }
    ]
    
  7. Restituisci la proprietà test dalla prima traduzione del primo elemento nell'array:

    return response.json()[0]['translations'][0]['text']
    
  8. Aggiorna il ciclo while True per tradurre il testo dalla chiamata a convert_speech_to_text dalla lingua utente alla lingua del server:

    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)
    

    Questo codice stampa anche le versioni originale e tradotta del testo nella console.

  9. Aggiorna la funzione say per tradurre il testo da pronunciare dalla lingua del server alla lingua utente:

    def say(text):
        print('Original:', text)
        text = translate_text(text, server_language, language)
        print('Translated:', text)
        speech = get_speech(text)
        play_speech(speech)
    

    Questo codice stampa anche le versioni originale e tradotta del testo nella console.

  10. Esegui il tuo codice. Assicurati che la tua funzione app sia in esecuzione e richiedi un timer nella lingua utente, parlando direttamente in quella lingua o utilizzando un'app di traduzione.

    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.
    

    💁 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/pi.

😀 Il tuo programma timer multilingue è stato un successo!

Disclaimer (Avvertenza):
Questo documento è stato tradotto utilizzando il servizio di traduzione automatica 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 effettuata da un traduttore umano. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione.