Traduzione vocale

Completato

Suggerimento

Per altri dettagli, vedi la scheda Testo e immagini .

Gli strumenti di Riconoscimento vocale di Azure in Foundry offrono più API che è possibile usare per creare applicazioni e agenti abilitati per la voce. L'API Traduzione vocale consente di creare soluzioni che traducono l'input parlato e restituiscono la traduzione come testo o voce.

Usare la traduzione vocale di Azure nel codice dell'applicazione

Per supportare la traduzione vocale, Riconoscimento vocale di Azure offre un'API che è possibile usare dal codice dell'applicazione tramite l'oggetto TranslationRecognizer ; che è possibile creare connettendosi alla risorsa Voce di Azure usando un oggetto SpeechTranslationConfig .

Connettersi a una risorsa Voce di Azure

Per usare l'API Traduzione vocale di Azure nel codice client, è necessario usare un oggetto SpeechTranslationConfig per connettersi a una risorsa voce di Azure. Microsoft Foundry fornisce Riconoscimento vocale di Azure come strumento in una risorsa Foundry ed è possibile connettersi specificando l'endpoint o l'area pertinenti per la risorsa, come illustrato in questo esempio di codice:

import azure.cognitiveservices.speech as speech_sdk

# Connect to a Foundry resource endpoint
translation_cfg = speech_sdk.translation.SpeechTranslationConfig(
                    subscription="FOUNDRY_KEY", endpoint="FOUNDRY_ENDPOINT")

# Or connect using a region
translation_cfg = speech_sdk.translation.SpeechTranslationConfig(
                    subscription="FOUNDRY_KEY", region="FOUNDRY_REGION")

Suggerimento

Per altre informazioni sul costruttore SpeechTranslationConfig , vedere la documentazione di Azure Speech Python SDK.

Configurare le lingue di traduzione e l'input

Azure Speech può tradurre l'audio vocale in ingresso in una o più lingue. Utilizzare l'oggetto SpeechTranslationConfig per configurare le lingue di origine e di destinazione e un oggetto AudioConfig per specificare il flusso audio di origine.

Ad esempio, il codice seguente configura l'oggetto SpeechTranslationConfig per la conversione dall'inglese (en-US) al francese (fr) e al giapponese (ja); e usa un oggetto AudioConfig per specificare l'audio di origine proveniente dal microfono di sistema predefinito.

# Configure languages
translation_cfg.speech_recognition_language = 'en-US'
translation_cfg.add_target_language('fr')
translation_cfg.add_target_language('ja')
print('Ready to translate from',translation_cfg.speech_recognition_language)

# Configure audio source
audio_cfg = speech_sdk.AudioConfig(use_default_microphone=True)

Suggerimento

Per altre informazioni sulla classe AudioConfig , vedere la documentazione di Azure Speech Python SDK.

Tradurre la voce in testo

A questo momento è possibile tradurre l'input parlato usando un oggetto TranslationRecognizer , come illustrato di seguito:

# Get a TranslationRecognizr object
translator = speech_sdk.translation.TranslationRecognizer(translation_config=translation_cfg,
                                                          audio_config=audio_cfg)
# Get input from mic and translate
print("Speak now...")
translation_results = translator.recognize_once_async().get()
print(f"Translating '{translation_results.text}'")

# Print each translation
translations = translation_results.translations
for translation_language in translations:
    print(f"{translation_language}: '{translations[translation_language]}'")

L'esecuzione di questo codice e il messaggio "hello" nel microfono genera l'output seguente:

Speak now...
Translating 'Hello.'
fr: 'Bonjour.'
ja: 'こんにちは。'

Suggerimento

Per altre informazioni sulla classe TranslationRecognizer , vedere la documentazione di Azure Speech Python SDK.

Sintetizzare le traduzioni come voce

Se è necessario implementare la traduzione vocale, è possibile scegliere tra due approcci comuni:

Sintesi manuale

La sintesi manuale è un modo semplice per sintetizzare i risultati della traduzione vocale È possibile usare la sintesi manuale per generare audio dalle traduzioni di testo. Si tratta essenzialmente della combinazione di due operazioni separate in cui:

  1. Usare translationRecognizer per tradurre l'input parlato in trascrizioni di testo in una o più lingue di destinazione.
  2. Scorrere le traduzioni nel risultato dell'operazione di traduzione, usando un SpeechSynthesizer per sintetizzare un flusso audio per ogni lingua.

Ad esempio, è possibile espandere l'esempio precedente per usare Riconoscimento vocale di Azure per sintetizzare ogni traduzione restituita, come illustrato di seguito:

