Konuşma çevirisini kullanmaya başlama
Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı algılayabilir ve diğer dillere çevirebilir. Bu hızlı başlangıçta, uygulama ve ürünlarınızdaki konuşma SDK 'sını kullanarak yüksek kaliteli konuşma çevirisi gerçekleştirme hakkında bilgi edinebilirsiniz. Bu hızlı başlangıçta aşağıdakiler dahil konular ele alınmaktadır:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Doğrudan konuşma konuşmadan çeviri gerçekleştiriliyor
GitHub örneklere atlayın
Örnek koda doğrudan atlamak istiyorsanız, GitHub C# hızlı başlangıç örneklerine bakın.
Önkoşullar
Bu makalede bir Azure hesabınız ve konuşma hizmeti aboneliğiniz olduğunu varsaymaktadır. Hesabınız ve aboneliğiniz yoksa konuşma hizmetini ücretsiz deneyin.
Konuşma SDK 'sını yükler
Herhangi bir şey yapabilmeniz için önce konuşma SDK 'sını yüklemeniz gerekir. Platformunuza bağlı olarak, konuşma SDK 'Sı hakkında konusunun konuşma SDK 'sını al bölümünde yer alan yönergeleri izleyin.
Bağımlılıkları içeri aktar
Bu makaledeki örnekleri çalıştırmak için, using program. cs dosyasının en üstüne aşağıdaki deyimleri ekleyin.
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
using Microsoft.CognitiveServices.Speech.Translation;
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, konuşma kaynağı abonelik anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağımlıdır. ProgramSınıfı static readonly string , ve gibi konak makineler ortam değişkenlerinden atanan iki değer içerir SPEECH__SUBSCRIPTION__KEY SPEECH__SERVICE__REGION . Bu alanların her ikisi de sınıf kapsamıdır ve sınıfın yöntem gövdelerinde erişilebilir hale getirir. Ortam değişkenleri hakkında daha fazla bilgi için bkz. ortam değişkenleri ve uygulama yapılandırması.
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;
}
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK 'sını kullanarak konuşma hizmetini çağırmak için bir oluşturmanız gerekir SpeechTranslationConfig . Bu sınıf, uygulamanız hakkında, anahtarınız ve ilgili bölge, uç nokta, ana bilgisayar veya yetkilendirme belirteci gibi bilgileri içerir.
İpucu
Konuşma tanıma, konuşma birleştirme, çeviri veya amaç tanıma işlemlerini gerçekleştirmekten bağımsız olarak her zaman bir yapılandırma oluşturacaksınız.
Şunları başlatabilmeniz için birkaç yol vardır SpeechTranslationConfig :
- Abonelik ile: bir anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: bir konuşma hizmeti uç noktasında geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir ana bilgisayar ile: bir konak adresini geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: bir yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Bir SpeechTranslationConfig anahtar ve bölge kullanarak nasıl oluşturulduğuna göz atalım. Konuşma hizmetini ücretsiz deneyinbölümündeki adımları izleyerek bu kimlik bilgilerini alın.
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 translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}
}
Kaynak dilini değiştir
Konuşma çevirisi 'nin yaygın bir görevi, giriş (veya kaynak) dilini belirtmektir. Giriş dilini Italyanca olarak nasıl değiştirebileceğinizi göz atalım. Kodunuzda, SpeechTranslationConfig özelliğine atayarak örnekle etkileşime geçin SpeechRecognitionLanguage .
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
translationConfig.SpeechRecognitionLanguage = "it-IT";
}
SpeechRecognitionLanguageÖzelliği, bir dil yerel ayar dizesi bekliyor. Desteklenen yerel ayarlar/dillerlistesindeki yerel ayar sütununda herhangi bir değer sağlayabilirsiniz.
Çeviri dili Ekle
Konuşma çevirisi 'nin başka bir ortak görevi, hedef çeviri dillerini belirtmektir; en az bir tane gereklidir ancak birden çok kullanımı desteklenir. Aşağıdaki kod parçacığı, hem Fransızca hem de Almanca ' yı çeviri dili hedefi olarak ayarlar.
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
translationConfig.SpeechRecognitionLanguage = "it-IT";
// Translate to languages. See, https://aka.ms/speech/sttt-languages
translationConfig.AddTargetLanguage("fr");
translationConfig.AddTargetLanguage("de");
}
Her çağrısıyla AddTargetLanguage , yeni bir hedef çeviri dili belirtilir. Diğer bir deyişle, konuşma kaynak dilden tanındığında, her hedef çeviri, elde edilen çeviri işleminin bir parçası olarak kullanılabilir.
Çeviri tanıyıcısı başlatma
Bir oluşturduktan sonra SpeechTranslationConfig , bir sonraki adım bir ' ı başlatmaktır TranslationRecognizer . Bir başlattığınızda TranslationRecognizer , bunu geçirmeniz gerekir translationConfig . Yapılandırma nesnesi, konuşma hizmeti 'nin isteğinizi doğrulamak için ihtiyaç duyduğu kimlik bilgilerini sağlar.
Cihazınızın varsayılan mikrofonunu kullanarak konuşmayı tanıyor olmanız halinde şöyle TranslationRecognizer görünmelidir:
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
translationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(translationConfig.AddTargetLanguage);
using var recognizer = new TranslationRecognizer(translationConfig);
}
Ses giriş cihazını belirtmek isterseniz, oluşturmanız ve ' ı AudioConfig audioConfig başlatırken parametresini sağlamanız gerekir TranslationRecognizer .
İlk AudioConfig olarak, nesnesine aşağıdaki gibi başvuracağız:
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
translationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(translationConfig.AddTargetLanguage);
using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
using var recognizer = new TranslationRecognizer(translationConfig, audioConfig);
}
Mikrofon kullanmak yerine bir ses dosyası sağlamak istiyorsanız, yine de sağlamanız gerekir audioConfig . Ancak, AudioConfig öğesini çağırmak yerine bir oluşturduğunuzda, FromDefaultMicrophoneInput FromWavFileInput parametresini çağırır ve geçireceğiz filename .
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
translationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(translationConfig.AddTargetLanguage);
using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var recognizer = new TranslationRecognizer(translationConfig, audioConfig);
}
Konuşmayı çevirme
Konuşmayı çevirmek için, konuşma SDK 'Sı bir mikrofona veya ses dosyası girişine bağımlıdır. Konuşma tanıma, konuşma çevirisi öncesinde oluşur. Tüm nesneler başlatıldıktan sonra, Recognize-bir kez işlevini çağırın ve sonucu alın.
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "it", "fr", "de" };
translationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(translationConfig.AddTargetLanguage);
using var recognizer = new TranslationRecognizer(translationConfig);
Console.Write($"Say something in '{fromLanguage}' and ");
Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
var result = await recognizer.RecognizeOnceAsync();
if (result.Reason == ResultReason.TranslatedSpeech)
{
Console.WriteLine($"Recognized: \"{result.Text}\":");
foreach (var (language, translation) in result.Translations)
{
Console.WriteLine($"Translated into '{language}': {translation}");
}
}
}
Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz. konuşma tanımanın temelleri.
Çevirileri sentezleştir
Başarılı bir konuşma tanıma ve çeviri işleminden sonra, sonuç bir Sözlükteki tüm çevirileri içerir. TranslationsSözlük anahtarı hedef çeviri dilidir ve değer, çevrilmiş metindir. Tanınan konuşma çevrilebilir ve farklı bir dilde (konuşma konuşmaya) alınabilir.
Olay tabanlı sensıs
TranslationRecognizerNesne bir olay gösterir Synthesizing . Olay birkaç kez harekete geçirilir ve çeviri tanıma sonucundan birleştirilmiş sesi almak için bir mekanizma sağlar. Birden çok dile arıyorsanız bkz. el ile birleştirme. Bir oluşturma ve olay için olay işleyicisi sağlama yoluyla sensıs sesini belirtin VoiceName Synthesizing , sesi alın. Aşağıdaki örnek, çevrilmiş sesi bir . wav dosyası olarak kaydeder.
Önemli
Olay tabanlı birleştirme yalnızca tek bir çeviri ile birlikte çalışarak birden çok hedef çeviri dili eklemeyin. Ayrıca, VoiceName hedef çeviri diliyle aynı dil olmalıdır, örneğin, "de" ile eşleşebilmelidir "de-DE-Hedda" .
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguage = "de";
translationConfig.SpeechRecognitionLanguage = fromLanguage;
translationConfig.AddTargetLanguage(toLanguage);
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
translationConfig.VoiceName = "de-DE-Hedda";
using var recognizer = new TranslationRecognizer(translationConfig);
recognizer.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 recognizer.RecognizeOnceAsync();
if (result.Reason == ResultReason.TranslatedSpeech)
{
Console.WriteLine($"Recognized: \"{result.Text}\"");
Console.WriteLine($"Translated into '{toLanguage}': {result.Translations[toLanguage]}");
}
}
El ile birleştirme
TranslationsSözlük, çeviri metninin sesini sentezleştirmek için kullanılabilir. Her bir çeviride yineleme yapın ve çeviriyi sentezleştirme. Bir örnek oluştururken SpeechSynthesizer SpeechConfig nesnenin SpeechSynthesisVoiceName Özelliği istenen sesle ayarlanmış olması gerekir. Aşağıdaki örnek, beş dili dönüştürür ve her bir çeviri, karşılık gelen sinir dilinde bir ses dosyası ile birleştirilmiştir.
static async Task TranslateSpeechAsync()
{
var translationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SERVICE__KEY, SPEECH__SERVICE__REGION);
var fromLanguage = "en-US";
var toLanguages = new List<string> { "de", "en", "it", "pt", "zh-Hans" };
translationConfig.SpeechRecognitionLanguage = fromLanguage;
toLanguages.ForEach(translationConfig.AddTargetLanguage);
using var recognizer = new TranslationRecognizer(translationConfig);
Console.Write($"Say something in '{fromLanguage}' and ");
Console.WriteLine($"we'll translate into '{string.Join("', '", toLanguages)}'.\n");
var result = await recognizer.RecognizeOnceAsync();
if (result.Reason == ResultReason.TranslatedSpeech)
{
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
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 synthesizer = new SpeechSynthesizer(speechConfig, audioConfig);
await synthesizer.SpeakTextAsync(translation);
}
}
}
Konuşma birleştirme hakkında daha fazla bilgi için bkz. konuşma birleştirme temelleri.
Dil kimliğiyle çok dilli çeviri
Birçok senaryoda, hangi giriş dillerini belirteceğimizi bilmiyor olabilirsiniz. Dil tanımlamasının kullanılması, en fazla on olası giriş dilini belirtmenize ve hedef dillerinizi otomatik olarak çevirmenizi sağlar.
Aşağıdaki örnek, bir ses dosyasından sürekli çeviri kullanır ve söylenen dil değiştirilse bile giriş dilini otomatik olarak algılar. Örneği çalıştırdığınızda, en-US zh-CN içinde tanımlandıklarından otomatik olarak algılanır AutoDetectSourceLanguageConfig . Ardından, konuşma de öğesine yapılan çağrılarında belirtilen şekilde çevrilir fr AddTargetLanguage() .
Önemli
Bu özellik şu anda Önizleme aşamasındadır.
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
public static async Task MultiLingualTranslation()
{
var region = "<paste-your-region>";
// currently the v2 endpoint is required for this design pattern
var endpointString = $"wss://{region}.stt.speech.microsoft.com/speech/universal/v2";
var endpointUrl = new Uri(endpointString);
var config = SpeechConfig.FromEndpoint(endpointUrl, "<paste-your-subscription-key>");
// Source lang is required, but is currently NoOp
string fromLanguage = "en-US";
config.SpeechRecognitionLanguage = fromLanguage;
config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");
config.SetProperty(PropertyId.SpeechServiceConnection_ContinuousLanguageIdPriority, "Latency");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var stopTranslation = new TaskCompletionSource<int>();
using (var audioInput = AudioConfig.FromWavFileInput(@"path-to-your-audio-file.wav"))
{
using (var recognizer = new TranslationRecognizer(config, autoDetectSourceLanguageConfig, audioInput))
{
recognizer.Recognizing += (s, e) =>
{
var lidResult = e.Result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);
Console.WriteLine($"RECOGNIZING in '{lidResult}': Text={e.Result.Text}");
foreach (var element in e.Result.Translations)
{
Console.WriteLine($" TRANSLATING into '{element.Key}': {element.Value}");
}
};
recognizer.Recognized += (s, e) => {
if (e.Result.Reason == ResultReason.TranslatedSpeech)
{
var lidResult = e.Result.Properties.GetProperty(PropertyId.SpeechServiceConnection_AutoDetectSourceLanguageResult);
Console.WriteLine($"RECOGNIZED in '{lidResult}': 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.");
}
};
recognizer.Canceled += (s, e) =>
{
Console.WriteLine($"CANCELED: Reason={e.Reason}");
if (e.Reason == CancellationReason.Error)
{
Console.WriteLine($"CANCELED: ErrorCode={e.ErrorCode}");
Console.WriteLine($"CANCELED: ErrorDetails={e.ErrorDetails}");
Console.WriteLine($"CANCELED: Did you update the subscription info?");
}
stopTranslation.TrySetResult(0);
};
recognizer.SpeechStartDetected += (s, e) => {
Console.WriteLine("\nSpeech start detected event.");
};
recognizer.SpeechEndDetected += (s, e) => {
Console.WriteLine("\nSpeech end detected event.");
};
recognizer.SessionStarted += (s, e) => {
Console.WriteLine("\nSession started event.");
};
recognizer.SessionStopped += (s, e) => {
Console.WriteLine("\nSession stopped event.");
Console.WriteLine($"\nStop translation.");
stopTranslation.TrySetResult(0);
};
// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
Console.WriteLine("Start translation...");
await recognizer.StartContinuousRecognitionAsync().ConfigureAwait(false);
Task.WaitAny(new[] { stopTranslation.Task });
await recognizer.StopContinuousRecognitionAsync().ConfigureAwait(false);
}
}
}
Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşma tanıma ve diğer dillere çevirme özelliğidir. Bu hızlı başlangıçta, yüksek kaliteli konuşma çevirisi gerçekleştirmek için Uygulamalarınız ve ürünlerinizde Konuşma SDK'sı kullanmayı öğrenirsiniz. Bu hızlı başlangıç aşağıdaki konuları kapsar:
- Konuşmayı metne çeviri
- Konuşmayı birden çok hedef dile çeviri
- Doğrudan konuşmayı konuşma çevirisi gerçekleştirme
GitHub'da örneklere atla
Doğrudan örnek koda atlamak için aşağıdaki C++ hızlı başlangıç örneklerine GitHub.
Önkoşullar
Bu makalede, bir Azure hesabınız ve Konuşma hizmeti aboneliğiniz olduğu varsaylanmıştır. Hesabınız ve aboneliğiniz yoksa Konuşma hizmetini ücretsiz olarak deneyin.
Konuşma SDK'sı yükleme
Herhangi bir şey yapamadan önce Konuşma SDK'sı yüklemeniz gerekir. Platforma bağlı olarak Konuşma SDK'sı Hakkında makalenin Konuşma SDK'sı al bölümündeki yönergeleri izleyin.
Bağımlılıkları içeri aktarma
Bu makaledeki örnekleri çalıştırmak için, #include using C++ kod dosyasının en üstüne aşağıdaki ve deyimlerini dahil edin.
#include <iostream> // cin, cout
#include <fstream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
#include <speechapi_cxx.h>
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;
using namespace Microsoft::CognitiveServices::Speech::Translation;
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, Konuşma kaynağı abonelik anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. C++ kod dosyası, ve gibi konak makineleri ortam değişkenlerinden atanan iki dize değeri SPEECH__SUBSCRIPTION__KEY SPEECH__SERVICE__REGION içerir. Bu alanların her ikisi de sınıf kapsamındadır ve bu da sınıfın yöntem gövdeleri içinde erişilebilir olmasını sağlar. Ortam değişkenleri hakkında daha fazla bilgi için bkz. ortam değişkenleri ve uygulama yapılandırması.
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetine çağrı yapmak için bir oluşturmanız SpeechTranslationConfig gerekir. Bu sınıf, anahtarınız ve ilişkili bölge, uç nokta, konak veya yetkilendirme belirteci gibi aboneliğiniz hakkında bilgiler içerir.
İpucu
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirip gerçekleştirmeden bağımsız olarak her zaman bir yapılandırma oluşturmanız gerekir.
Bir başlatabilirsiniz birkaç yolu SpeechTranslationConfig vardır:
- Abonelik ile: bir anahtar ve ilişkili bölgeyi geçin.
- Uç nokta ile: Konuşma hizmeti uç noktasını iletir. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi girin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirteci ve ilişkili bölgeyi iletir.
Şimdi bir anahtarın ve bölgenin kullanılarak SpeechTranslationConfig nasıl oluşturulduklarına bakalım. Konuşma tanıma hizmetini ücretsiz deneyin adımlarını takip edin.
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
void translateSpeech() {
auto config =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}
int main(int argc, char** argv) {
setlocale(LC_ALL, "");
translateSpeech();
return 0;
}
Kaynak dili değiştirme
Konuşma çevirisinin yaygın görevlerinden biri, giriş (veya kaynak) dilini belirtmektir. Şimdi giriş dilini nasıl İtalyanca olarak değiştirdkine göz atarak bakalım. Kodunda, yöntemini çağırarak SpeechTranslationConfig örneğiyle SetSpeechRecognitionLanguage etkileşime girin.
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
translationConfig->SetSpeechRecognitionLanguage("it-IT");
}
özelliği SpeechRecognitionLanguage bir dil yereli biçim dizesi bekler. Desteklenen yerel diller/diller listesinde Yerel Değer sütununda herhangi bir değer sekleyebilirsiniz.
Çeviri dili ekleme
Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir; en az bir tane gereklidir ancak birden çok dil de desteklemektedir. Aşağıdaki kod parçacığı hem Fransızca hem de Almanca çeviri dili hedeflerini ayarlar.
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
translationConfig->SetSpeechRecognitionLanguage("it-IT");
// Translate to languages. See, https://aka.ms/speech/sttt-languages
translationConfig->AddTargetLanguage("fr");
translationConfig->AddTargetLanguage("de");
}
her AddTargetLanguage çağrısıyla, yeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanınıyorsa, sonuçta elde edilen çeviri işlemi kapsamında her hedef çeviri kullanılabilir.
Çeviri tanıyıcıyı başlatma
Bir oluşturduktan SpeechTranslationConfig sonra, sonraki adım bir TranslationRecognizer başlatmaktır. bir 'i TranslationRecognizer başlatarak bunu sizin için geçmeniz translationConfig gerekir. Yapılandırma nesnesi, konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Cihazınızın varsayılan mikrofonunu kullanarak konuşmayı fark ediyorsanız aşağıdaki gibi olması TranslationRecognizer gerekir:
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
translationConfig->AddTargetLanguage(language);
}
auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
}
Ses giriş cihazı belirtmek için bir oluşturmanız ve cihazınızı başlatma sırasında AudioConfig audioConfig parametresini belirtmeniz TranslationRecognizer gerekir.
İlk olarak, nesnesine aşağıdaki AudioConfig gibi başvurabilirsiniz:
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
translationConfig->AddTargetLanguage(language);
}
auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto recognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}
Mikrofon kullanmak yerine ses dosyası sağlamak için yine de sağlamanız audioConfig gerekir. Ancak, çağrısı yapmak yerine AudioConfig bir FromDefaultMicrophoneInput oluşturdukta, çağırarak FromWavFileInput parametresini filename geçersiniz.
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "it", "fr", "de" };
translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
translationConfig->AddTargetLanguage(language);
}
auto audioConfig = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = TranslationRecognizer::FromConfig(translationConfig, audioConfig);
}
Konuşmayı çevirme
Konuşma SDK'sı, konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine bağlı olarak çalışır. Konuşma tanıma, konuşma çevirisi öncesinde gerçekleşir. Tüm nesneler başlatıldıktan sonra recognize-once işlevini çağırarak sonucu elde edersiniz.
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
string fromLanguage = "en-US";
string toLanguages[3] = { "it", "fr", "de" };
translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
translationConfig->AddTargetLanguage(language);
}
auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";
auto result = recognizer->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;
}
}
}
Konuşmayı metne değiştirme hakkında daha fazla bilgi için konuşma tanımanın temel bilgilerine bakın.
Çevirileri sentezleme
Konuşma tanıma ve çeviri başarılı olduktan sonra sonuç, sözlükte tüm çevirileri içerir. Sözlük Translations anahtarı hedef çeviri dilidir ve değeri çevrilmiş metindir. Tanınan konuşma çevrilebilir, ardından farklı bir dilde sentezlenmiş olabilir (konuşmadan konuşmaya).
Olay tabanlı sentez
nesnesi TranslationRecognizer bir olayı Synthesizing gösterir. Olay birkaç kez etkindir ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çeviri yapmak için bkz. el ile sentez. bir ataarak sentez sesini belirtin SetVoiceName ve olay için bir olay işleyicisi Synthesizing belirtin, sesi elde edersiniz. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.
Önemli
Olay tabanlı sentez yalnızca tek bir çeviri ile çalışır, birden çok hedef çeviri dili eklemez. Ayrıca, SetVoiceName hedef çeviri diliyle aynı dil olması gerekir, örneğin; "de" ile eş "de-DE-Hedda" olabilir.
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguage = "de";
translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
translationConfig->AddTargetLanguage(toLanguage);
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
translationConfig->SetVoiceName("de-DE-Hedda");
auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
recognizer->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 = recognizer->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;
}
}
}
El ile sentez
Sözlük, Translations çeviri metninden ses sentezlemek için kullanılabilir. Her çeviride yeni bir sayfayı ve çeviriyi sentezleme. Örnek oluştururken SpeechSynthesizer nesnenin SpeechConfig özelliğinin istenen SetSpeechSynthesisVoiceName sese ayarlanmış olması gerekir. Aşağıdaki örnek beş dile çevrilir ve her çeviri ilgili sinir dilindeki bir ses dosyasına sentezlenmiş olur.
void translateSpeech() {
auto translationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
auto fromLanguage = "en-US";
auto toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
translationConfig->SetSpeechRecognitionLanguage(fromLanguage);
for (auto language : toLanguages) {
translationConfig->AddTargetLanguage(language);
}
auto recognizer = TranslationRecognizer::FromConfig(translationConfig);
cout << "Say something in '" << fromLanguage << "' and we'll translate...\n";
auto result = recognizer->RecognizeOnceAsync().get();
if (result->Reason == ResultReason::TranslatedSpeech)
{
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
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 speech_config =
SpeechConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speech_config->SetSpeechSynthesisVoiceName(languageToVoiceMap[language]);
auto audio_config = AudioConfig::FromWavFileOutput(language + "-translation.wav");
auto synthesizer = SpeechSynthesizer::FromConfig(speech_config, audio_config);
synthesizer->SpeakTextAsync(translation).get();
}
}
}
Konuşma sentezi hakkında daha fazla bilgi için konuşma sentezinin temel bilgilerine bakın.
Dil tanımlama ile çok dilli çeviri
Birçok senaryoda, hangi giriş dillerini belirtmezseniz. Dil tanımlamayı kullanmak, en fazla on olası giriş dili belirtmenize ve hedef dillerinizi otomatik olarak çevirmenize olanak sağlar.
Aşağıdaki örnek, bir ses dosyasından sürekli çeviri kullanır ve konuşulan dil değişse bile giriş dilini otomatik olarak algılar. Örneği çalıştırarak içinde en-US zh-CN tanımlandığı için otomatik olarak AutoDetectSourceLanguageConfig algılanır. Ardından konuşma, çağrısında belirtilen de fr ve diline AddTargetLanguage() çevrilir.
Önemli
Bu özellik şu anda önizlemededir.
using namespace std;
using namespace Microsoft::CognitiveServices::Speech;
using namespace Microsoft::CognitiveServices::Speech::Audio;
void MultiLingualTranslation()
{
auto region = "<paste-your-region>";
// currently the v2 endpoint is required for this design pattern
auto endpointString = std::format("wss://{}.stt.speech.microsoft.com/speech/universal/v2", region);
auto config = SpeechConfig::FromEndpoint(endpointString, "<paste-your-subscription-key>");
config->SetProperty(PropertyId::SpeechServiceConnection_ContinuousLanguageIdPriority, "Latency");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
promise<void> recognitionEnd;
// Source lang is required, but is currently NoOp
auto fromLanguage = "en-US";
config->SetSpeechRecognitionLanguage(fromLanguage);
config->AddTargetLanguage("de");
config->AddTargetLanguage("fr");
auto audioInput = AudioConfig::FromWavFileInput("path-to-your-audio-file.wav");
auto recognizer = TranslationRecognizer::FromConfig(config, autoDetectSourceLanguageConfig, audioInput);
recognizer->Recognizing.Connect([](const TranslationRecognitionEventArgs& e)
{
std::string lidResult = e.Result->Properties.GetProperty(PropertyId::SpeechServiceConnection_AutoDetectSourceLanguageResult);
cout << "Recognizing in Language = "<< lidResult << ":" << e.Result->Text << std::endl;
for (const auto& it : e.Result->Translations)
{
cout << " Translated into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
}
});
recognizer->Recognized.Connect([](const TranslationRecognitionEventArgs& e)
{
if (e.Result->Reason == ResultReason::TranslatedSpeech)
{
std::string lidResult = e.Result->Properties.GetProperty(PropertyId::SpeechServiceConnection_AutoDetectSourceLanguageResult);
cout << "RECOGNIZED in Language = " << lidResult << ": Text=" << e.Result->Text << std::endl;
}
else if (e.Result->Reason == ResultReason::RecognizedSpeech)
{
cout << "RECOGNIZED: Text=" << e.Result->Text << " (text could not be translated)" << std::endl;
}
else if (e.Result->Reason == ResultReason::NoMatch)
{
cout << "NOMATCH: Speech could not be recognized." << std::endl;
}
for (const auto& it : e.Result->Translations)
{
cout << " Translated into '" << it.first.c_str() << "': " << it.second.c_str() << std::endl;
}
});
recognizer->Canceled.Connect([&recognitionEnd](const TranslationRecognitionCanceledEventArgs& e)
{
cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
if (e.Reason == CancellationReason::Error)
{
cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << std::endl;
cout << "CANCELED: ErrorDetails=" << e.ErrorDetails << std::endl;
cout << "CANCELED: Did you update the subscription info?" << std::endl;
recognitionEnd.set_value();
}
});
recognizer->Synthesizing.Connect([](const TranslationSynthesisEventArgs& e)
{
auto size = e.Result->Audio.size();
cout << "Translation synthesis result: size of audio data: " << size
<< (size == 0 ? "(END)" : "");
});
recognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
{
cout << "Session stopped.";
recognitionEnd.set_value();
});
// Starts continuos recognition. Use StopContinuousRecognitionAsync() to stop recognition.
recognizer->StartContinuousRecognitionAsync().get();
recognitionEnd.get_future().get();
recognizer->StopContinuousRecognitionAsync().get();
}
Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşma tanıma ve bunu diğer dillere çevirme özelliğidir. Bu hızlı başlangıçta, yüksek kaliteli konuşma çevirisi gerçekleştirmek için Uygulamalarınız ve ürünlerinizde Konuşma SDK'sı kullanmayı öğrenirsiniz. Bu hızlı başlangıç aşağıdaki konuları kapsar:
- Konuşmayı metne çeviri
- Konuşmayı birden çok hedef dile çeviri
- Doğrudan konuşmayı konuşma çevirisi gerçekleştirme
GitHub'da örneklere atla
Doğrudan örnek koda atlamak için aşağıdaki Java hızlı başlangıç örneklerine GitHub.
Önkoşullar
Bu makalede, bir Azure hesabınız ve Konuşma hizmeti aboneliğiniz olduğu varsaylanmıştır. Hesabınız ve aboneliğiniz yoksa Konuşma hizmetini ücretsiz olarak deneyin.
Konuşma SDK'sı yükleme
Herhangi bir şey yapamadan önce Konuşma SDK'sı yüklemeniz gerekir. Platforma bağlı olarak Konuşma SDK'sı Hakkında makalenin Konuşma SDK'sı al bölümündeki yönergeleri izleyin.
Bağımlılıkları içeri aktarma
Bu makaledeki örnekleri çalıştırmak için* import üst kısmında aşağıdaki deyimlerini içerir. Java kod dosyası.
package speech;
import java.io.*;
import java.util.*;
import java.util.concurrent.*;
import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.*;
import com.microsoft.cognitiveservices.speech.translation.*;
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, Konuşma kaynağı abonelik anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. Java kod dosyası, static final String ve gibi konak makineleri ortam değişkenlerinden atanan iki değer SPEECH__SUBSCRIPTION__KEY SPEECH__SERVICE__REGION içerir. Bu alanların her ikisi de sınıf kapsamındadır ve bu da sınıfın yöntem gövdeleri içinde erişilebilir olmasını sağlar. Ortam değişkenleri hakkında daha fazla bilgi için bkz. ortam değişkenleri ve uygulama yapılandırması.
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) { }
}
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetine çağrı yapmak için bir oluşturmanız SpeechTranslationConfig gerekir. Bu sınıf, anahtarınız ve ilişkili bölge, uç nokta, konak veya yetkilendirme belirteci gibi aboneliğiniz hakkında bilgiler içerir.
İpucu
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirip gerçekleştirmeden bağımsız olarak her zaman bir yapılandırma oluşturmanız gerekir.
Bir başlatabilirsiniz birkaç yolu SpeechTranslationConfig vardır:
- Abonelik ile: bir anahtar ve ilişkili bölgeyi geçin.
- Uç nokta ile: Konuşma hizmeti uç noktasını iletir. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi girin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirteci ve ilişkili bölgeyi iletir.
Şimdi bir anahtarın ve bölgenin kullanılarak SpeechTranslationConfig nasıl oluşturulduklarına bakalım. Konuşma tanıma hizmetini ücretsiz deneyin adımlarını takip edin.
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 config = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
}
}
Kaynak dili değiştirme
Konuşma çevirisinin yaygın görevlerinden biri, giriş (veya kaynak) dilini belirtmektir. Şimdi giriş dilini nasıl İtalyanca olarak değiştirdkine göz at bakalım. Kodunda, yöntemini çağırarak SpeechTranslationConfig örneğiyle setSpeechRecognitionLanguage etkileşime girin.
static void translateSpeech() {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
translationConfig.setSpeechRecognitionLanguage("it-IT");
}
İşlev setSpeechRecognitionLanguage bir dil yereli biçim dizesi bekler. Desteklenen yerel diller/diller listesinde Yerel Değer sütununda herhangi bir değer sekleyebilirsiniz.
Çeviri dili ekleme
Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir dil gereklidir ancak birden çok dil de desteklemektedir. Aşağıdaki kod parçacığı hem Fransızca hem de Almanca çeviri dili hedeflerini ayarlar.
static void translateSpeech() {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
translationConfig.setSpeechRecognitionLanguage("it-IT");
// Translate to languages. See, https://aka.ms/speech/sttt-languages
translationConfig.addTargetLanguage("fr");
translationConfig.addTargetLanguage("de");
}
her addTargetLanguage çağrısıyla, yeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanınıyorsa, sonuçta elde edilen çeviri işlemi kapsamında her hedef çeviri kullanılabilir.
Çeviri tanıyıcıyı başlatma
Bir oluşturduktan SpeechTranslationConfig sonra, sonraki adım bir TranslationRecognizer başlatmaktır. bir 'i TranslationRecognizer başlatarak bunu sizin için geçmeniz translationConfig gerekir. Yapılandırma nesnesi, konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Cihazınızın varsayılan mikrofonunu kullanarak konuşmayı fark ediyorsanız aşağıdaki gibi TranslationRecognizer olması gerekir:
static void translateSpeech() {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
translationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
translationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
}
}
Ses giriş cihazı belirtmek için bir oluşturmanız ve cihazınızı başlatma sırasında AudioConfig audioConfig parametresini belirtmeniz TranslationRecognizer gerekir.
İlk olarak, nesnesine aşağıdaki AudioConfig gibi başvurabilirsiniz:
static void translateSpeech() {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
translationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
translationConfig.addTargetLanguage(language);
}
AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig, audioConfig)) {
}
}
Mikrofon kullanmak yerine ses dosyası sağlamak için yine de sağlamanız audioConfig gerekir. Ancak, çağrısı yapmak yerine AudioConfig bir fromDefaultMicrophoneInput oluşturdukta, çağırarak fromWavFileInput parametresini filename geçersiniz.
static void translateSpeech() {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
translationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
translationConfig.addTargetLanguage(language);
}
AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig, audioConfig)) {
}
}
Konuşmayı çevirme
Konuşma SDK'sı konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine bağlı olarak çalışır. Konuşma tanıma, konuşma çevirisi öncesinde gerçekleşir. Tüm nesneler başlatıldıktan sonra recognize-once işlevini çağırarak sonucu elde edersiniz.
static void translateSpeech() throws ExecutionException, InterruptedException {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "it", "fr", "de" };
translationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
translationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);
TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
if (result.getReason() == ResultReason.TranslatedSpeech) {
System.out.printf("Recognized: \"%s\"\n", result.getText());
for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
System.out.printf("Translated into '%s': %s\n", pair.getKey(), pair.getValue());
}
}
}
}
Konuşmayı metne değiştirme hakkında daha fazla bilgi için konuşma tanımanın temelleri'ne bakın.
Çevirileri sentezleme
Başarılı bir konuşma tanıma ve çeviriden sonra sonuç, sözlükte tüm çevirileri içerir. işlevi, getTranslations hedef çeviri dili olarak anahtarına sahip bir sözlük döndürür ve değeri çevrilmiş metindir. Tanınan konuşma çevrilebilir, ardından farklı bir dilde sentezlenmiş olabilir (konuşmadan konuşmaya).
Olay tabanlı sentez
nesnesi TranslationRecognizer bir olayı synthesizing gösterir. Olay birkaç kez etkindir ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çeviri yapmak için bkz. el ile sentez. bir ataarak sentez sesini belirtin setVoiceName ve olay için bir olay işleyicisi synthesizing belirtin, sesi elde edersiniz. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.
Önemli
Olay tabanlı sentez yalnızca tek bir çeviri ile çalışır, birden çok hedef çeviri dili eklemez. Ayrıca, setVoiceName hedef çeviri diliyle aynı dil olması gerekir, örneğin; "de" ile eş "de-DE-Hedda" olabilir.
static void translateSpeech() throws ExecutionException, FileNotFoundException, InterruptedException, IOException {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String toLanguage = "de";
translationConfig.setSpeechRecognitionLanguage(fromLanguage);
translationConfig.addTargetLanguage(toLanguage);
// See: https://aka.ms/speech/sdkregion#standard-and-neural-voices
translationConfig.setVoiceName("de-DE-Hedda");
try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
recognizer.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 result = recognizer.recognizeOnceAsync().get();
if (result.getReason() == ResultReason.TranslatedSpeech) {
System.out.printf("Recognized: \"%s\"\n", result.getText());
for (Map.Entry<String, String> pair : result.getTranslations().entrySet()) {
String language = pair.getKey();
String translation = pair.getValue();
System.out.printf("Translated into '%s': %s\n", language, translation);
}
}
}
}
El ile sentez
işlevi, getTranslations çeviri metninden ses sentezlemek için kullanılan bir sözlük döndürür. Her çeviride yeni bir sayfayı ve çeviriyi sentezleme. Örnek oluştururken SpeechSynthesizer nesnenin SpeechConfig özelliğinin istenen setSpeechSynthesisVoiceName sese ayarlanmış olması gerekir. Aşağıdaki örnek beş dile çevrilir ve her çeviri ilgili sinir dilindeki bir ses dosyasına sentezlenmiş olur.
static void translateSpeech() throws ExecutionException, InterruptedException {
SpeechTranslationConfig translationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
String fromLanguage = "en-US";
String[] toLanguages = { "de", "en", "it", "pt", "zh-Hans" };
translationConfig.setSpeechRecognitionLanguage(fromLanguage);
for (String language : toLanguages) {
translationConfig.addTargetLanguage(language);
}
try (TranslationRecognizer recognizer = new TranslationRecognizer(translationConfig)) {
System.out.printf("Say something in '%s' and we'll translate...", fromLanguage);
TranslationRecognitionResult result = recognizer.recognizeOnceAsync().get();
if (result.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", result.getText());
for (Map.Entry<String, String> pair : result.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 synthesizer = new SpeechSynthesizer(speechConfig, audioConfig)) {
synthesizer.SpeakTextAsync(translation).get();
}
}
}
}
}
Konuşma sentezi hakkında daha fazla bilgi için konuşma sentezinin temel bilgilerine bakın.
Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı algılayabilir ve diğer dillere çevirebilir. Bu hızlı başlangıçta, uygulama ve ürünlarınızdaki konuşma SDK 'sını kullanarak yüksek kaliteli konuşma çevirisi gerçekleştirme hakkında bilgi edinebilirsiniz. Bu hızlı başlangıçta aşağıdakiler dahil konular ele alınmaktadır:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Doğrudan konuşma konuşmadan çeviri gerçekleştiriliyor
GitHub örneklere atlayın
Örnek koda doğrudan atlamak istiyorsanız GitHub JavaScript hızlı başlangıç örneklerine bakın.
Önkoşullar
Bu makalede bir Azure hesabınız ve konuşma hizmeti aboneliğiniz olduğunu varsaymaktadır. Hesabınız ve aboneliğiniz yoksa konuşma hizmetini ücretsiz deneyin.
Konuşma SDK 'sını yükler
Herhangi bir şey yapabilmeniz için önce JavaScript Için konuşma SDK 'sını yüklemeniz gerekir. Platformunuza bağlı olarak, aşağıdaki yönergeleri kullanın:
Ayrıca, hedef ortama bağlı olarak, aşağıdakilerden birini kullanın:
JavaScript microsoft.cognitiveservices.speech.sdk.bundle.js dosyası için konuşma SDK 'sını indirip ayıklayın ve HTML dosyanıza erişilebilen bir klasöre yerleştirin.
<script src="microsoft.cognitiveservices.speech.sdk.bundle.js"></script>;
İpucu
Bir Web tarayıcısını hedefliyorsanız ve etiketini kullanıyorsanız, <script> sdk ön ek gerekli değildir. sdkÖn ek, modülü adlandırmak için kullanılan bir diğer addır require .
Çeviri yapılandırması oluşturma
Konuşma SDK 'sını kullanarak çeviri hizmetini çağırmak için bir oluşturmanız gerekir SpeechTranslationConfig . Bu sınıf, uygulamanız hakkında, anahtarınız ve ilgili bölge, uç nokta, ana bilgisayar veya yetkilendirme belirteci gibi bilgileri içerir.
Not
Konuşma tanıma, konuşma birleştirme, çeviri veya amaç tanıma işlemlerini gerçekleştirmekten bağımsız olarak her zaman bir yapılandırma oluşturacaksınız.
Şunları başlatabilmeniz için birkaç yol vardır SpeechTranslationConfig :
- Abonelik ile: bir anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: bir konuşma hizmeti uç noktasında geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir ana bilgisayar ile: bir konak adresini geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: bir yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Bir SpeechTranslationConfig anahtar ve bölge kullanarak nasıl oluşturulduğuna göz atalım. Konuşma hizmetini ücretsiz deneyinbölümündeki adımları izleyerek bu kimlik bilgilerini alın.
const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
Çeviriciyi başlatma
Bir oluşturduktan sonra SpeechTranslationConfig , bir sonraki adım bir ' ı başlatmaktır TranslationRecognizer . Bir başlattığınızda TranslationRecognizer , bunu geçirmeniz gerekir speechTranslationConfig . Bu, çeviri hizmetinin isteğinizi doğrulamak için ihtiyaç duyduğu kimlik bilgilerini sağlar.
Cihazınızın varsayılan mikrofonuna göre sunulan konuşmayı çevirmezseniz, şöyle TranslationRecognizer görünmelidir:
const translator = new TranslationRecognizer(speechTranslationConfig);
Ses giriş cihazını belirtmek isterseniz, oluşturmanız ve ' ı AudioConfig audioConfig başlatırken parametresini sağlamanız gerekir TranslationRecognizer .
İpucu
Ses giriş cihazınız için CIHAZ kimliğini nasıl alabileceğinizi öğrenin.
AudioConfigNesneye aşağıdaki gibi başvurun:
const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const recognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Mikrofon kullanmak yerine bir ses dosyası sağlamak istiyorsanız, yine de sağlamanız gerekir audioConfig . Ancak, bu yalnızca Node.js hedeflenirken ve AudioConfig ' yi çağırmak yerine bir oluşturduğunuzda, fromDefaultMicrophoneInput parametresini çağırarak fromWavFileOutput ve geçireceğiz filename .
const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const recognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Konuşmayı çevirme
JavaScript için konuşma SDK 'Sı için Translationtanıyıcı sınıfı , konuşma çevirisi için kullanabileceğiniz birkaç yöntem sunar.
- Başlangıç çevirisi (Async)-blok olmayan (zaman uyumsuz) modda çeviri gerçekleştirir. Bu, tek bir utterance 'yi çevirecek. Tek bir utterüance 'in sonunda, sonda sessizlik dinlemesi veya en fazla 15 saniyelik ses işlenene kadar belirlenir.
- Sürekli çeviri (Async)-zaman uyumsuz olarak sürekli çeviri işlemini başlatır. Kullanıcı olaylara kaydolur ve çeşitli uygulama durumlarını işler. Zaman uyumsuz sürekli çeviriyi durdurmak için çağrısı yapın
stopContinuousRecognitionAsync.
Not
Konuşma tanıma modunu seçmehakkında daha fazla bilgi edinin.
Hedef dil belirtin
Çevirmek için hem bir kaynak dili hem de en az bir hedef dil belirtmeniz gerekir. Konuşma çevirisi tablosundalistelenen bir yerel ayarı kullanarak bir kaynak dili seçebilirsiniz. Aynı bağlantıda çevrilmiş dile yönelik seçeneklerinizi bulun. Hedef dillere yönelik seçenekleriniz, metin görüntülemek istediğinizde veya sentezlenmiş konuşmayı dinlemek istediğinizde farklılık gösterir. Ingilizce 'den Almanca 'ya çevirmek için, çeviri yapılandırma nesnesini değiştirin:
speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");
Noktadan başlayarak tanıma
Aşağıdaki kullanılarak, zaman uyumsuz çeviri için bir örnek aşağıda verilmiştir recognizeOnceAsync :
recognizer.recognizeOnceAsync(result => {
// Interact with result
});
Sonucu işlemek için bazı kodlar yazmanız gerekir. Bu örnek, result.reason bir çevirisini Almanca için değerlendirir:
recognizer.recognizeOnceAsync(
function (result) {
let translation = result.translations.get("de");
window.console.log(translation);
recognizer.close();
},
function (err) {
window.console.log(err);
recognizer.close();
});
Kodunuz, çeviri işlendiği sırada belirtilen güncelleştirmeleri de işleyebilir. Bu güncelleştirmeleri, çeviri ilerleme durumu hakkında görsel geri bildirim sağlamak için kullanabilirsiniz. Çeviri işlemi sırasında belirtilen güncelleştirmeleri gösteren örnek kod için Bu JavaScript Node.js örneğine bakın. Aşağıdaki kod ayrıca, çeviri işlemi sırasında üretilen ayrıntıları görüntüler.
recognizer.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);
};
recognizer.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);
};
Sürekli çeviri
Sürekli çeviri, başlangıçtan sonra tanınmadan biraz daha karmaşıktır. recognizing recognized Tanıma sonuçlarını almak için,, ve olaylarına abone olmanızı gerektirir canceled . Çeviriyi durdurmak için çağrısı yapmanız gerekir stopContinuousRecognitionAsync . İşte, bir ses giriş dosyasında sürekli çevirinin nasıl gerçekleştirilebileceğini gösteren bir örnek.
Girişi tanımlayarak ve şunu başlatarak başlayalım TranslationRecognizer :
const translator = new TranslationRecognizer(speechTranslationConfig);
Kaynağından gönderilen olaylara abone edeceğiz TranslationRecognizer .
recognizing: Ara çeviri sonuçları içeren olaylar için sinyal.recognized: Son çeviri sonuçlarını içeren olaylar için sinyal (başarılı bir çeviri denemesi olduğunu gösterir).sessionStopped: Bir çeviri oturumunun sonunu belirten olaylar için sinyal (işlem).canceled: İptal edilen Çeviri sonuçlarını içeren olaylar için sinyal (sonuç veya doğrudan iptal isteği olarak iptal edilen bir çeviri girişimi veya ya da bir aktarım ya da protokol arızası).
recognizer.recognizing = (s, e) => {
console.log(`TRANSLATING: Text=${e.result.text}`);
};
recognizer.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.");
}
};
recognizer.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 update the subscription info?");
}
recognizer.stopContinuousRecognitionAsync();
};
recognizer.sessionStopped = (s, e) => {
console.log("\n Session stopped event.");
recognizer.stopContinuousRecognitionAsync();
};
Her şey ayarlandığında, çağırabiliriz startContinuousRecognitionAsync .
// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
recognizer.startContinuousRecognitionAsync();
// Something later can call, stops recognition.
// recognizer.StopContinuousRecognitionAsync();
Kaynak dili seçin
Konuşma çevirisi için ortak bir görev, giriş (veya kaynak) dilini belirtmektir. Giriş dilini Italyanca olarak nasıl değiştirebileceğinizi göz atalım. Kodunuzda, SpeechTranslationConfig daha sonra hemen altına aşağıdaki satırı ekleyin.
speechTranslationConfig.speechRecognitionLanguage = "it-IT";
speechRecognitionLanguageÖzelliği, bir dil yerel ayar dizesi bekliyor. Desteklenen yerel ayarlar/dillerlistesindeki yerel ayar sütununda herhangi bir değer sağlayabilirsiniz.
Bir veya daha fazla hedef dil seçin
Konuşma SDK 'Sı, paralel olarak birden çok hedef dile çeviri yapabilir. Kullanılabilir hedef diller, kaynak dil listesinden biraz farklıdır ve hedef dilleri bir yerel ayar yerine bir dil kodu kullanarak belirtirsiniz. Dil desteği sayfasındaki konuşma çevirisi tablosundabulunan metin hedefleri için dil kodlarının listesini görüntüleyin. Ayrıca, bu dile çeviri hakkındaki ayrıntıları burada bulabilirsiniz.
Aşağıdaki kod, bir hedef dil olarak Almanca ekler:
translationConfig.addTargetLanguage("de");
Birden çok hedef dil çevirisi mümkün olduğundan, sonucu incelerken kodunuzun hedef dili belirtmesi gerekir. Aşağıdaki kod, Almanca için çeviri sonuçlarını alır.
recognizer.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
};
Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı algılayabilir ve diğer dillere çevirebilir. Bu hızlı başlangıçta, uygulama ve ürünlarınızdaki konuşma SDK 'sını kullanarak yüksek kaliteli konuşma çevirisi gerçekleştirme hakkında bilgi edinebilirsiniz. Bu hızlı başlangıçta aşağıdakiler dahil konular ele alınmaktadır:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Doğrudan konuşma konuşmadan çeviri gerçekleştiriliyor
GitHub örneklere atlayın
Örnek koda doğrudan atlamak istiyorsanız GitHub Python hızlı başlangıç örneklerine bakın.
Önkoşullar
Bu makalede bir Azure hesabınız ve konuşma hizmeti aboneliğiniz olduğunu varsaymaktadır. Hesabınız ve aboneliğiniz yoksa konuşma hizmetini ücretsiz deneyin.
Konuşma SDK 'sını yükler
Herhangi bir şey yapabilmeniz için önce konuşma SDK 'sını yüklemeniz gerekir. Platformunuza bağlı olarak, konuşma SDK 'Sı hakkında konusunun konuşma SDK 'sını al bölümünde yer alan yönergeleri izleyin.
Bağımlılıkları içeri aktar
Bu makaledeki örnekleri çalıştırmak için import Python kod dosyasının en üstüne aşağıdaki deyimleri ekleyin.
import os
import azure.cognitiveservices.speech as speechsdk
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, konuşma kaynağı abonelik anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağımlıdır. Python kod dosyası, ve gibi konak makineler ortam değişkenlerinden atanan iki değer içerir SPEECH__SUBSCRIPTION__KEY SPEECH__SERVICE__REGION . Bu değişkenlerin her ikisi de genel kapsamdadır ve kod dosyasının işlev tanımı içinde erişilebilir hale getirir. Ortam değişkenleri hakkında daha fazla bilgi için bkz. ortam değişkenleri ve uygulama yapılandırması.
speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK 'sını kullanarak konuşma hizmetini çağırmak için bir oluşturmanız gerekir SpeechTranslationConfig . Bu sınıf, uygulamanız hakkında, anahtarınız ve ilgili bölge, uç nokta, ana bilgisayar veya yetkilendirme belirteci gibi bilgileri içerir.
İpucu
Konuşma tanıma, konuşma birleştirme, çeviri veya amaç tanıma işlemlerini gerçekleştirmekten bağımsız olarak her zaman bir yapılandırma oluşturacaksınız.
Şunları başlatabilmeniz için birkaç yol vardır SpeechTranslationConfig :
- Abonelik ile: bir anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: bir konuşma hizmeti uç noktasında geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir ana bilgisayar ile: bir konak adresini geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: bir yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Bir SpeechTranslationConfig anahtar ve bölge kullanarak nasıl oluşturulduğuna göz atalım. Konuşma hizmetini ücretsiz deneyinbölümündeki adımları izleyerek bu kimlik bilgilerini alın.
from_language, to_language = 'en-US', 'de'
def translate_speech_to_text():
translation_config = speechsdk.translation.SpeechTranslationConfig(
subscription=speech_key, region=service_region)
Kaynak dilini değiştir
Konuşma çevirisi 'nin yaygın bir görevi, giriş (veya kaynak) dilini belirtmektir. Giriş dilini Italyanca olarak nasıl değiştirebileceğinizi göz atalım. Kodunuzda, SpeechTranslationConfig özelliğine atayarak örnekle etkileşime geçin 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
speech_recognition_languageÖzelliği, bir dil yerel ayar dizesi bekliyor. Desteklenen yerel ayarlar/dillerlistesindeki yerel ayar sütununda herhangi bir değer sağlayabilirsiniz.
Çeviri dili Ekle
Konuşma çevirisi 'nin başka bir ortak görevi, hedef çeviri dillerini belirtmektir, ancak en az bir tane gereklidir ancak katları desteklenir. Aşağıdaki kod parçacığı, hem Fransızca hem de Almanca ' yı çeviri dili hedefi olarak ayarlar.
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")
Her çağrısıyla add_target_language , yeni bir hedef çeviri dili belirtilir. Diğer bir deyişle, konuşma kaynak dilden tanındığında, her hedef çeviri, elde edilen çeviri işleminin bir parçası olarak kullanılabilir.
Çeviri tanıyıcısı başlatma
Bir oluşturduktan sonra SpeechTranslationConfig , bir sonraki adım bir ' ı başlatmaktır TranslationRecognizer . Bir başlattığınızda TranslationRecognizer , bunu geçirmeniz gerekir translation_config . Yapılandırma nesnesi, konuşma hizmeti 'nin isteğinizi doğrulamak için ihtiyaç duyduğu kimlik bilgilerini sağlar.
Cihazınızın varsayılan mikrofonunu kullanarak konuşmayı tanıyor olmanız halinde şöyle TranslationRecognizer görünmelidir:
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)
recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
Ses giriş cihazını belirtmek isterseniz, oluşturmanız ve ' ı AudioConfig audio_config başlatırken parametresini sağlamanız gerekir TranslationRecognizer .
İlk AudioConfig olarak, nesnesine aşağıdaki gibi başvuracağız:
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)
recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config, audio_config=audio_config)
Mikrofon kullanmak yerine bir ses dosyası sağlamak istiyorsanız, yine de sağlamanız gerekir audioConfig . Ancak, AudioConfig ile çağırmak yerine bir oluşturduğunuzda, use_default_microphone=True ile çağrın filename="path-to-file.wav" ve filename parametresini sağlarsınız.
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")
recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config, audio_config=audio_config)
Konuşmayı çevirme
Konuşma SDK’sının konuşmayı çevirmek için bir mikrofona veya ses dosyası girişine ihtiyacı vardır. Konuşma tanıma, konuşma çevirisinden önce gerçekleşir. Tüm nesneler başlatıldıktan sonra, Recognize-bir kez işlevini çağırın ve sonucu alın.
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)
recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
print('Say something...')
result = recognizer.recognize_once()
print(get_result_text(reason=result.reason, result=result))
def get_result_text(reason, result):
reason_format = {
speechsdk.ResultReason.TranslatedSpeech:
f'RECOGNIZED "{from_language}": {result.text}\n' +
f'TRANSLATED into "{to_language}"": {result.translations[to_language]}',
speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
}
return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()
Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz. konuşma tanımanın temelleri.
Çevirileri sentezleştir
Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. translationsSözlük anahtarı hedef çeviri dilidir ve değer, çevrilmiş metindir. Tanınan konuşma çevrilebilir ve ardından farklı bir dilde sentezlenebilir (konuşmadan konuşmaya).
Olay tabanlı sensıs
TranslationRecognizerNesne bir olay gösterir Synthesizing . Olay birkaç kez harekete geçirilir ve çeviri tanıma sonucundan birleştirilmiş sesi almak için bir mekanizma sağlar. Birden çok dile arıyorsanız bkz. el ile birleştirme. Bir oluşturma ve olay için olay işleyicisi sağlama yoluyla sensıs sesini belirtin voice_name Synthesizing , sesi alın. Aşağıdaki örnek, çevrilmiş sesi bir . wav dosyası olarak kaydeder.
Önemli
Olay tabanlı birleştirme yalnızca tek bir çeviri ile birlikte çalışarak birden çok hedef çeviri dili eklemeyin. Ayrıca, voice_name hedef çeviri diliyle aynı dil olmalıdır, örneğin, "de" ile eşleşebilmelidir "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"
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()
recognizer.synthesizing.connect(synthesis_callback)
print(f'Say something in "{from_language}" and we\'ll translate into "{to_language}".')
result = recognizer.recognize_once()
print(get_result_text(reason=result.reason, result=result))
def get_result_text(reason, result):
reason_format = {
speechsdk.ResultReason.TranslatedSpeech:
f'Recognized "{from_language}": {result.text}\n' +
f'Translated into "{to_language}"": {result.translations[to_language]}',
speechsdk.ResultReason.RecognizedSpeech: f'Recognized: "{result.text}"',
speechsdk.ResultReason.NoMatch: f'No speech could be recognized: {result.no_match_details}',
speechsdk.ResultReason.Canceled: f'Speech Recognition canceled: {result.cancellation_details}'
}
return reason_format.get(reason, 'Unable to recognize speech')
translate_speech_to_text()
El ile birleştirme
translationsSözlük, çeviri metninin sesini sentezleştirmek için kullanılabilir. Her bir çeviride yineleme yapın ve çeviriyi sentezleştirme. Bir örnek oluştururken SpeechSynthesizer SpeechConfig nesnenin speech_synthesis_voice_name Özelliği istenen sesle ayarlanmış olması gerekir. Aşağıdaki örnek, beş dili dönüştürür ve her bir çeviri, karşılık gelen sinir dilinde bir ses dosyası ile birleştirilmiştir.
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...')
result = recognizer.recognize_once()
synthesize_translations(result=result)
def synthesize_translations(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: "{result.text}"')
for language in result.translations:
translation = 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()
Konuşma birleştirme hakkında daha fazla bilgi için bkz. konuşma birleştirme temelleri.
Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı algılayabilir ve diğer dillere çevirebilir. Bu hızlı başlangıçta, uygulama ve ürünlarınızdaki konuşma SDK 'sını kullanarak yüksek kaliteli konuşma çevirisi gerçekleştirme hakkında bilgi edinebilirsiniz. Bu hızlı başlangıç, konuşmayı mikrofondan başka bir dilde metne dönüştürür.
Önkoşullar
Bu makalede bir Azure hesabınız ve konuşma hizmeti aboneliğiniz olduğunu varsaymaktadır. Hesabınız ve aboneliğiniz yoksa konuşma hizmetini ücretsiz deneyin.
İndirme ve yükleme
Konuşma CLI'sini aşağıdaki adımlarla Windows:
Bu Windows, platform Microsoft Visual C++ 2019 için Visual Studio Yeniden Dağıtılabilir'e ihtiyacınız vardır. Bunu ilk kez yüklemek için yeniden başlatmanız gerekir.
Şu komutu girerek NuGet KONUŞMA CLI'sini yükleyin:
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
Konuşma spx CLI'sı için yardım görmek için yazın.
Not
Bu dosyanın alternatif NuGet zip dosyası olarak Windows için Konuşma CLI'sini indirip ayıkabilirsiniz.
Yazı tipi sınırlamaları
Bu Windows Konuşma CLI'sı yalnızca yerel bilgisayarda komut isteminde kullanılabilen yazı tiplerini gösterebilir. Windows Terminal Konuşma CLI'sı tarafından etkileşimli olarak üretilen tüm yazı tiplerini destekler.
Bir dosyaya çıktı oluşturursanız, Not Defteri gibi bir metin düzenleyicisi veya Microsoft Edge gibi bir web tarayıcısı da tüm yazı tiplerini gösterebilir.
Kaynak ve hedef dil ayarla
Bu komut, konuşmayı Italyan 'dan Fransızca 'ya dönüştürmek için konuşma CLı 'Yı çağırır.
spx translate --microphone --source it-IT --target fr
Sonraki adımlar
- Codec sıkıştırılmış ses biçimlerini kullanma
- Aşağıdaki hızlı başlangıç örneklerine GitHub.