Cara mengenali dan menerjemahkan ucapan
Paket dokumentasi | referensi (NuGet) | Sampel tambahan di GitHub
Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.
Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:
- Menerjemahkan ucapan ke teks
- Menerjemahkan ucapan ke beberapa bahasa target
- Melakukan terjemahan ucapan ke ucapan langsung
Variabel data dan lingkungan sensitif
Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah sumber daya Ucapan. Program
Kelas ini berisi dua nilai static readonly string
yang ditetapkan dari variabel lingkungan komputer host: SPEECH__SUBSCRIPTION__KEY
dan SPEECH__SERVICE__REGION
. Kedua bidang ini berada di lingkup kelas, membuatnya dapat diakses dalam isi metode kelas:
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;
}
Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.
Penting
Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.
Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.
Membuat konfigurasi terjemahan ucapan
Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig
. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.
Tip
Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.
Anda dapat menginisialisasi SpeechTranslationConfig
dalam beberapa cara:
- Dengan langganan: teruskan kunci dan wilayah terkait.
- Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.
Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig
menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.
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);
}
}
Mengubah bahasa sumber
Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instas SpeechTranslationConfig
dengan menetapkannya ke properti SpeechRecognitionLanguage
:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
}
Properti SpeechRecognitionLanguage
memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.
Menambahkan bahasa terjemahan
Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
speechTranslationConfig.AddTargetLanguage("fr");
speechTranslationConfig.AddTargetLanguage("de");
}
Dengan setiap panggilan ke AddTargetLanguage
, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.
Menginisialisasi pengenal terjemahan
Setelah Anda membuat SpeechTranslationConfig
instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer
. Ketika Anda menginisialisasi TranslationRecognizer
, Anda harus meneruskan instans speechTranslationConfig
Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.
Jika Anda mengenali ucapan menggunakan mikrofon default perangkat, berikut tampilan instans TranslationRecognizer
:
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);
}
Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig
dan memberikan parameter audioConfig
saat menginisialisasi TranslationRecognizer
.
Pertama, referensikan objek AudioConfig
sebagai berikut:
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);
}
Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig
. Namun, ketika Anda membuat instans kelas AudioConfig
, alih-alih memanggil FromDefaultMicrophoneInput
, Anda memanggil FromWavFileInput
dan meneruskan parameter filename
:
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);
}
Menerjemahkan ucapan
Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:
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}");
}
}
}
Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.
Terjemahan berbasis peristiwa
TranslationRecognizer
Objek mengekspos sebuah Recognizing
peristiwa. Peristiwa ini diaktifkan beberapa kali dan menyediakan mekanisme untuk mengambil hasil terjemahan perantara.
Catatan
Hasil terjemahan menengah tidak tersedia saat Anda menggunakan terjemahan ucapan multibahasa.
Contoh berikut mencetak hasil terjemahan menengah ke konsol:
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);
}
}
Menyintesis terjemahan
Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Kunci kamus Translations
adalah bahasa terjemahan target, dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).
Sintesis berbasis peristiwa
TranslationRecognizer
Objek mengekspos sebuah Synthesizing
peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.
Tentukan suara sintesis dengan menetapkan instans VoiceName
, dan menyediakan penghandel peristiwa untuk peristiwa Synthesizing
untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.
Penting
Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai VoiceName
harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de"
dapat memetakan ke "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]}");
}
}
Sintesis manual
Anda dapat menggunakan kamus Translations
untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer
, objek SpeechConfig
harus mengatur propertinya SpeechSynthesisVoiceName
ke suara yang diinginkan.
Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.
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);
}
}
}
Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.
Terjemahan multibahasa dengan identifikasi bahasa
Dalam banyak skenario, Anda mungkin tidak tahu bahasa input mana yang akan ditentukan. Menggunakan identifikasi bahasa, Anda dapat mendeteksi hingga 10 kemungkinan bahasa input dan secara otomatis menerjemahkan ke bahasa target Anda.
Contoh berikut mengantisipasi itu en-US
atau zh-CN
harus dideteksi karena didefinisikan dalam AutoDetectSourceLanguageConfig
. Kemudian, ucapan diterjemahkan ke de
dan fr
seperti yang ditentukan dalam panggilan ke AddTargetLanguage()
.
speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Untuk sampel kode lengkap, lihat identifikasi bahasa.
Terjemahan ucapan multibahasa tanpa kandidat bahasa sumber
Terjemahan ucapan multibahasa mengimplementasikan tingkat teknologi terjemahan ucapan baru yang membuka berbagai kemampuan, termasuk tidak memiliki bahasa input yang ditentukan, dan menangani sakelar bahasa dalam sesi yang sama. Fitur-fitur ini memungkinkan tingkat kekuatan terjemahan ucapan baru yang dapat diimplementasikan ke dalam produk Anda.
Saat ini ketika Anda menggunakan ID Bahasa dengan terjemahan ucapan, Anda harus membuat SpeechTranslationConfig
objek dari titik akhir v2. Ganti string "YourServiceRegion" dengan wilayah sumber daya Ucapan Anda (seperti "westus"). Ganti "YourSubscriptionKey" dengan kunci sumber daya Ucapan Anda.
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");
Tentukan bahasa target terjemahan. Ganti dengan bahasa pilihan Anda. Anda dapat menambahkan lebih banyak baris.
config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");
Pembferensi utama dengan terjemahan ucapan multibahasa adalah Anda tidak perlu menentukan bahasa sumber. Ini karena layanan akan secara otomatis mendeteksi bahasa sumber. AutoDetectSourceLanguageConfig
Buat objek dengan fromOpenRange
metode untuk memberi tahu layanan bahwa Anda ingin menggunakan terjemahan ucapan multibahasa tanpa bahasa sumber yang ditentukan.
AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange();
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Untuk sampel kode lengkap dengan Speech SDK, lihat sampel terjemahan ucapan di GitHub.
Menggunakan terjemahan kustom dalam terjemahan ucapan
Fitur terjemahan kustom dalam terjemahan ucapan terintegrasi dengan mulus dengan layanan Terjemahan Kustom Azure, memungkinkan Anda mencapai terjemahan yang lebih akurat dan disesuaikan. Saat integrasi secara langsung memanfaatkan kemampuan layanan terjemahan kustom Azure, Anda perlu menggunakan sumber daya multi-layanan untuk memastikan berfungsinya serangkaian fitur lengkap yang benar. Untuk petunjuk terperinci, silakan lihat panduan tentang Membuat sumber daya multi-layanan untuk layanan Azure AI.
Selain itu, untuk pelatihan offline penerjemah kustom dan mendapatkan "ID Kategori," silakan lihat skrip langkah demi langkah yang disediakan dalam Mulai Cepat: Membangun, menyebarkan, dan menggunakan model kustom - Penerjemah Kustom.
// 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");
….
}
Paket dokumentasi | referensi (NuGet) | Sampel tambahan di GitHub
Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.
Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:
- Menerjemahkan ucapan ke teks
- Menerjemahkan ucapan ke beberapa bahasa target
- Melakukan terjemahan ucapan ke ucapan langsung
Variabel data dan lingkungan sensitif
Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah sumber daya Ucapan. File kode C++ berisi dua nilai string yang ditetapkan dari variabel lingkungan mesin host: SPEECH__SUBSCRIPTION__KEY
dan SPEECH__SERVICE__REGION
. Kedua bidang ini berada di lingkup kelas, membuatnya dapat diakses dalam isi metode kelas:
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.
Penting
Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.
Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.
Membuat konfigurasi terjemahan ucapan
Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig
. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.
Tip
Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.
Anda dapat menginisialisasi SpeechTranslationConfig
dalam beberapa cara:
- Dengan langganan: teruskan kunci dan wilayah terkait.
- Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.
Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig
menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.
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;
}
Mengubah bahasa sumber
Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instans SpeechTranslationConfig
dengan memanggil metode SetSpeechRecognitionLanguage
.
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
}
Properti SpeechRecognitionLanguage
memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.
Menambahkan bahasa terjemahan
Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
speechTranslationConfig->AddTargetLanguage("fr");
speechTranslationConfig->AddTargetLanguage("de");
}
Dengan setiap panggilan ke AddTargetLanguage
, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.
Menginisialisasi pengenal terjemahan
Setelah Anda membuat SpeechTranslationConfig
instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer
. Ketika Anda menginisialisasi TranslationRecognizer
, Anda harus meneruskan instans translationConfig
Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.
Jika Anda mengenali ucapan dengan menggunakan mikrofon default perangkat, berikut tampilan TranslationRecognizer
:
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);
}
Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig
dan memberikan parameter audioConfig
saat menginisialisasi TranslationRecognizer
.
Pertama, referensikan objek AudioConfig
sebagai berikut:
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);
}
Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig
. Namun, ketika Anda membuat instans kelas AudioConfig
, alih-alih memanggil FromDefaultMicrophoneInput
, Anda memanggil FromWavFileInput
dan meneruskan parameter filename
:
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);
}
Menerjemahkan ucapan
Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:
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;
}
}
}
Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.
Menyintesis terjemahan
Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Kunci kamus Translations
adalah bahasa terjemahan target, dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).
Sintesis berbasis peristiwa
TranslationRecognizer
Objek mengekspos sebuah Synthesizing
peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.
Tentukan suara sintesis dengan menetapkan instans SetVoiceName
, dan menyediakan penghandel peristiwa untuk peristiwa Synthesizing
untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.
Penting
Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai SetVoiceName
harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de"
dapat memetakan ke "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;
}
}
}
Sintesis manual
Anda dapat menggunakan kamus Translations
untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer
, objek SpeechConfig
harus mengatur propertinya SetSpeechSynthesisVoiceName
ke suara yang diinginkan.
Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.
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();
}
}
}
Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.
Terjemahan multibahasa dengan identifikasi bahasa
Dalam banyak skenario, Anda mungkin tidak tahu bahasa input mana yang akan ditentukan. Menggunakan identifikasi bahasa, Anda dapat mendeteksi hingga 10 kemungkinan bahasa input dan secara otomatis menerjemahkan ke bahasa target Anda.
Contoh berikut mengantisipasi itu en-US
atau zh-CN
harus dideteksi karena didefinisikan dalam AutoDetectSourceLanguageConfig
. Kemudian, pidato akan diterjemahkan ke de
dan fr
sebagaimana ditentukan dalam panggilan ke AddTargetLanguage()
.
speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Untuk sampel kode lengkap, lihat identifikasi bahasa.
Dokumentasi | referensi Paket (Go) | Sampel tambahan di GitHub
Speech SDK untuk Go tidak mendukung terjemahan ucapan. Silakan pilih bahasa pemrograman lain atau referensi Go dan sampel yang ditautkan dari awal artikel ini.
Dokumentasi | referensi Sampel tambahan di GitHub
Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.
Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:
- Menerjemahkan ucapan ke teks
- Menerjemahkan ucapan ke beberapa bahasa target
- Melakukan terjemahan ucapan ke ucapan langsung
Variabel data dan lingkungan sensitif
Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah sumber daya Ucapan. File kode Java berisi dua nilai static final String
yang ditetapkan dari variabel lingkungan komputer host: SPEECH__SUBSCRIPTION__KEY
dan SPEECH__SERVICE__REGION
. Kedua bidang ini berada di lingkup kelas, membuatnya dapat diakses dalam isi metode kelas:
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) { }
}
Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.
Penting
Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.
Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.
Membuat konfigurasi terjemahan ucapan
Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig
. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.
Tip
Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.
Anda dapat menginisialisasi instans SpeechTranslationConfig
dengan beberapa cara:
- Dengan langganan: teruskan kunci dan wilayah terkait.
- Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.
Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig
menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.
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);
}
}
Mengubah bahasa sumber
Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instans SpeechTranslationConfig
, dengan memanggil metode setSpeechRecognitionLanguage
:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
}
Properti setSpeechRecognitionLanguage
memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.
Menambahkan bahasa terjemahan
Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:
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");
}
Dengan setiap panggilan ke addTargetLanguage
, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.
Menginisialisasi pengenal terjemahan
Setelah Anda membuat SpeechTranslationConfig
instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer
. Ketika Anda menginisialisasi TranslationRecognizer
, Anda harus meneruskan instans speechTranslationConfig
Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.
Jika Anda mengenali ucapan dengan menggunakan mikrofon default perangkat, berikut tampilan TranslationRecognizer
:
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)) {
}
}
Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig
dan memberikan parameter audioConfig
saat menginisialisasi TranslationRecognizer
.
Pertama, referensikan objek AudioConfig
sebagai berikut:
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)) {
}
}
Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig
. Namun, ketika Anda membuat instans kelas AudioConfig
, alih-alih memanggil fromDefaultMicrophoneInput
, Anda memanggil fromWavFileInput
dan meneruskan parameter filename
:
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)) {
}
}
Menerjemahkan ucapan
Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:
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());
}
}
}
}
Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.
Menyintesis terjemahan
Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Fungsi getTranslations
ini mengembalikan kamus dengan kunci sebagai bahasa terjemahan target dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).
Sintesis berbasis peristiwa
TranslationRecognizer
Objek mengekspos sebuah synthesizing
peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.
Tentukan suara sintesis dengan menetapkan instans setVoiceName
, dan menyediakan penghandel peristiwa untuk peristiwa synthesizing
untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.
Penting
Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai setVoiceName
harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de"
dapat memetakan ke "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);
}
}
}
}
Sintesis manual
Fungsi getTranslations
mengembalikan kamus yang dapat digunakan untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer
, objek SpeechConfig
harus mengatur propertinya setSpeechSynthesisVoiceName
ke suara yang diinginkan.
Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.
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();
}
}
}
}
}
Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.
Paket dokumentasi | referensi (npm) | Sampel tambahan pada kode sumber Pustaka GitHub |
Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.
Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:
- Menerjemahkan ucapan ke teks
- Menerjemahkan ucapan ke beberapa bahasa target
- Melakukan terjemahan ucapan ke ucapan langsung
Membuat konfigurasi terjemahan
Untuk memanggil layanan penerjemahan menggunakan SDK Ucapan, Anda perlu membuat instans SpeechTranslationConfig
. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.
Catatan
Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.
Anda dapat menginisialisasi SpeechTranslationConfig
dalam beberapa cara:
- Dengan langganan: teruskan kunci dan wilayah terkait.
- Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.
Mari kita lihat bagaimana Anda membuat instans SpeechTranslationConfig
menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.
const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
Menginisialisasi penerjemah
Setelah Anda membuat SpeechTranslationConfig
instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer
. Ketika Anda menginisialisasi TranslationRecognizer
, Anda harus meneruskan instans speechTranslationConfig
Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan terjemahan untuk memvalidasi permintaan Anda.
Jika Anda menerjemahkan ucapan yang disediakan melalui mikrofon default perangkat, berikut tampilan TranslationRecognizer
:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig
dan memberikan parameter audioConfig
saat menginisialisasi TranslationRecognizer
.
Referensikan objek AudioConfig
sebagai berikut:
const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig
. Namun, Anda dapat melakukan ini hanya ketika Anda menargetkan Node.js. Namun, ketika Anda membuat instans kelas AudioConfig
, alih-alih memanggil fromDefaultMicrophoneInput
, Anda akan memanggil fromWavFileOutput
dan meneruskan paramater filename
:
const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Menerjemahkan ucapan
Kelas TranslationRecognizer untuk Speech SDK untuk JavaScript memaparkan beberapa metode yang dapat Anda gunakan untuk penerjemahan ucapan:
- Terjemahan satu tembakan (asinkron): Melakukan terjemahan dalam mode non-blok (asinkron). Ini menerjemahkan satu ucapan. Akhir dari ujaran tunggal ditentukan dengan mendengarkan keheningan di akhir atau sampai maksimal 15 detik audio diproses.
- Terjemahan berkelanjutan (asinkron): Secara asinkron memulai operasi terjemahan berkelanjutan. Pengguna mendaftar ke peristiwa dan menangani berbagai status aplikasi. Untuk menghentikan terjemahan berkelanjutan asinkron, hubungi
stopContinuousRecognitionAsync
.
Untuk mempelajari selengkapnya tentang cara memilih mode pengenalan ucapan, lihat Mulai menggunakan ucapan ke teks.
Tentukan bahasa target
Untuk menerjemahkan, Anda harus menentukan bahasa sumber dan minimal satu bahasa target.
Anda dapat memilih bahasa sumber menggunakan lokal yang tercantum dalam Tabel terjemahan Azure Cognitive Service untuk Ucapan. Temukan opsi Anda untuk bahasa yang diterjemahkan di tautan yang sama.
Opsi Anda untuk bahasa target berbeda saat Anda ingin menampilkan teks atau ingin mendengar ucapan terjemahan yang disintesis. Untuk menerjemahkan dari bahasa Inggris ke Bahasa Jerman, ubah objek konfigurasi terjemahan:
speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");
Pengenalan pengucapan tunggal
Berikut adalah contoh penerjemahan pengucapan tunggal asinkron menggunakan recognizeOnceAsync
:
translationRecognizer.recognizeOnceAsync(result => {
// Interact with result
});
Anda harus menulis beberapa kode untuk menghandel hasilnya. Sampel ini mengevaluasi result.reason
untuk terjemahan ke bahasa Jerman:
translationRecognizer.recognizeOnceAsync(
function (result) {
let translation = result.translations.get("de");
window.console.log(translation);
translationRecognizer.close();
},
function (err) {
window.console.log(err);
translationRecognizer.close();
});
Kode Anda juga dapat menangani pembaruan yang disediakan saat terjemahan sedang diproses. Anda dapat menggunakan pembaruan ini untuk memberikan umpan balik visual tentang kemajuan terjemahan. Contoh Node.js JavaScript ini menunjukkan jenis pembaruan ini. Kode berikut juga menampilkan detail yang dihasilkan selama proses penerjemahan:
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);
};
Terjemahan berkelanjutan
Pengenalan berkelanjutan sedikit lebih terlibat daripada pengenalan pengucapan tunggal. Pengenalan berkelanjutan mengharuskan Anda berlangganan peristiwa recognizing
, recognized
, dan canceled
untuk mendapatkan hasil pengenalan. Untuk menghentikan terjemahan, Anda harus menelepon stopContinuousRecognitionAsync
.
Berikut adalah contoh cara penerjemahan berkelanjutan dilakukan pada file input audio. Mari mulai dengan mendefinisikan input dan menginisialisasi TranslationRecognizer
:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Dalam kode berikut, Anda berlangganan acara yang dikirim dari TranslationRecognizer
:
recognizing
: Sinyal untuk peristiwa yang berisi hasil penerjemahan menengah.recognized
: Sinyal untuk peristiwa yang berisi hasil terjemahan akhir. Hasil ini menunjukkan upaya penerjemahan yang berhasil.sessionStopped
: Sinyal untuk peristiwa yang mengindikasikan berakhirnya sesi penerjemahan (operasi).canceled
: Sinyal untuk peristiwa yang berisi hasil terjemahan yang dibatalkan. Peristiwa ini menunjukkan upaya terjemahan yang dibatalkan sebagai akibat dari pembatalan langsung. Atau, mereka menunjukkan kegagalan transportasi atau protokol.
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();
};
Setelah semuanya siap, Anda dapat memanggil startContinuousRecognitionAsync
:
// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();
Pilih bahasa sumber
Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Di kode Anda, cari instans SpeechTranslationConfig
Anda dan tambahkan baris berikut tepat di bawahnya:
speechTranslationConfig.speechRecognitionLanguage = "it-IT";
Properti speechRecognitionLanguage
memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.
Memilih satu atau beberapa bahasa target
SDK Ucapan dapat diterjemahkan ke beberapa bahasa target secara paralel. Bahasa target tersedia agak berbeda dari daftar bahasa sumber. Anda menentukan bahasa target dengan menggunakan kode bahasa, bukan lokal.
Untuk daftar kode bahasa untuk target teks, lihat tabel terjemahan ucapan di halaman dukungan bahasa. Anda juga dapat menemukan detail tentang terjemahan ke dalam bahasa yang disintesis di sana.
Kode berikut menambahkan bahasa Jerman sebagai bahasa target:
speechTranslationConfig.addTargetLanguage("de");
Karena beberapa terjemahan bahasa target dimungkinkan, kode Anda harus menentukan bahasa target saat memeriksa hasilnya. Kode berikut mendapatkan hasil terjemahan untuk bahasa Jerman:
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
};
Paket dokumentasi | referensi (unduh) | Sampel tambahan di GitHub
Speech SDK untuk Objective-C memang mendukung terjemahan ucapan, tetapi kami belum menyertakan panduan di sini. Silakan pilih bahasa pemrograman lain untuk memulai dan belajar tentang konsep, atau lihat referensi Objective-C dan sampel yang ditautkan dari awal artikel ini.
Paket dokumentasi | referensi (unduh) | Sampel tambahan di GitHub
Speech SDK untuk Swift memang mendukung terjemahan ucapan, tetapi kami belum menyertakan panduan di sini. Silakan pilih bahasa pemrograman lain untuk memulai dan mempelajari tentang konsep, atau lihat referensi Swift dan sampel yang ditautkan dari awal artikel ini.
Paket dokumentasi | referensi (PyPi) | Sampel tambahan di GitHub
Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.
Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:
- Menerjemahkan ucapan ke teks
- Menerjemahkan ucapan ke beberapa bahasa target
- Melakukan terjemahan ucapan ke ucapan langsung
Variabel data dan lingkungan sensitif
Contoh kode sumber dalam artikel ini bergantung pada variabel lingkungan untuk menyimpan data sensitif, seperti kunci dan wilayah langganan sumber daya Azure Cognitive Service untuk Ucapan. File kode python berisi dua nilai yang ditetapkan dari variabel lingkungan mesin host: SPEECH__SUBSCRIPTION__KEY
dan SPEECH__SERVICE__REGION
. Kedua variabel ini berada pada lingkup global, membuatnya dapat diakses dalam definisi fungsi dari file kode:
speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']
Untuk informasi selengkapnya tentang variabel lingkungan, lihat Variabel lingkungan dan konfigurasi aplikasi.
Penting
Jika Anda menggunakan kunci API, simpan dengan aman di tempat lain, seperti di Azure Key Vault. Jangan sertakan kunci API langsung dalam kode Anda, dan jangan pernah mempostingnya secara publik.
Untuk informasi selengkapnya tentang keamanan layanan AI, lihat Mengautentikasi permintaan ke layanan Azure AI.
Membuat konfigurasi terjemahan ucapan
Untuk memanggil layanan Azure Cognitive Service untuk Ucapan dengan menggunakan Speech SDK, Anda perlu membuat instans SpeechTranslationConfig
. Kelas ini mencakup informasi tentang langganan Anda, seperti kunci dan wilayah terkait, titik akhir, host, atau token otorisasi.
Tip
Terlepas dari apakah Anda melakukan pengenalan ucapan, sintesis ucapan, terjemahan, atau pengenalan niat, Anda akan selalu membuat konfigurasi.
Anda dapat menginisialisasi SpeechTranslationConfig
dalam beberapa cara:
- Dengan langganan: teruskan kunci dan wilayah terkait.
- Dengan titik akhir: teruskan titik akhir layanan Speech. Token kunci atau otorisasi bersifat opsional.
- Dengan host: teruskan di alamat host. Token kunci atau otorisasi bersifat opsional.
- Dengan token otorisasi: teruskan token otorisasi dan wilayah terkait.
Mari kita lihat bagaimana Anda dapat membuat instans SpeechTranslationConfig
dengan menggunakan kunci dan wilayah. Dapatkan kunci dan wilayah sumber daya Azure Cognitive Service untuk Ucapan di portal Microsoft Azure.
from_language, to_language = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
Mengubah bahasa sumber
Salah satu tugas umum terjemahan ucapan adalah menentukan bahasa input (atau sumber). Contoh berikut menunjukkan bagaimana Anda akan mengubah bahasa input menjadi bahasa Italia. Dalam kode Anda, berinteraksi dengan instans SpeechTranslationConfig
dengan menetapkannya ke properti speech_recognition_language
.
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
Properti speech_recognition_language
memperkirakan string format bahasa lokal. Lihat daftar lokal terjemahan ucapan yang didukung.
Menambahkan bahasa terjemahan
Tugas umum lain dari terjemahan ucapan adalah menentukan bahasa terjemahan target. Setidaknya satu diperlukan, tetapi kelipatan didukung. Cuplikan kode berikut menetapkan bahasa Prancis dan Jerman sebagai target bahasa terjemahan:
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")
Dengan setiap panggilan ke add_target_language
, bahasa terjemahan target baru ditentukan. Dengan kata lain, ketika ucapan dikenali dari bahasa sumber, setiap terjemahan target tersedia sebagai bagian dari operasi terjemahan yang dihasilkan.
Menginisialisasi pengenal terjemahan
Setelah Anda membuat SpeechTranslationConfig
instans, langkah selanjutnya adalah menginisialisasi TranslationRecognizer
. Ketika Anda menginisialisasi TranslationRecognizer
, Anda harus meneruskan instans translation_config
Anda. Objek konfigurasi menyediakan info masuk yang diperlukan layanan ucapan untuk memvalidasi permintaan Anda.
Jika Anda mengenali ucapan dengan menggunakan mikrofon default perangkat, berikut tampilan TranslationRecognizer
:
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)
Jika Anda ingin menentukan perangkat input audio, maka Anda perlu membuat instans kelas AudioConfig
dan memberikan parameter audio_config
saat menginisialisasi TranslationRecognizer
.
Pertama, referensikan objek AudioConfig
sebagai berikut:
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)
Jika Anda ingin menyediakan file audio alih-alih menggunakan mikrofon, Anda masih perlu menyediakan parameter audioConfig
. Namun, saat Anda membuat instans kelasAudioConfig
, alih-alih memanggil dengan use_default_microphone=True
, Anda akan memanggil dengan filename="path-to-file.wav"
dan memberikan parameter 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)
Menerjemahkan ucapan
Untuk menerjemahkan ucapan, Speech SDK bergantung pada mikrofon atau input file audio. Pengenalan ucapan terjadi sebelum terjemahan ucapan. Setelah semua objek diinisialisasi, panggil fungsi recognize-once dan dapatkan hasilnya:
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()
Untuk informasi selengkapnya tentang ucapan ke teks, lihat dasar-dasar pengenalan ucapan.
Menyintesis terjemahan
Setelah pengenalan ucapan dan terjemahan yang berhasil, hasilnya berisi semua terjemahan dalam kamus. Kunci kamus translations
adalah bahasa terjemahan target, dan nilainya adalah teks yang diterjemahkan. Ucapan yang dikenali dapat diterjemahkan dan kemudian disintesis dalam bahasa yang berbeda (speech-to-speech).
Sintesis berbasis peristiwa
TranslationRecognizer
Objek mengekspos sebuah Synthesizing
peristiwa. Peristiwa ini beberapa kali terjadi, dan menyediakan mekanisme untuk mengambil audio yang disintesis dari hasil pengenalan terjemahan. Jika Anda menerjemahkan ke beberapa bahasa, lihat Sintesis manual.
Tentukan suara sintesis dengan menetapkan instans voice_name
, dan menyediakan penghandel peristiwa untuk peristiwa Synthesizing
untuk mendapatkan audio. Contoh berikut menyimpan audio yang diterjemahkan sebagai file .wav.
Penting
Sintesis berbasis peristiwa hanya bekerja dengan terjemahan tunggal. Jangan menambahkan beberapa bahasa terjemahan target. Selain itu, nilai voice_name
harus bahasa yang sama dengan bahasa terjemahan target. Misalnya, "de"
dapat memetakan ke "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()
Sintesis manual
Anda dapat menggunakan kamus translations
untuk mensintesis audio dari teks terjemahan. Iterasi melalui setiap terjemahan, dan mensintesisnya. Saat membuat instans SpeechSynthesizer
, objek SpeechConfig
harus mengatur propertinya speech_synthesis_voice_name
ke suara yang diinginkan.
Contoh berikut diterjemahkan menjadi lima bahasa. Setiap terjemahan kemudian disintesis ke file audio dalam bahasa neural yang sesuai.
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()
Untuk informasi selengkapnya tentang sintesis ucapan, lihat dasar-dasar sintesis ucapan.
Terjemahan multibahasa dengan identifikasi bahasa
Dalam banyak skenario, Anda mungkin tidak tahu bahasa input mana yang akan ditentukan. Menggunakan identifikasi bahasa, Anda dapat mendeteksi hingga 10 kemungkinan bahasa input dan secara otomatis menerjemahkan ke bahasa target Anda.
Untuk sampel kode lengkap, lihat identifikasi bahasa.
Rest API ucapan ke teks mereferensikan Ucapan ke teks REST API untuk referensi | audio singkat Sampel tambahan di GitHub |
Anda dapat menggunakan REST API untuk terjemahan ucapan, tetapi kami belum menyertakan panduan di sini. Silakan pilih bahasa pemrograman lain untuk memulai dan belajar tentang konsep.
Dalam panduan petunjuk ini, Anda belajar bagaimana mengenali ucapan manusia dan menerjemahkannya ke bahasa lain.
Lihat ikhtisar terjemahan ucapan untuk informasi selengkapnya tentang:
- Menerjemahkan ucapan ke teks
- Menerjemahkan ucapan ke beberapa bahasa target
- Melakukan terjemahan ucapan ke ucapan langsung
Prasyarat
- Langganan Azure. Anda dapat membuatnya secara gratis.
- Buat sumber daya Ucapan di portal Azure.
- Dapatkan kunci dan wilayah sumber daya Ucapan. Setelah sumber daya Azure Cognitive Service untuk Ucapan Anda disebarkan, pilih Buka sumber daya untuk melihat dan mengelola kunci.
Unduh dan instal
Ikuti langkah-langkah ini dan lihat mulai cepat Speech CLI untuk persyaratan lain untuk platform Anda.
Jalankan perintah .NET CLI berikut untuk menginstal Speech CLI:
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
Jalankan perintah berikut untuk mengonfigurasi kunci dan wilayah sumber daya Ucapan Anda. Ganti
SUBSCRIPTION-KEY
dengan kunci sumber daya Ucapan Anda dan gantiREGION
dengan wilayah sumber daya Ucapan Anda.spx config @key --set SUBSCRIPTION-KEY spx config @region --set REGION
Mengatur bahasa sumber dan target
Perintah ini memanggil Speech CLI untuk menerjemahkan pidato dari mikrofon dari bahasa Italia ke bahasa Prancis:
spx translate --microphone --source it-IT --target fr