Traduzione vocale
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:
- Usare translationRecognizer per tradurre l'input parlato in trascrizioni di testo in una o più lingue di destinazione.
- 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.