import azure.cognitiveservices.speech as speech_sdk

# Configure translation
translation_cfg = speech_sdk.translation.SpeechTranslationConfig(subscription="FOUNDRY_KEY",
                                                                 endpoint="FOUNDRY_ENDPOINT")
translation_cfg.speech_recognition_language = 'en-US'
translation_cfg.add_target_language('fr')
translation_cfg.add_target_language('ja')
audio_cfg = speech_sdk.AudioConfig(use_default_microphone=True)

# Configure speech synthesis
speech_cfg = speech_sdk.SpeechConfig(subscription="FOUNDRY_KEY", 
                                     endpoint="FOUNDRY_ENDPOINT")
audio_out_cfg = speech_sdk.audio.AudioOutputConfig(use_default_speaker=True)
voices = {
        "fr": "fr-FR-HenriNeural",
        "ja": "ja-JP-NanamiNeural"
}

# Get trsnslations
translator = speech_sdk.translation.TranslationRecognizer(translation_config=translation_cfg,
                                                          audio_config=audio_cfg)
print("Speak now...")
translation_results = translator.recognize_once_async().get()
print(f"Translating '{translation_results.text}'")


# process the translation results
translations = translation_results.translations
for translation_language in translations:

    # Print ressults
    print(f"{translation_language}: '{translations[translation_language]}'")

    # Speak results
    speech_cfg.speech_synthesis_voice_name = voices.get(translation_language)
    speech_synthesizer = speech_sdk.SpeechSynthesizer(speech_cfg, audio_out_cfg)
    speak = speech_synthesizer.speak_text_async(translations[translation_language]).get()

    # CHeck for speech failure
    if speak.reason != speech_sdk.ResultReason.SynthesizingAudioCompleted:
        print(speak.reason)

Si noti che è necessario creare un oggetto SpeechConfig per l'API di sintesi vocale e un AudioConfig separato per indirizzare l'output parlato all'altoparlante predefinito. È anche possibile specificare voci specifiche della lingua per ottimizzare la pronuncia del parlato tradotto.

Sintesi basata su eventi

Quando vuoi eseguire la traduzione 1:1 (traduzione da una lingua di origine in una singola lingua di destinazione), puoi usare la sintesi basata su eventi per acquisire la traduzione come flusso audio. A questo scopo, è necessario:

  • Specificare la voce desiderata per la voce tradotta in TranslationConfig.
  • Creare un gestore eventi per l'evento Synthesizing dell'oggetto TranslationRecognizer.
  • Nel gestore eventi usare il metodo GetAudio() del parametro Result per recuperare il flusso di byte dell'audio tradotto.

Annotazioni

Non è possibile usare la sintesi basata su eventi per la traduzione multilingue.

Ad esempio, il codice Python seguente usa un gestore eventi inline per acquisire il flusso audio tradotto e salvarlo come file. Successivamente, il codice riproduce il file utilizzando la libreria playsound.

import azure.cognitiveservices.speech as speech_sdk
from playsound3 import playsound

# Configure translation
source_language, target_language = "en-US", "fr"
output_file = "translation.wav"
translation_cfg = speech_sdk.translation.SpeechTranslationConfig(subscription="FOUNDRY_KEY",
                                                                 endpoint="FOUNDRY_ENDPOINT")
translation_cfg.speech_recognition_language = source_language
translation_cfg.add_target_language(target_language)
translation_cfg.voice_name = "fr-FR-HenriNeural"
audio_cfg = speech_sdk.AudioConfig(use_default_microphone=True)
translator = speech_sdk.translation.TranslationRecognizer(translation_config=translation_cfg,
                                                          audio_config=audio_cfg)

# Event handler function to save the synthesized audio to a file
def synthesis_callback(evt):
    size = len(evt.result.audio)
    print(f'Audio synthesized: {size} byte(s) {"(COMPLETED)" if size == 0 else ""}')

    if size > 0:
        file = open(output_file, 'wb+')
        file.write(evt.result.audio)
        file.close()

# Connect the event handler function
translator.synthesizing.connect(synthesis_callback)

# Get input from mic and translate it
print(f"Speak now (in {source_language})...")
translation_results = translator.recognize_once()
print(f"Translating '{translation_results.text}'")

# Print and play the translation results
print(translation_results.translations[target_language])
playsound(output_file)

Suggerimento

Per altre informazioni sulla sintesi delle traduzioni, vedere la documentazione di Servizio vocale di Azure.