Oversæt tale
Tips
Se fanen Tekst og billeder for flere detaljer!
Azure Speech i Foundry Tools tilbyder flere API'er, som du kan bruge til at bygge taleaktiverede applikationer og agenter. Speech Translation API gør det muligt for dig at bygge løsninger, der oversætter talte input og returnerer oversættelsen som tekst eller tale.
Brug Azure Speech translation i applikationskode
For at understøtte taleoversættelse tilbyder Azure Speech et API, som du kan bruge fra din applikationskode via objektet TranslationRecognizer ; som du kan oprette ved at forbinde til din Azure Speech-ressource ved hjælp af et SpeechTranslationConfig-objekt .
Connect til en Azure Speech-ressource
For at bruge Azure Speech Translation API i klientkode skal du bruge et SpeechTranslationConfig-objekt til at forbinde til en Azure Speech-ressource. Microsoft Foundry tilbyder Azure Speech som et værktøj i en Foundry-ressource, og du kan forbinde ved at angive det relevante endpoint eller region for din ressource, som vist i dette kodeeksempel:
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")
Tips
For mere information om SpeechTranslationConfig-konstruktøren , se Azure Speech Python SDK-dokumentationen.
Konfigurér oversættelsessprog og input
Azure Speech kan oversætte talt lydinput til et eller flere sprog. Du bruger objektet SpeechTranslationConfig til at konfigurere kilde- og målsprog, og et AudioConfig-objekt til at specificere kildelydstrømmen.
For eksempel konfigurerer følgende kode objektet SpeechTranslationConfig til oversættelse fra amerikansk engelsk (en-US) til fransk (fr) og japansk (ja); og bruger et AudioConfig-objekt til at angive, at kildelyden kommer fra standardsystemets mikrofon.
# 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)
Tips
For mere information om AudioConfig-klassen , se Azure Speech Python SDK-dokumentationen.
Oversæt tale til tekst
Nu er du klar til at oversætte talt input ved hjælp af et TranslationRecognizer-objekt , som dette:
# 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]}'")
Hvis du kører denne kode og siger "hello" ind i mikrofonen, får du følgende output:
Speak now...
Translating 'Hello.'
fr: 'Bonjour.'
ja: 'こんにちは。'
Tips
For mere information om TranslationRecognizer-klassen , se Azure Speech Python SDK-dokumentationen.
Syntetiser oversættelser som tale
Hvis du har brug for at implementere tale-til-tale oversættelse, er der to almindelige tilgange, du kan vælge imellem:
Manuel syntese
Manuel syntese er en ligetil måde at syntetisere resultaterne af taleoversættelse på. Du kan bruge manuel syntese til at generere lyd ud fra tekstoversættelser. Det er i bund og grund bare kombinationen af to separate operationer, hvor du:
- Brug en TranslationRecognizer til at oversætte talt input til teksttransskriptioner på et eller flere målsprog.
- Iterer gennem oversættelserne i resultatet af oversættelsesoperationen ved at bruge en SpeechSynthesizer til at syntetisere en lydstrøm for hvert sprog.
For eksempel kunne vi udvide det forrige eksempel til at bruge Azure Speech til at syntetisere hver returneret oversættelse, sådan her:
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)
Bemærk, at du skal oprette et SpeechConfig-objekt til talesyntese-API'en og en separat AudioConfig til at dirigere det talte output til standardhøjttaleren. Du kan også specificere sprogspecifikke stemmer for at optimere udtalen af den oversatte tale.
Hændelsesbaseret syntese
Når du vil udføre 1:1 oversættelse (oversætte fra ét kildesprog til et enkelt målsprog), kan du bruge hændelsesbaseret syntese til at fange oversættelsen som en lydstrøm. For at gøre dette skal du:
- Angiv den ønskede stemme for den oversatte tale i TranslationConfig.
- Opret en hændelseshåndter for TranslationRecognizer-objektetsSynthesizing-begivenhed .
- I event handleren bruges GetAudio()-metoden med Result-parameteren til at hente bytestrømmen af oversat lyd.
Bemærkning
Du kan ikke bruge hændelsesbaseret syntese til flersproget oversættelse.
For eksempel bruger følgende Python-kode en inline event handler til at fange den oversatte lydstrøm og gemme den som en fil. Koden afspiller efterfølgende filen ved hjælp af Playsound-biblioteket .
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)
Tips
For mere information om syntese af oversættelser, se Azure Speech-dokumentationen.