Rozpoznávání a překlad řeči
Referenční dokumentace | Package (NuGet) | Další ukázky na GitHubu
V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.
Další informace o překladu řeči najdete v přehledu překladu řeči:
- Překlad řeči na text
- Překlad řeči do více cílových jazyků
- Provedení přímého překladu řeči na řeč
Citlivá data a proměnné prostředí
Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč a oblast prostředku služby Speech. Třída Program
obsahuje dvě static readonly string
hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY
a SPEECH__SERVICE__REGION
. Obě tato pole jsou v oboru třídy, takže jsou přístupná v tělech metody třídy:
public class Program
{
static readonly string SPEECH__SUBSCRIPTION__KEY =
Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
static readonly string SPEECH__SERVICE__REGION =
Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));
static Task Main() => Task.CompletedTask;
}
Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
Vytvoření konfigurace překladu řeči
Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig
instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.
Tip
Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.
Inicializovat SpeechTranslationConfig
můžete několika způsoby:
- S předplatným: předejte klíč a přidruženou oblast.
- S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
- S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
- S autorizačním tokenem: předejte autorizační token a přidruženou oblast.
Pojďme se podívat, jak vytvoříte SpeechTranslationConfig
instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu Azure Portal.
public class Program
{
static readonly string SPEECH__SUBSCRIPTION__KEY =
Environment.GetEnvironmentVariable(nameof(SPEECH__SUBSCRIPTION__KEY));
static readonly string SPEECH__SERVICE__REGION =
Environment.GetEnvironmentVariable(nameof(SPEECH__SERVICE__REGION));
static Task Main() => TranslateSpeechAsync();
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}
}
Změna zdrojového jazyka
Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig
instancí tím, že ji přiřadíte k SpeechRecognitionLanguage
vlastnosti:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
}
Vlastnost SpeechRecognitionLanguage
očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.
Přidání jazyka překladu
Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
speechTranslationConfig.AddTargetLanguage("fr");
speechTranslationConfig.AddTargetLanguage("de");
}
Při každém volání AddTargetLanguage
se zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.
Inicializace rozpoznávání překladu
Po vytvoření SpeechTranslationConfig
instance je dalším krokem inicializace TranslationRecognizer
. Při inicializaci TranslationRecognizer
je nutné ji předat instanci speechTranslationConfig
. Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.
Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer
měla by instance vypadat takto:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
}
Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig
instanci třídy a zadat audioConfig
parametr při inicializaci TranslationRecognizer
.
Nejprve na AudioConfig
objekt odkazujte následujícím způsobem:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}
Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig
parametr. Když však vytvoříte AudioConfig
instanci třídy místo volání FromDefaultMicrophoneInput
, zavoláte FromWavFileInput
a předáte filename
parametr:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
}
Překlad řeči
Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Console.Write($"Say something in '{fromLanguage}' and ");
Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
var result = await translationRecognizer.RecognizeOnceAsync();
if (result.Reason == ResultReason.TranslatedSpeech)
{
Console.WriteLine($"Recognized: \"{result.Text}\":");
foreach (var element in result.Translations)
{
Console.WriteLine($" TRANSLATED into '{element.Key}': {element.Value}");
}
}
}
Další informace o řeči na text najdete v základech rozpoznávání řeči.
Překlad na základě událostí
Objekt TranslationRecognizer
zveřejňuje Recognizing
událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení průběžných výsledků překladu.
Poznámka:
Pokud používáte vícejazyčný překlad řeči, nejsou výsledky převodu mezi překlady k dispozici.
Následující příklad vytiskne výsledky převodu do konzoly:
using (var audioInput = AudioConfig.FromWavFileInput(@"whatstheweatherlike.wav"))
{
using (var translationRecognizer = new TranslationRecognizer(config, audioInput))
{
// Subscribes to events.
translationRecognizer.Recognizing += (s, e) =>
{
Console.WriteLine($"RECOGNIZING in '{fromLanguage}': Text={e.Result.Text}");
foreach (var element in e.Result.Translations)
{
Console.WriteLine($" TRANSLATING into '{element.Key}': {element.Value}");
}
};
translationRecognizer.Recognized += (s, e) => {
if (e.Result.Reason == ResultReason.TranslatedSpeech)
{
Console.WriteLine($"RECOGNIZED in '{fromLanguage}': Text={e.Result.Text}");
foreach (var element in e.Result.Translations)
{
Console.WriteLine($" TRANSLATED into '{element.Key}': {element.Value}");
}
}
else if (e.Result.Reason == ResultReason.RecognizedSpeech)
{
Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
Console.WriteLine($" Speech not translated.");
}
else if (e.Result.Reason == ResultReason.NoMatch)
{
Console.WriteLine($"NOMATCH: Speech could not be recognized.");
}
};
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
Console.WriteLine("Start translation...");
await translationRecognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);
// Waits for completion.
// Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopTranslation.Task });
// Stops translation.
await translationRecognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
}
}
Syntetizování překladů
Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Klíč Translations
slovníku je cílový jazyk překladu a hodnota je přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).
Syntéza založená na událostech
Objekt TranslationRecognizer
zveřejňuje Synthesizing
událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.
Zadejte syntézu hlasu přiřazením VoiceName
instance a zadáním obslužné rutiny Synthesizing
události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.
Důležité
Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho VoiceName
by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de"
namapovat na "de-DE-Hedda"
.
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguage = "de";
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
speechTranslationConfig.AddTargetLanguage(toLanguage);
speechTranslationConfig.VoiceName = "de-DE-Hedda";
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
translationRecognizer.Synthesizing += (_, e) =>
{
var audio = e.Result.GetAudio();
Console.WriteLine($"Audio synthesized: {audio.Length:#,0} byte(s) {(audio.Length == 0 ? "(Complete)" : "")}");
if (audio.Length > 0)
{
File.WriteAllBytes("YourAudioFile.wav", audio);
}
};
Console.Write($"Say something in '{fromLanguage}' and ");
Console.WriteLine($"we'll translate into '{toLanguage}'.\n");
var result = await translationRecognizer.RecognizeOnceAsync();
if (result.Reason == ResultReason.TranslatedSpeech)
{
Console.WriteLine($"Recognized: \"{result.Text}\"");
Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
}
}
Ruční syntéza
Pomocí slovníku Translations
můžete syntetizovat zvuk z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer
instance SpeechConfig
musí objekt mít jeho SpeechSynthesisVoiceName
vlastnost nastavenou na požadovaný hlas.
Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "de", "en", "it", "pt", "zh-Hans" };
speechTranslationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(speechTranslationConfig.AddTargetLanguage);
using var translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Console.Write($"Say something in '{fromLanguage}' and ");
Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
var result = await translationRecognizer.RecognizeOnceAsync();
if (result.Reason == ResultReason.TranslatedSpeech)
{
var languageToVoiceMap = new Dictionary<string, string>
{
["de"] = "de-DE-KatjaNeural",
["en"] = "en-US-AriaNeural",
["it"] = "it-IT-ElsaNeural",
["pt"] = "pt-BR-FranciscaNeural",
["zh-Hans"] = "zh-CN-XiaoxiaoNeural"
};
Console.WriteLine($"Recognized: \"{result.Text}\"");
foreach (var (language, translation) in result.Translations)
{
Console.WriteLine($"Translated into '{language}': {translation}");
var speechConfig =
SpeechConfig.FromSubscription(
SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);
speechConfig.SpeechSynthesisVoiceName = languageToVoiceMap[language];
using var audioConfig = AudioConfig.FromWavFileOutput($"{language}-translation.wav");
using var speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
await speechSynthesizer.SpeakTextAsync(translation);
}
}
}
Další informace o syntéze řeči najdete v základech syntézy řeči.
Vícejazyčný překlad s identifikací jazyka
V mnoha scénářích možná nevíte, které vstupní jazyky se mají zadat. Pomocí identifikace jazyka můžete zjistit až 10 možných vstupních jazyků a automaticky přeložit do cílových jazyků.
Následující příklad předpokládá, že en-US
nebo zh-CN
by měly být zjištěny, protože jsou definovány v AutoDetectSourceLanguageConfig
. Pak se řeč přeloží do de
fr
a jak je uvedeno ve voláních na AddTargetLanguage()
.
speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Kompletní vzorový kód najdete v tématu Identifikace jazyka.
Překlad vícejazyčné řeči bez zdrojových jazyků
Překlad řeči s více jazyky implementuje novou úroveň technologie překladu řeči, která odemyká různé funkce, včetně toho, že nemá zadaný jazyk zadávání a zpracovává jazykové přepínače ve stejné relaci. Tyto funkce umožňují novou úroveň možností překladu řeči, které je možné implementovat do vašich produktů.
Když v současné době používáte JAZYKOVÉ ID s překladem řeči, musíte vytvořit SpeechTranslationConfig
objekt z koncového bodu v2. Nahraďte řetězec YourServiceRegion vaší oblastí prostředků služby Speech (například westus). Nahraďte "YourSubscriptionKey" klíčem prostředku služby Speech.
var v2EndpointInString = String.Format("wss://{0}.stt.speech.microsoft.com/speech/universal/v2", "YourServiceRegion");
var v2EndpointUrl = new Uri(v2EndpointInString);
var speechTranslationConfig = SpeechTranslationConfig.FromEndpoint(v2EndpointUrl, "YourSubscriptionKey");
Zadejte cílové jazyky překladu. Nahraďte jazyky podle svého výběru. Můžete přidat další řádky.
config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");
Klíčovým rozdílem s vícejazyčným překladem řeči je, že nemusíte zadávat zdrojový jazyk. Důvodem je to, že služba automaticky rozpozná zdrojový jazyk. AutoDetectSourceLanguageConfig
Vytvořte objekt s metodoufromOpenRange
, abyste službě dali vědět, že chcete použít vícejazyčný překlad řeči bez zadaného zdrojového jazyka.
AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange();
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Kompletní ukázku kódu pomocí sady Speech SDK najdete v ukázkách překladu řeči na GitHubu.
Použití vlastního překladu v překladu řeči
Funkce vlastního překladu řeči se bezproblémově integruje se službou Azure Custom Translation, která umožňuje dosáhnout přesnějších a přizpůsobených překladů. Vzhledem k tomu, že integrace přímo využívá možnosti vlastní služby překladu Azure, musíte použít prostředek s více službami, abyste zajistili správné fungování celé sady funkcí. Podrobné pokyny najdete v průvodci vytvořením prostředku s více službami pro služby Azure AI.
Kromě toho si pro offline trénování vlastního překladače a získání ID kategorie projděte si podrobný skript uvedený v rychlém startu : Sestavení, nasazení a použití vlastního modelu – Custom Translator.
// Creates an instance of a translation recognizer using speech translation configuration
// You should use the same subscription key, which you used to generate the custom model before.
// V2 endpoint is required for the “Custom Translation” feature. Example: "wss://westcentralus.stt.speech.microsoft.com/speech/universal/v2"
try (SpeechTranslationConfig config = SpeechTranslationConfig.fromEndpoint(URI.create(endpointUrl), speechSubscriptionKey)) {
// Sets source and target language(s).
….
// Set the category id
config.setCustomModelCategoryId("yourCategoryId");
….
}
Referenční dokumentace | Package (NuGet) | Další ukázky na GitHubu
V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.
Další informace o překladu řeči najdete v přehledu překladu řeči:
- Překlad řeči na text
- Překlad řeči do více cílových jazyků
- Provedení přímého překladu řeči na řeč
Citlivá data a proměnné prostředí
Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč a oblast prostředku služby Speech. Soubor kódu C++ obsahuje dvě řetězcové hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY
a SPEECH__SERVICE__REGION
. Obě tato pole jsou v oboru třídy, takže jsou přístupná v tělech metody třídy:
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
Vytvoření konfigurace překladu řeči
Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig
instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.
Tip
Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.
Inicializovat SpeechTranslationConfig
můžete několika způsoby:
- S předplatným: předejte klíč a přidruženou oblast.
- S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
- S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
- S autorizačním tokenem: předejte autorizační token a přidruženou oblast.
Pojďme se podívat, jak vytvoříte SpeechTranslationConfig
instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu Azure Portal.
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}
int main(int argc, char** argv) {
setlocale(LC_ALL, "");
translateSpeech();
return 0;
}
Změna zdrojového jazyka
Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig
instancí voláním SetSpeechRecognitionLanguage
metody.
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
}
Vlastnost SpeechRecognitionLanguage
očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.
Přidání jazyka překladu
Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
speechTranslationConfig->AddTargetLanguage("fr");
speechTranslationConfig->AddTargetLanguage("de");
}
Při každém volání AddTargetLanguage
se zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.
Inicializace rozpoznávání překladu
Po vytvoření SpeechTranslationConfig
instance je dalším krokem inicializace TranslationRecognizer
. Při inicializaci TranslationRecognizer
je nutné ji předat instanci translationConfig
. Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.
Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer
měl by vypadat takto:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
}
Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig
instanci třídy a zadat audioConfig
parametr při inicializaci TranslationRecognizer
.
Nejprve na AudioConfig
objekt odkazujte následujícím způsobem:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}
Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig
parametr. Když však vytvoříte AudioConfig
instanci třídy místo volání FromDefaultMicrophoneInput
, zavoláte FromWavFileInput
a předáte filename
parametr:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}
Překlad řeči
Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
string fromLanguage = "en-US";
string toLanguages[3] = { "it", "fr", "de" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";
auto result = translationRecognizer->RecognizeOnceAsync().get();
if (result->Reason == ResultReason::TranslatedSpeech)
{
cout << "Recognized: \"" << result->Text << "\"" << std::endl;
for (auto pair : result->Translations)
{
auto language = pair.first;
auto translation = pair.second;
cout << "Translated into '" << language << "': " << translation << std::endl;
}
}
}
Další informace o řeči na text najdete v základech rozpoznávání řeči.
Syntetizování překladů
Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Klíč Translations
slovníku je cílový jazyk překladu a hodnota je přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).
Syntéza založená na událostech
Objekt TranslationRecognizer
zveřejňuje Synthesizing
událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.
Zadejte syntézu hlasu přiřazením SetVoiceName
instance a zadáním obslužné rutiny Synthesizing
události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.
Důležité
Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho SetVoiceName
by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de"
namapovat na "de-DE-Hedda"
.
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguage = "de";
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
speechTranslationConfig->AddTargetLanguage(toLanguage);
speechTranslationConfig->SetVoiceName("de-DE-Hedda");
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
translationRecognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
{
auto audio = e.Result->Audio;
auto size = audio.size();
cout << "Audio synthesized: " << size << " byte(s)" << (size == 0 ? "(COMPLETE)" : "") << std::endl;
if (size > 0) {
ofstream file("translation.wav", ios::out | ios::binary);
auto audioData = audio.data();
file.write((const char*)audioData, sizeof(audio[0]) * size);
file.close();
}
});
cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";
auto result = translationRecognizer->RecognizeOnceAsync().get();
if (result->Reason == ResultReason::TranslatedSpeech)
{
cout << "Recognized: \"" << result->Text << "\"" << std::endl;
for (auto pair : result->Translations)
{
auto language = pair.first;
auto translation = pair.second;
cout << "Translated into '" << language << "': " << translation << std::endl;
}
}
}
Ruční syntéza
Pomocí slovníku Translations
můžete syntetizovat zvuk z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer
instance SpeechConfig
musí objekt mít jeho SetSpeechSynthesisVoiceName
vlastnost nastavenou na požadovaný hlas.
Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
speechTranslationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
speechTranslationConfig->AddTargetLanguage(language);
}
auto translationRecognizer = TranslationRecognizer::FromConfig(translationConfig);
cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";
auto result = translationRecognizer->RecognizeOnceAsync().get();
if (result->Reason == ResultReason::TranslatedSpeech)
{
map<string, string> languageToVoiceMap;
languageToVoiceMap["de"] = "de-DE-KatjaNeural";
languageToVoiceMap["en"] = "en-US-AriaNeural";
languageToVoiceMap["it"] = "it-IT-ElsaNeural";
languageToVoiceMap["pt"] = "pt-BR-FranciscaNeural";
languageToVoiceMap["zh-Hans"] = "zh-CN-XiaoxiaoNeural";
cout << "Recognized: \"" << result->Text << "\"" << std::endl;
for (auto pair : result->Translations)
{
auto language = pair.first;
auto translation = pair.second;
cout << "Translated into '" << language << "': " << translation << std::endl;
auto speechConfig =
SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechConfig->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);
auto audioConfig = AudioConfig::FromWavFileOutput(language + "-translation.wav");
auto speechSynthesizer = SpeechSynthesizer::FromConfig(speechConfig, audioConfig);
speechSynthesizer->SpeakTextAsync(translation).get();
}
}
}
Další informace o syntéze řeči najdete v základech syntézy řeči.
Vícejazyčný překlad s identifikací jazyka
V mnoha scénářích možná nevíte, které vstupní jazyky se mají zadat. Pomocí identifikace jazyka můžete zjistit až 10 možných vstupních jazyků a automaticky přeložit do cílových jazyků.
Následující příklad předpokládá, že en-US
nebo zh-CN
by měly být zjištěny, protože jsou definovány v AutoDetectSourceLanguageConfig
. Pak bude řeč přeložena do de
a fr
jak je uvedeno ve voláních .AddTargetLanguage()
speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Kompletní vzorový kód najdete v tématu Identifikace jazyka.
Referenční dokumentace | Package (Go) | Další ukázky na GitHubu
Sada Speech SDK pro Go nepodporuje překlad řeči. Vyberte jiný programovací jazyk nebo referenční informace k Jazyku Go a ukázky propojené od začátku tohoto článku.
Referenční dokumentace | Další ukázky na GitHubu
V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.
Další informace o překladu řeči najdete v přehledu překladu řeči:
- Překlad řeči na text
- Překlad řeči do více cílových jazyků
- Provedení přímého překladu řeči na řeč
Citlivá data a proměnné prostředí
Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč a oblast prostředku služby Speech. Soubor kódu Java obsahuje dvě static final String
hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY
a SPEECH__SERVICE__REGION
. Obě tato pole jsou v oboru třídy, takže jsou přístupná v tělech metody třídy:
public class App {
static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SUBSCRIPTION__KEY");
static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");
public static void main(String[] args) { }
}
Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
Vytvoření konfigurace překladu řeči
Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig
instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.
Tip
Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.
Instanci můžete inicializovat SpeechTranslationConfig
několika způsoby:
- S předplatným: předejte klíč a přidruženou oblast.
- S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
- S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
- S autorizačním tokenem: předejte autorizační token a přidruženou oblast.
Pojďme se podívat, jak vytvoříte SpeechTranslationConfig
instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu Azure Portal.
public class App {
static final String SPEECH__SUBSCRIPTION__KEY = System.getenv("SPEECH__SERVICE__KEY");
static final String SPEECH__SERVICE__REGION = System.getenv("SPEECH__SERVICE__REGION");
public static void main(String[] args) {
try {
translateSpeech();
System.exit(0);
} catch (Exception ex) {
System.out.println(ex);
System.exit(1);
}
}
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}
}
Změna zdrojového jazyka
Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig
instancí voláním setSpeechRecognitionLanguage
metody:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
}
Funkce setSpeechRecognitionLanguage
očekává řetězec formátu národního prostředí jazyka. Projděte si seznam podporovaných národních prostředí překladu řeči.
Přidání jazyka překladu
Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
// Translate to languages. See https://aka.ms/speech/sttt-languages
speechTranslationConfig.addTargetLanguage("fr");
speechTranslationConfig.addTargetLanguage("de");
}
Při každém volání addTargetLanguage
se zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.
Inicializace rozpoznávání překladu
Po vytvoření SpeechTranslationConfig
instance je dalším krokem inicializace TranslationRecognizer
. Při inicializaci TranslationRecognizer
je nutné ji předat instanci speechTranslationConfig
. Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.
Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer
měl by vypadat takto:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
}
}
Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig
instanci třídy a zadat audioConfig
parametr při inicializaci TranslationRecognizer
.
Nejprve na AudioConfig
objekt odkazujte následujícím způsobem:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
}
}
Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig
parametr. Když však vytvoříte AudioConfig
instanci třídy místo volání fromDefaultMicrophoneInput
, zavoláte fromWavFileInput
a předáte filename
parametr:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig)) {
}
}
Překlad řeči
Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:
static void translateSpeech() throws ExecutionException, InterruptedException {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);
TranslationRecognitionResult translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
System.out.printf("Translated into '%s': %s\n", pair.getKey(), pair.getValue());
}
}
}
}
Další informace o řeči na text najdete v základech rozpoznávání řeči.
Syntetizování překladů
Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Funkce getTranslations
vrátí slovník s klíčem jako cílovým jazykem překladu a hodnotou jako přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).
Syntéza založená na událostech
Objekt TranslationRecognizer
zveřejňuje synthesizing
událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.
Zadejte syntézu hlasu přiřazením setVoiceName
instance a zadáním obslužné rutiny synthesizing
události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.
Důležité
Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho setVoiceName
by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de"
namapovat na "de-DE-Hedda"
.
static void translateSpeech() throws ExecutionException, FileNotFoundException, InterruptedException, IOException {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String toLanguage = "de";
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
speechTranslationConfig.addTargetLanguage(toLanguage);
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
speechTranslationConfig.setVoiceName("de-DE-Hedda");
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
translationRecognizer.synthesizing.addEventListener((s, e) -> {
byte[] audio = e.getResult().getAudio();
int size = audio.length;
System.out.println("Audio synthesized: " + size + " byte(s)" + (size == 0 ? "(COMPLETE)" : ""));
if (size > 0) {
try (FileOutputStream file = new FileOutputStream("translation.wav")) {
file.write(audio);
} catch (IOException ex) {
ex.printStackTrace();
}
}
});
System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);
TranslationRecognitionResult translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
String language = pair.getKey();
String translation = pair.getValue();
System.out.printf("Translated into '%s': %s\n", language, translation);
}
}
}
}
Ruční syntéza
Funkce getTranslations
vrátí slovník, který můžete použít k syntetizaci zvuku z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer
instance SpeechConfig
musí objekt mít jeho setSpeechSynthesisVoiceName
vlastnost nastavenou na požadovaný hlas.
Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.
static void translateSpeech() throws ExecutionException, InterruptedException {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
speechTranslationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
speechTranslationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer translationRecognizer = new TranslationRecognizer(speechTranslationConfig)) {
System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);
TranslationRecognitionResult translationRecognitionResult = translationRecognizer.recognizeOnceAsync().get();
if (translationRecognitionResult.getReason() == ResultReason.TranslatedSpeech) {
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
Map<String, String> languageToVoiceMap = new HashMap<String, String>();
languageToVoiceMap.put("de", "de-DE-KatjaNeural");
languageToVoiceMap.put("en", "en-US-AriaNeural");
languageToVoiceMap.put("it", "it-IT-ElsaNeural");
languageToVoiceMap.put("pt", "pt-BR-FranciscaNeural");
languageToVoiceMap.put("zh-Hans", "zh-CN-XiaoxiaoNeural");
System.out.printf("Recognized: \"%s\"\n", translationRecognitionResult.getText());
for (Map.Entry<String, String> pair : translationRecognitionResult.getTranslations().entrySet()) {
String language = pair.getKey();
String translation = pair.getValue();
System.out.printf("Translated into '%s': %s\n", language, translation);
SpeechConfig speechConfig =
SpeechConfig.fromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechConfig.setSpeechSynthesisVoiceName(languageToVoiceMap.get(language));
AudioConfig audioConfig = AudioConfig.fromWavFileOutput(language + "-translation.wav");
try (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
speechSynthesizer.SpeakTextAsync(translation).get();
}
}
}
}
}
Další informace o syntéze řeči najdete v základech syntézy řeči.
Referenční dokumentace | Balíček (npm) | Další ukázky ve zdrojovém kódu knihovny GitHub |
V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.
Další informace o překladu řeči najdete v přehledu překladu řeči:
- Překlad řeči na text
- Překlad řeči do více cílových jazyků
- Provedení přímého překladu řeči na řeč
Vytvoření konfigurace překladu
Pokud chcete službu překladu volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig
instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.
Poznámka:
Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.
Inicializovat SpeechTranslationConfig
můžete několika způsoby:
- S předplatným: předejte klíč a přidruženou oblast.
- S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
- S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
- S autorizačním tokenem: předejte autorizační token a přidruženou oblast.
Pojďme se podívat, jak vytvoříte SpeechTranslationConfig
instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu Azure Portal.
const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
Inicializace překladače
Po vytvoření SpeechTranslationConfig
instance je dalším krokem inicializace TranslationRecognizer
. Při inicializaci TranslationRecognizer
je nutné ji předat instanci speechTranslationConfig
. Objekt konfigurace poskytuje přihlašovací údaje, které služba překladu vyžaduje k ověření vaší žádosti.
Pokud překládáte řeč poskytovanou prostřednictvím výchozího mikrofonu vašeho zařízení, TranslationRecognizer
měl by vypadat takto:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig
instanci třídy a zadat audioConfig
parametr při inicializaci TranslationRecognizer
.
Na objekt se AudioConfig
odkazuje následujícím způsobem:
const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig
parametr. Můžete to ale udělat jenom v případě, že cílíte na Node.js. Když vytvoříte AudioConfig
instanci třídy místo volání fromDefaultMicrophoneInput
, zavoláte fromWavFileOutput
a předáte filename
parametr:
const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Překlad řeči
Třída TranslationRecognizer pro sadu Speech SDK pro JavaScript zveřejňuje metody, které můžete použít pro překlad řeči:
- Jednostřelový překlad (async):: Provádí překlad v neblokovacím (asynchronním) režimu. Překládá jednu promluvu. Určuje konec jedné promluvy tím, že naslouchá tichu na konci nebo dokud se nezpracuje maximálně 15 sekund zvuku.
- Průběžný překlad (async):: Asynchronně zahájí operaci průběžného překladu. Uživatel se zaregistruje k událostem a zpracovává různé stavy aplikace. Chcete-li zastavit asynchronní průběžný překlad, zavolejte
stopContinuousRecognitionAsync
.
Další informace o tom, jak zvolit režim rozpoznávání řeči, najdete v tématu Začínáme s převodem řeči na text.
Zadání cílového jazyka
Chcete-li přeložit, musíte zadat zdrojový jazyk i alespoň jeden cílový jazyk.
Zdrojový jazyk můžete zvolit pomocí národního prostředí uvedeného v tabulce překladu řeči. Najděte si možnosti přeloženého jazyka na stejném odkazu.
Možnosti cílových jazyků se liší, když chcete zobrazit text nebo chcete slyšet syntetizovaný překlad řeči. Pokud chcete přeložit z angličtiny do němčiny, upravte objekt konfigurace překladu:
speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");
Rozpoznávání jedním snímkem
Tady je příklad asynchronního jednoduchého překladu prostřednictvím recognizeOnceAsync
:
translationRecognizer.recognizeOnceAsync(result => {
// Interact with result
});
Potřebujete napsat kód pro zpracování výsledku. Tato ukázka vyhodnocuje překlad do němčiny result.reason
:
translationRecognizer.recognizeOnceAsync(
function (result) {
let translation = result.translations.get("de");
window.console.log(translation);
translationRecognizer.close();
},
function (err) {
window.console.log(err);
translationRecognizer.close();
});
Váš kód může také zpracovávat aktualizace poskytované během zpracování překladu. Pomocí těchto aktualizací můžete poskytnout vizuální zpětnou vazbu k průběhu překladu. Tento javascriptový Node.js příklad ukazuje tyto druhy aktualizací. Následující kód také zobrazuje podrobnosti vytvořené během procesu překladu:
translationRecognizer.recognizing = function (s, e) {
var str = ("(recognizing) Reason: " + SpeechSDK.ResultReason[e.result.reason] +
" Text: " + e.result.text +
" Translation:");
str += e.result.translations.get("de");
console.log(str);
};
translationRecognizer.recognized = function (s, e) {
var str = "\r\n(recognized) Reason: " + SpeechSDK.ResultReason[e.result.reason] +
" Text: " + e.result.text +
" Translation:";
str += e.result.translations.get("de");
str += "\r\n";
console.log(str);
};
Průběžný překlad
Průběžný překlad je trochu více zapojený než rozpoznávání s jedním snímkem. Vyžaduje, abyste se přihlásili k odběru recognizing
a canceled
recognized
události, abyste získali výsledky rozpoznávání. Chcete-li zastavit překlad, musíte zavolat stopContinuousRecognitionAsync
.
Tady je příklad toho, jak se provádí průběžný překlad na zvukovém vstupním souboru. Začněme definováním vstupu a inicializace TranslationRecognizer
:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
V následujícím kódu se přihlásíte k odběru událostí odeslaných z TranslationRecognizer
:
recognizing
: Signál pro události, které obsahují přechodné výsledky překladu.recognized
: Signál pro události, které obsahují konečné výsledky překladu. Tyto výsledky značí úspěšný pokus o překlad.sessionStopped
: Signál pro události, které označují konec relace překladu (operace).canceled
: Signál pro události, které obsahují zrušené výsledky překladu. Tyto události označují pokus o překlad, který byl zrušen v důsledku přímého zrušení. Případně značí selhání přenosu nebo protokolu.
translationRecognizer.recognizing = (s, e) => {
console.log(`TRANSLATING: Text=${e.result.text}`);
};
translationRecognizer.recognized = (s, e) => {
if (e.result.reason == ResultReason.RecognizedSpeech) {
console.log(`TRANSLATED: Text=${e.result.text}`);
}
else if (e.result.reason == ResultReason.NoMatch) {
console.log("NOMATCH: Speech could not be translated.");
}
};
translationRecognizer.canceled = (s, e) => {
console.log(`CANCELED: Reason=${e.reason}`);
if (e.reason == CancellationReason.Error) {
console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
console.log("CANCELED: Did you set the speech resource key and region values?");
}
translationRecognizer.stopContinuousRecognitionAsync();
};
translationRecognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
translationRecognizer.stopContinuousRecognitionAsync();
};
S nastavením všeho můžete zavolat startContinuousRecognitionAsync
:
// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();
Volba zdrojového jazyka
Běžným úkolem překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu najděte instanci SpeechTranslationConfig
a přidejte pod ni následující řádek:
speechTranslationConfig.speechRecognitionLanguage = "it-IT";
Vlastnost speechRecognitionLanguage
očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.
Zvolte jeden nebo více cílových jazyků.
Sada Speech SDK může paralelně překládat do více cílových jazyků. Dostupné cílové jazyky se poněkud liší od zdrojového seznamu jazyků. Cílové jazyky zadáte pomocí kódu jazyka, nikoli národního prostředí.
Seznam kódů jazyka pro cíle textu najdete v tabulce překladu řeči na stránce podpory jazyka. Najdete zde také podrobnosti o překladu do syntetizovaných jazyků.
Následující kód přidá němčinu jako cílový jazyk:
speechTranslationConfig.addTargetLanguage("de");
Vzhledem k tomu, že je možné překlady více cílových jazyků, musí váš kód při zkoumání výsledku zadat cílový jazyk. Následující kód získá výsledky překladu pro němčinu:
translationRecognizer.recognized = function (s, e) {
var str = "\r\n(recognized) Reason: " +
sdk.ResultReason[e.result.reason] +
" Text: " + e.result.text + " Translations:";
var language = "de";
str += " [" + language + "] " + e.result.translations.get(language);
str += "\r\n";
// show str somewhere
};
Referenční dokumentace | Balíček (stáhnout) | Další ukázky na GitHubu
Sada Speech SDK pro Objective-C podporuje překlad řeči, ale zatím jsme do ní nezahrnuli příručku. Začněte výběrem jiného programovacího jazyka a seznamte se s koncepty nebo si projděte referenční informace k Objective-C a ukázky propojené od začátku tohoto článku.
Referenční dokumentace | Balíček (stáhnout) | Další ukázky na GitHubu
Sada Speech SDK pro Swift podporuje překlad řeči, ale zatím jsme do ní nezahrnuli příručku. Začněte výběrem jiného programovacího jazyka a seznamte se s koncepty nebo si prohlédněte referenční informace a ukázky Swiftu, které jsou propojené od začátku tohoto článku.
Referenční dokumentace | Package (PyPi) | Další ukázky na GitHubu
V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.
Další informace o překladu řeči najdete v přehledu překladu řeči:
- Překlad řeči na text
- Překlad řeči do více cílových jazyků
- Provedení přímého překladu řeči na řeč
Citlivá data a proměnné prostředí
Ukázkový zdrojový kód v tomto článku závisí na proměnných prostředí pro ukládání citlivých dat, jako je klíč předplatného a oblast prostředku služby Speech. Soubor kódu Pythonu obsahuje dvě hodnoty, které jsou přiřazeny z proměnných prostředí hostitelského počítače: SPEECH__SUBSCRIPTION__KEY
a SPEECH__SERVICE__REGION
. Obě tyto proměnné jsou v globálním oboru, takže jsou přístupné v definici funkce souboru kódu:
speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']
Další informace o proměnných prostředí najdete v tématu Proměnné prostředí a konfigurace aplikace.
Důležité
Pokud používáte klíč rozhraní API, uložte ho bezpečně někam jinam, například ve službě Azure Key Vault. Nezahrnujte klíč rozhraní API přímo do kódu a nikdy ho nevštěvujte veřejně.
Další informace o zabezpečení služeb AI najdete v tématu Ověřování požadavků na služby Azure AI.
Vytvoření konfigurace překladu řeči
Pokud chcete službu Speech volat pomocí sady Speech SDK, musíte vytvořit SpeechTranslationConfig
instanci. Tato třída obsahuje informace o vašem předplatném, jako je klíč a přidružená oblast, koncový bod, hostitel nebo autorizační token.
Tip
Bez ohledu na to, jestli provádíte rozpoznávání řeči, syntézu řeči, překlad nebo rozpoznávání záměru, budete vždy vytvářet konfiguraci.
Inicializovat SpeechTranslationConfig
můžete několika způsoby:
- S předplatným: předejte klíč a přidruženou oblast.
- S koncovým bodem: Předejte koncový bod služby Speech. Klíč nebo autorizační token je volitelný.
- S hostitelem: předejte adresu hostitele. Klíč nebo autorizační token je volitelný.
- S autorizačním tokenem: předejte autorizační token a přidruženou oblast.
Pojďme se podívat, jak můžete vytvořit SpeechTranslationConfig
instanci pomocí klíče a oblasti. Získejte klíč prostředku a oblast služby Speech na webu Azure Portal.
from_language, to_language = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
Změna zdrojového jazyka
Jedním z běžných úloh překladu řeči je určení vstupního (nebo zdrojového) jazyka. Následující příklad ukazuje, jak byste změnili jazyk zadávání na italštinu. V kódu interagujte s SpeechTranslationConfig
instancí tím, že ji přiřadíte speech_recognition_language
k vlastnosti.
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
# Source (input) language
from_language = "it-IT"
translation_config.speech_recognition_language = from_language
Vlastnost speech_recognition_language
očekává řetězec formátu jazyka a národního prostředí. Projděte si seznam podporovaných národních prostředí překladu řeči.
Přidání jazyka překladu
Dalším běžným úkolem překladu řeči je určit cílové jazyky překladu. Vyžaduje se aspoň jeden, ale podporuje se násobky. Následující fragment kódu nastaví jako cíle jazyka překladu francouzštinu i němčinu:
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = "it-IT"
# Translate to languages. See, https://aka.ms/speech/sttt-languages
translation_config.add_target_language("fr")
translation_config.add_target_language("de")
Při každém volání add_target_language
se zadává nový cílový jazyk překladu. Jinými slovy, když je řeč rozpoznána ze zdrojového jazyka, je každý cílový překlad k dispozici jako součást výsledné operace překladu.
Inicializace rozpoznávání překladu
Po vytvoření SpeechTranslationConfig
instance je dalším krokem inicializace TranslationRecognizer
. Při inicializaci TranslationRecognizer
je nutné ji předat instanci translation_config
. Objekt konfigurace poskytuje přihlašovací údaje, které služba Speech vyžaduje k ověření vaší žádosti.
Pokud rozpoznáváte řeč pomocí výchozího mikrofonu vašeho zařízení, TranslationRecognizer
měl by vypadat takto:
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
translation_config.add_target_language(to_language)
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
Pokud chcete zadat zvukové vstupní zařízení, musíte vytvořit AudioConfig
instanci třídy a zadat audio_config
parametr při inicializaci TranslationRecognizer
.
Nejprve na AudioConfig
objekt odkazujte následujícím způsobem:
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
for lang in to_languages:
translation_config.add_target_language(lang)
audio_config = speechsdk.audio.AudioConfig(use_default_microphone=True)
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config, audio_config=audio_config)
Pokud chcete místo mikrofonu zadat zvukový soubor, musíte zadat audioConfig
parametr. Když však vytvoříte AudioConfig
instanci třídy, místo volání pomocí use_default_microphone=True
, zavoláte s parametrem filename="path-to-file.wav"
a zadáte ho filename
:
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
for lang in to_languages:
translation_config.add_target_language(lang)
audio_config = speechsdk.audio.AudioConfig(filename="path-to-file.wav")
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config, audio_config=audio_config)
Překlad řeči
Při překladu řeči se sada Speech SDK spoléhá na vstup z mikrofonu nebo ze zvukového souboru. Před překladem řeči probíhá rozpoznávání řeči. Po inicializaci všech objektů zavolejte funkci recognize-once a získejte výsledek:
import os
import azure.cognitiveservices.speech as speechsdk
speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
translation_config.add_target_language(to_language)
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
print('Say something...')
translation_recognition_result = translation_recognizer.recognize_once()
print(get_result_text(reason=translation_recognition_result.reason, result=translation_recognition_result))
def get_result_text(reason, translation_recognition_result):
reason_format = {
speechsdk.ResultReason.TranslatedSpeech:
f'RECOGNIZED "{from_language}": {translation_recognition_result.text}\n' +
f'TRANSLATED into "{to_language}"": {translation_recognition_result.translations[to_language]}',
speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{translation_recognition_result.text}"',
speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {translation_recognition_result.no_match_details}',
speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {translation_recognition_result.cancellation_details}'
}
return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()
Další informace o řeči na text najdete v základech rozpoznávání řeči.
Syntetizování překladů
Po úspěšném rozpoznávání a překladu řeči bude výsledek obsahovat všechny překlady ve slovníku. Klíč translations
slovníku je cílový jazyk překladu a hodnota je přeložený text. Rozpoznanou řeč lze přeložit a potom syntetizovat v jiném jazyce (řeč na řeč).
Syntéza založená na událostech
Objekt TranslationRecognizer
zveřejňuje Synthesizing
událost. Událost se aktivuje několikrát a poskytuje mechanismus pro načtení syntetizovaného zvuku z výsledku rozpoznávání překladu. Pokud překládáte do více jazyků, přečtěte si téma Ruční syntéza.
Zadejte syntézu hlasu přiřazením voice_name
instance a zadáním obslužné rutiny Synthesizing
události pro událost získat zvuk. Následující příklad uloží přeložený zvuk jako .wav soubor.
Důležité
Syntéza založená na událostech funguje pouze s jedním překladem. Nepřidávejte více cílových jazyků překladu. Kromě toho voice_name
by hodnota měla být stejný jazyk jako cílový jazyk překladu. Můžete například "de"
namapovat na "de-DE-Hedda"
.
import os
import azure.cognitiveservices.speech as speechsdk
speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_language = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
translation_config.add_target_language(to_language)
# See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
translation_config.voice_name = "de-DE-Hedda"
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
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('translation.wav', 'wb+')
file.write(evt.result.audio)
file.close()
translation_recognizer.synthesizing.connect(synthesis_callback)
print(f'Say something in "{from_language}" and we\'ll translate into "{to_language}".')
translation_recognition_result = translation_recognizer.recognize_once()
print(get_result_text(reason=translation_recognition_result.reason, result=translation_recognition_result))
def get_result_text(reason, translation_recognition_result):
reason_format = {
speechsdk.ResultReason.TranslatedSpeech:
f'Recognized "{from_language}": {translation_recognition_result.text}\n' +
f'Translated into "{to_language}"": {translation_recognition_result.translations[to_language]}',
speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{translation_recognition_result.text}"',
speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {translation_recognition_result.no_match_details}',
speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {translation_recognition_result.cancellation_details}'
}
return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()
Ruční syntéza
Pomocí slovníku translations
můžete syntetizovat zvuk z textu překladu. Iterujte každý překlad a syntetizujete ho. Při vytváření SpeechSynthesizer
instance SpeechConfig
musí objekt mít jeho speech_synthesis_voice_name
vlastnost nastavenou na požadovaný hlas.
Následující příklad překládá na pět jazyků. Každý překlad se pak syntetizuje do zvukového souboru v odpovídajícím neurálním jazyce.
import os
import azure.cognitiveservices.speech as speechsdk
speech_key, service_region = os.environ['SPEECH__SERVICE__KEY'], os.environ['SPEECH__SERVICE__REGION']
from_language, to_languages = 'en-US', [ 'de', 'en', 'it', 'pt', 'zh-Hans' ]
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
translation_config.speech_recognition_language = from_language
for lang in to_languages:
translation_config.add_target_language(lang)
recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
print('Say something...')
translation_recognition_result = translation_recognizer.recognize_once()
synthesize_translations(result=translation_recognition_result)
def synthesize_translations(translation_recognition_result):
language_to_voice_map = {
"de": "de-DE-KatjaNeural",
"en": "en-US-AriaNeural",
"it": "it-IT-ElsaNeural",
"pt": "pt-BR-FranciscaNeural",
"zh-Hans": "zh-CN-XiaoxiaoNeural"
}
print(f'Recognized: "{translation_recognition_result.text}"')
for language in translation_recognition_result.translations:
translation = translation_recognition_result.translations[language]
print(f'Translated into "{language}": {translation}')
speech_config = speechsdk.SpeechConfig(subscription=speech_key, region=service_region)
speech_config.speech_synthesis_voice_name = language_to_voice_map.get(language)
audio_config = speechsdk.audio.AudioOutputConfig(filename=f'{language}-translation.wav')
speech_synthesizer = speechsdk.SpeechSynthesizer(speech_config=speech_config, audio_config=audio_config)
speech_synthesizer.speak_text_async(translation).get()
translate_speech_to_text()
Další informace o syntéze řeči najdete v základech syntézy řeči.
Vícejazyčný překlad s identifikací jazyka
V mnoha scénářích možná nevíte, které vstupní jazyky se mají zadat. Pomocí identifikace jazyka můžete zjistit až 10 možných vstupních jazyků a automaticky přeložit do cílových jazyků.
Kompletní vzorový kód najdete v tématu Identifikace jazyka.
Speech to text REST API reference | Speech to text REST API for short audio reference | Additional samples on GitHub
K překladu řeči můžete použít rozhraní REST API, ale zatím jsme do tohoto průvodce nezahrnuli. Začněte výběrem jiného programovacího jazyka a seznamte se s koncepty.
V tomto návodu se naučíte rozpoznávat lidskou řeč a překládat ji do jiného jazyka.
Další informace o překladu řeči najdete v přehledu překladu řeči:
- Překlad řeči na text
- Překlad řeči do více cílových jazyků
- Provedení přímého překladu řeči na řeč
Požadavky
- Předplatné Azure. Můžete si ho zdarma vytvořit.
- Na webu Azure Portal vytvořte prostředek služby Speech.
- Získejte klíč prostředku a oblast služby Speech. Po nasazení prostředku služby Speech vyberte Přejít k prostředku a zobrazte a spravujte klíče.
Stažení a instalace
Postupujte podle těchtokrokůch
Spuštěním následujícího příkazu .NET CLI nainstalujte Rozhraní příkazového řádku služby Speech:
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
Spuštěním následujících příkazů nakonfigurujte klíč prostředku a oblast služby Speech. Nahraďte
SUBSCRIPTION-KEY
klíčem prostředku služby Speech a nahraďteREGION
oblastí prostředků služby Speech.spx config @key --set SUBSCRIPTION-KEY spx config @region --set REGION
Nastavení zdrojových a cílových jazyků
Tento příkaz zavolá rozhraní příkazového řádku řeči k překladu řeči z mikrofonu z italštiny do francouzštiny:
spx translate --microphone --source it-IT --target fr