Konuşmayı tanıma ve çevirme
Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.
Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Konuşma çevirisine doğrudan konuşma gerçekleştirme
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, Konuşma kaynağının anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. sınıfı, Program
konak makinenin ortam değişkenlerinden atanan iki static readonly string
değer içerir: SPEECH__SUBSCRIPTION__KEY
ve SPEECH__SERVICE__REGION
. Bu alanların her ikisi de sınıf kapsamında olduğundan, sınıfın yöntem gövdeleri içinde erişilebilir:
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;
}
Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
İpucu
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Birkaç yolla başlatabilirsiniz SpeechTranslationConfig
:
- Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig
bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini 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 speechTranslationConfig =
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. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda, özelliğine SpeechTranslationConfig
atayarak örnekle etkileşim kurun SpeechRecognitionLanguage
:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
}
SpeechRecognitionLanguage
özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.
Çeviri dili ekleme
Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:
static async Task TranslateSpeechAsync()
{
var speechTranslationConfig =
SpeechTranslationConfig.FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig.SpeechRecognitionLanguage = "it-IT";
speechTranslationConfig.AddTargetLanguage("fr");
speechTranslationConfig.AddTargetLanguage("de");
}
için yapılan her çağrıda AddTargetLanguage
yeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.
Çeviri tanıyıcıyı başlatma
Bir SpeechTranslationConfig
örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer
. uygulamasını başlatırken TranslationRecognizer
örneğinizi geçirmeniz speechTranslationConfig
gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Konuşmaları cihazınızın varsayılan mikrofonunu kullanarak tanıyorsanız örneğin TranslationRecognizer
şu şekilde görünmesi gerekir:
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);
}
Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig
sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizer
parametresini audioConfig
sağlamanız gerekir.
İpucu
Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.
İlk olarak, nesnesine AudioConfig
aşağıdaki gibi başvurun:
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);
}
Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig
parametre sağlamanız gerekir. Ancak, bir AudioConfig
sınıf örneği oluşturduğunuzda çağırmak FromDefaultMicrophoneInput
yerine öğesini çağırıp FromWavFileInput
parametresini filename
geçirirsiniz:
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);
}
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-once işlevini çağırın ve sonucu alın:
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}");
}
}
}
Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.
Olay tabanlı çeviri
TranslationRecognizer
nesnesi bir Recognizing
olayı kullanıma sunar. Olay birkaç kez tetikler ve ara çeviri sonuçlarını almak için bir mekanizma sağlar.
Not
Çok dilli konuşma çevirisi kullandığınızda ara çeviri sonuçları kullanılamaz.
Aşağıdaki örnek ara çeviri sonuçlarını konsola yazdırır:
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);
}
}
Çevirileri sentezle
Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. Translations
Sözlük anahtarı hedef çeviri dili, değer ise çevrilmiş metindir. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.
Olay tabanlı sentez
TranslationRecognizer
nesnesi bir Synthesizing
olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.
Bir VoiceName
örnek atayarak sentez sesini belirtin ve sesi almak için olay için Synthesizing
bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.
Önemli
Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin VoiceName
hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de"
ile eşlenebilir "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]}");
}
}
El ile sentez
Çeviri metninden Translations
ses sentezlemek için sözlüğü kullanabilirsiniz. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer
örnek oluştururken nesnenin özelliğinin SpeechConfig
istenen sese ayarlanmış olması gerekir SpeechSynthesisVoiceName
.
Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.
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);
}
}
}
Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.
Dil belirleme ile çok dilli çeviri
Birçok senaryoda, hangi giriş dillerini belirtebileceğinizi bilmiyor olabilirsiniz. Dil belirlemeyi kullanarak en fazla 10 olası giriş dili algılayabilir ve otomatik olarak hedef dillerinize çevirebilirsiniz.
Aşağıdaki örnek, içinde tanımlandığı AutoDetectSourceLanguageConfig
için veya zh-CN
algılanması gerektiğini tahmin ederen-US
. Daha sonra konuşma, öğesine yapılan çağrılarda belirtildiği gibi ve fr
öğesine çevrilir.AddTargetLanguage()
de
speechTranslationConfig.AddTargetLanguage("de");
speechTranslationConfig.AddTargetLanguage("fr");
var autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.FromLanguages(new string[] { "en-US", "zh-CN" });
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Eksiksiz bir kod örneği için bkz . dil belirleme.
Kaynak dil adayları olmadan çok dilli konuşma çevirisi
Çok dilli konuşma çevirisi, belirtilen giriş dili olmaması ve aynı oturumda dil anahtarlarını işleme gibi çeşitli özelliklerin kilidini açan yeni bir konuşma çevirisi teknolojisi düzeyi uygular. Bu özellikler, ürünlerinize uygulanabilecek yeni bir konuşma çevirisi gücü düzeyi sağlar.
Şu anda konuşma çevirisi ile Dil Kimliği'ni kullandığınızda, nesneyi v2 uç noktasından oluşturmanız SpeechTranslationConfig
gerekir. "YourServiceRegion" dizesini Konuşma kaynak bölgenizle ("westus" gibi) değiştirin. "YourSubscriptionKey" yerine Konuşma kaynak anahtarınızı yazın.
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");
Çeviri hedef dillerini belirtin. değerini, seçtiğiniz dillerle değiştirin. Daha fazla satır ekleyebilirsiniz.
config.AddTargetLanguage("de");
config.AddTargetLanguage("fr");
Çok dilli konuşma çevirisi ile önemli bir fark, kaynak dili belirtmeniz gerekmemesidir. Bunun nedeni hizmetin kaynak dili otomatik olarak algılamasıdır. AutoDetectSourceLanguageConfig
Belirtilen kaynak dil olmadan çok dilli konuşma çevirisi kullanmak istediğinizi hizmete bildirmek için yöntemini kullanarak fromOpenRange
nesnesini oluşturun.
AutoDetectSourceLanguageConfig autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig.fromOpenRange();
var translationRecognizer = new TranslationRecognizer(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Konuşma SDK'sı ile eksiksiz bir kod örneği için bkz . GitHub'da konuşma çevirisi örnekleri.
Konuşma çevirisinde özel çeviri kullanma
Konuşma çevirisindeki özel çeviri özelliği, Azure Özel Çeviri hizmetiyle sorunsuz bir şekilde tümleştirildiğinden daha doğru ve uyarlanmış çeviriler elde edebilirsiniz. Tümleştirme, Azure özel çeviri hizmetinin özelliklerinden doğrudan yararlandığından, tüm özellikler kümesinin doğru şekilde çalıştığından emin olmak için çok hizmetli bir kaynak kullanmanız gerekir. Ayrıntılı yönergeler için lütfen Azure AI hizmetleri için çok hizmetli kaynak oluşturma kılavuzuna bakın.
Ayrıca, özel bir çeviricinin çevrimdışı eğitimi ve "Kategori Kimliği" elde etmek için hızlı başlangıç: Özel model oluşturma, dağıtma ve kullanma - Özel Çeviri'de sağlanan adım adım betiği inceleyin.
// 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");
….
}
Başvuru belgeleri | Paketi (NuGet) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.
Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Konuşma çevirisine doğrudan konuşma gerçekleştirme
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, Konuşma kaynağının anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. C++ kod dosyası, konak makinenin ortam değişkenlerinden atanan iki dize değeri içerir: SPEECH__SUBSCRIPTION__KEY
ve SPEECH__SERVICE__REGION
. Bu alanların her ikisi de sınıf kapsamında olduğundan, sınıfın yöntem gövdeleri içinde erişilebilir:
auto SPEECH__SUBSCRIPTION__KEY = getenv("SPEECH__SUBSCRIPTION__KEY");
auto SPEECH__SERVICE__REGION = getenv("SPEECH__SERVICE__REGION");
Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
İpucu
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Birkaç yolla başlatabilirsiniz SpeechTranslationConfig
:
- Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig
bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.
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;
}
Kaynak dili değiştirme
Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda yöntemini çağırarak örnekle SpeechTranslationConfig
etkileşime geçin SetSpeechRecognitionLanguage
.
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
}
SpeechRecognitionLanguage
özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.
Çeviri dili ekleme
Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:
void translateSpeech() {
auto speechTranslationConfig =
SpeechTranslationConfig::FromSubscription(SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
speechTranslationConfig->SetSpeechRecognitionLanguage("it-IT");
speechTranslationConfig->AddTargetLanguage("fr");
speechTranslationConfig->AddTargetLanguage("de");
}
için yapılan her çağrıda AddTargetLanguage
yeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.
Çeviri tanıyıcıyı başlatma
Bir SpeechTranslationConfig
örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer
. uygulamasını başlatırken TranslationRecognizer
örneğinizi geçirmeniz translationConfig
gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Konuşmaları cihazınızın varsayılan mikrofonuyla TranslationRecognizer
tanıyorsanız şu şekilde görünmelidir:
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);
}
Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig
sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizer
parametresini audioConfig
sağlamanız gerekir.
İpucu
Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.
İlk olarak, nesnesine AudioConfig
aşağıdaki gibi başvurun:
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);
}
Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig
parametre sağlamanız gerekir. Ancak, bir AudioConfig
sınıf örneği oluşturduğunuzda çağırmak FromDefaultMicrophoneInput
yerine öğesini çağırıp FromWavFileInput
parametresini filename
geçirirsiniz:
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);
}
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-once işlevini çağırın ve sonucu alın:
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;
}
}
}
Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.
Çevirileri sentezle
Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. Translations
Sözlük anahtarı hedef çeviri dili, değer ise çevrilmiş metindir. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.
Olay tabanlı sentez
TranslationRecognizer
nesnesi bir Synthesizing
olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.
Bir SetVoiceName
örnek atayarak sentez sesini belirtin ve sesi almak için olay için Synthesizing
bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.
Önemli
Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin SetVoiceName
hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de"
ile eşlenebilir "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;
}
}
}
El ile sentez
Çeviri metninden Translations
ses sentezlemek için sözlüğü kullanabilirsiniz. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer
örnek oluştururken nesnenin özelliğinin SpeechConfig
istenen sese ayarlanmış olması gerekir SetSpeechSynthesisVoiceName
.
Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.
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();
}
}
}
Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.
Dil belirleme ile çok dilli çeviri
Birçok senaryoda, hangi giriş dillerini belirtebileceğinizi bilmiyor olabilirsiniz. Dil belirlemeyi kullanarak en fazla 10 olası giriş dili algılayabilir ve otomatik olarak hedef dillerinize çevirebilirsiniz.
Aşağıdaki örnek, içinde tanımlandığı AutoDetectSourceLanguageConfig
için veya zh-CN
algılanması gerektiğini tahmin ederen-US
. Daha sonra konuşma, öğesine yapılan çağrılarda belirtildiği gibi ve fr
öğesine çevrilir.de
AddTargetLanguage()
speechTranslationConfig->AddTargetLanguage("de");
speechTranslationConfig->AddTargetLanguage("fr");
auto autoDetectSourceLanguageConfig = AutoDetectSourceLanguageConfig::FromLanguages({ "en-US", "zh-CN" });
auto translationRecognizer = TranslationRecognizer::FromConfig(speechTranslationConfig, autoDetectSourceLanguageConfig, audioConfig);
Eksiksiz bir kod örneği için bkz . dil belirleme.
Başvuru belgeleri | Paketi (Go) | GitHub'da ek örnekler
Go için Konuşma SDK'sı konuşma çevirisini desteklemez. Lütfen bu makalenin başından itibaren başka bir programlama dili veya Go başvurusu ve bağlantılı örnekler seçin.
Başvuru belgeleri | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.
Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Konuşma çevirisine doğrudan konuşma gerçekleştirme
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, Konuşma kaynağının anahtarı ve bölgesi gibi hassas verileri depolamak için ortam değişkenlerine bağlıdır. Java kod dosyası, konak makinenin ortam değişkenlerinden atanan iki static final String
değer içerir: SPEECH__SUBSCRIPTION__KEY
ve SPEECH__SERVICE__REGION
. Bu alanların her ikisi de sınıf kapsamında olduğundan, sınıfın yöntem gövdeleri içinde erişilebilir:
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) { }
}
Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
İpucu
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Örneği SpeechTranslationConfig
birkaç yolla başlatabilirsiniz:
- Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig
bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.
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);
}
}
Kaynak dili değiştirme
Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda yöntemini çağırarak örnekle SpeechTranslationConfig
etkileşim kurun setSpeechRecognitionLanguage
:
static void translateSpeech() {
SpeechTranslationConfig speechTranslationConfig = SpeechTranslationConfig.fromSubscription(
SPEECH__SUBSCRIPTION__KEY, SPEECH__SERVICE__REGION);
// Source (input) language
speechTranslationConfig.setSpeechRecognitionLanguage("it-IT");
}
setSpeechRecognitionLanguage
işlevi bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.
Çeviri dili ekleme
Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri olarak ayarlar:
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");
}
için yapılan her çağrıda addTargetLanguage
yeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.
Çeviri tanıyıcıyı başlatma
Bir SpeechTranslationConfig
örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer
. uygulamasını başlatırken TranslationRecognizer
örneğinizi geçirmeniz speechTranslationConfig
gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Konuşmaları cihazınızın varsayılan mikrofonuyla TranslationRecognizer
tanıyorsanız şu şekilde görünmelidir:
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)) {
}
}
Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig
sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizer
parametresini audioConfig
sağlamanız gerekir.
İpucu
Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.
İlk olarak, nesnesine AudioConfig
aşağıdaki gibi başvurun:
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)) {
}
}
Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig
parametre sağlamanız gerekir. Ancak, bir AudioConfig
sınıf örneği oluşturduğunuzda çağırmak fromDefaultMicrophoneInput
yerine öğesini çağırıp fromWavFileInput
parametresini filename
geçirirsiniz:
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)) {
}
}
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-once işlevini çağırın ve sonucu alın:
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());
}
}
}
}
Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.
Çevirileri sentezle
Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. İşlev, getTranslations
anahtarı hedef çeviri dili ve değeri çevrilmiş metin olarak içeren bir sözlük döndürür. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.
Olay tabanlı sentez
TranslationRecognizer
nesnesi bir synthesizing
olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.
Bir setVoiceName
örnek atayarak sentez sesini belirtin ve sesi almak için olay için synthesizing
bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.
Önemli
Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin setVoiceName
hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de"
ile eşlenebilir "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);
}
}
}
}
El ile sentez
İşlev, getTranslations
çeviri metninden ses sentezlemek için kullanabileceğiniz bir sözlük döndürür. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer
örnek oluştururken nesnenin özelliğinin SpeechConfig
istenen sese ayarlanmış olması gerekir setSpeechSynthesisVoiceName
.
Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.
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();
}
}
}
}
}
Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.
Başvuru belgeleri | Paketi (npm) | GitHub | Kitaplığı kaynak kodundaki ek örnekler
Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.
Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Konuşma çevirisine doğrudan konuşma gerçekleştirme
Çeviri yapılandırması oluşturma
Konuşma SDK'sını kullanarak çeviri hizmetini çağırmak için bir SpeechTranslationConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
Not
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Birkaç yolla başlatabilirsiniz SpeechTranslationConfig
:
- Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Şimdi bir anahtar ve bölge kullanarak örneği nasıl oluşturduğunuza SpeechTranslationConfig
bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini alın.
const speechTranslationConfig = SpeechTranslationConfig.fromSubscription("YourSubscriptionKey", "YourServiceRegion");
Çeviriyi başlatma
Bir SpeechTranslationConfig
örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer
. uygulamasını başlatırken TranslationRecognizer
örneğinizi geçirmeniz speechTranslationConfig
gerekir. Yapılandırma nesnesi, çeviri hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Cihazınızın varsayılan mikrofonu aracılığıyla sağlanan konuşmayı çeviriyorsanız şu TranslationRecognizer
şekilde görünmelidir:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig
sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizer
parametresini audioConfig
sağlamanız gerekir.
İpucu
Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.
Nesneye AudioConfig
aşağıdaki gibi başvurun:
const audioConfig = AudioConfig.fromDefaultMicrophoneInput();
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig
parametre sağlamanız gerekir. Ancak, bunu yalnızca Node.js hedeflediğinizde yapabilirsiniz. Bir AudioConfig
sınıf örneği oluşturduğunuzda, çağırmak fromDefaultMicrophoneInput
yerine öğesini çağırıp fromWavFileOutput
parametresini filename
geçirirsiniz:
const audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig, audioConfig);
Konuşmayı çevirme
JavaScript için Konuşma SDK'sının TranslationRecognizer sınıfı , konuşma çevirisi için kullanabileceğiniz yöntemleri kullanıma sunar:
- Tek seferlik çeviri (zaman uyumsuz): Çeviriyi engelleyici olmayan (zaman uyumsuz) modda gerçekleştirir. Tek bir konuşmayı çevirir. Tek bir konuşmanın sonunu, en fazla 15 saniye ses işlenene kadar veya sonundaki sessizliği dinleyerek belirler.
- Sürekli çeviri (zaman uyumsuz):Zaman uyumsuz olarak sürekli çeviri işlemi başlatır. Kullanıcı olaylara kaydolup çeşitli uygulama durumlarını işler. Zaman uyumsuz sürekli çeviriyi durdurmak için çağrısında bulunur
stopContinuousRecognitionAsync
.
Konuşma tanıma modunu seçme hakkında daha fazla bilgi edinmek için bkz . Konuşmayı metne dönüştürmeye başlama.
Hedef dil belirtme
Çevirmek için hem kaynak dili hem de en az bir hedef dil belirtmeniz gerekir.
Konuşma çevirisi tablosunda listelenen bir yerel ayarı kullanarak kaynak dil seçebilirsiniz. Çevrilmiş dil seçeneklerinizi aynı bağlantıda bulabilirsiniz.
Hedef diller için seçenekleriniz, metni görüntülemek veya sentezlenmiş çevrilmiş konuşmayı duymak istediğinizde farklılık gösterir. İngilizceden Almancaya çevirmek için çeviri yapılandırma nesnesini değiştirin:
speechTranslationConfig.speechRecognitionLanguage = "en-US";
speechTranslationConfig.addTargetLanguage("de");
Tek seferlik tanıma
Aşağıda aracılığıyla zaman uyumsuz tek seferlik çeviri örneği verilmiştir recognizeOnceAsync
:
translationRecognizer.recognizeOnceAsync(result => {
// Interact with result
});
Sonucu işlemek için kod yazmanız gerekir. Bu örnek, result.reason
Almancaya çeviriyi değerlendirir:
translationRecognizer.recognizeOnceAsync(
function (result) {
let translation = result.translations.get("de");
window.console.log(translation);
translationRecognizer.close();
},
function (err) {
window.console.log(err);
translationRecognizer.close();
});
Kodunuz, çeviri işlenirken sağlanan güncelleştirmeleri de işleyebilir. Çeviri ilerleme durumu hakkında görsel geri bildirim sağlamak için bu güncelleştirmeleri kullanabilirsiniz. Bu JavaScript Node.js örneği bu tür güncelleştirmeleri gösterir. Aşağıdaki kod, çeviri işlemi sırasında oluşturulan ayrıntıları da görüntüler:
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);
};
Sürekli çeviri
Sürekli çeviri, tek seferlik tanımadan biraz daha önemlidir. Tanıma sonuçlarını almak için recognizing
, recognized
ve canceled
olaylarına abone olmanız gerekir. Çeviriyi durdurmak için öğesini çağırmanız stopContinuousRecognitionAsync
gerekir.
Aşağıda, bir ses giriş dosyasında sürekli çevirinin nasıl gerçekleştirildiğini gösteren bir örnek verilmiştir. Giriş tanımlayıp başlatarak TranslationRecognizer
başlayalım:
const translationRecognizer = new TranslationRecognizer(speechTranslationConfig);
Aşağıdaki kodda, öğesinden TranslationRecognizer
gönderilen olaylara abone olacaksınız:
recognizing
: Ara çeviri sonuçları içeren olaylar için sinyal.recognized
: Son çeviri sonuçlarını içeren olaylar için sinyal. Bu sonuçlar başarılı bir çeviri girişimi olduğunu gösterir.sessionStopped
: Çeviri oturumunun (işlem) sonunu gösteren olaylar için sinyal.canceled
: İptal edilen çeviri sonuçlarını içeren olaylar için sinyal. Bu olaylar, doğrudan iptal sonucu iptal edilen bir çeviri girişimini gösterir. Alternatif olarak, bir aktarım veya protokol hatası olduğunu gösterirler.
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();
};
Her şey ayarlandıysa öğesini çağırabilirsiniz startContinuousRecognitionAsync
:
// Starts continuous recognition. Uses stopContinuousRecognitionAsync() to stop recognition.
translationRecognizer.startContinuousRecognitionAsync();
// Something later can call. Stops recognition.
// translationRecognizer.StopContinuousRecognitionAsync();
Kaynak dil seçin
Konuşma çevirisi için sık kullanılan bir görev, giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda örneğinizi SpeechTranslationConfig
bulun ve hemen altına aşağıdaki satırı ekleyin:
speechTranslationConfig.speechRecognitionLanguage = "it-IT";
speechRecognitionLanguage
özelliği bir dil-yerel ayar biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.
Bir veya daha fazla hedef dil seçme
Konuşma SDK'sı birden çok hedef dile paralel olarak çevrilebilir. Kullanılabilir hedef diller, kaynak dil listesinden biraz farklıdır. Hedef dilleri yerel ayar yerine bir dil kodu kullanarak belirtirsiniz.
Metin hedeflerinin dil kodlarının listesi için dil destek sayfasındaki konuşma çevirisi tablosuna bakın. Sentezlenmiş dillerin çevirisi hakkındaki ayrıntıları da burada bulabilirsiniz.
Aşağıdaki kod, hedef dil olarak Almanca ekler:
speechTranslationConfig.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:
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
};
Başvuru belgeleri | Paketi (indirme) | GitHub'da ek örnekler
Objective-C için Konuşma SDK'sı konuşma çevirisini destekler, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin veya bu makalenin başındaki Objective-C başvurusuna ve bağlantılı örneklere bakın.
Başvuru belgeleri | Paketi (indirme) | GitHub'da ek örnekler
Swift için Konuşma SDK'sı konuşma çevirisini destekler, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin veya bu makalenin başından itibaren bağlantılı Swift başvurusuna ve örneklerine bakın.
Başvuru belgeleri | Paketi (PyPi) | GitHub'da ek örnekler
Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.
Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Konuşma çevirisine doğrudan konuşma gerçekleştirme
Hassas veriler ve ortam değişkenleri
Bu makaledeki örnek kaynak kodu, Konuşma kaynağının abonelik anahtarı ve bölgesi gibi hassas verileri depolamaya yönelik ortam değişkenlerine bağlıdır. Python kod dosyası, konak makinenin ortam değişkenlerinden atanan iki değer içerir: SPEECH__SUBSCRIPTION__KEY
ve SPEECH__SERVICE__REGION
. Bu değişkenlerin her ikisi de genel kapsamda olduğundan kod dosyasının işlev tanımından erişilebilir:
speech_key, service_region = os.environ['SPEECH__SUBSCRIPTION__KEY'], os.environ['SPEECH__SERVICE__REGION']
Ortam değişkenleri hakkında daha fazla bilgi için bkz . Ortam değişkenleri ve uygulama yapılandırması.
Önemli
API anahtarı kullanıyorsanız, bunu Azure Key Vault gibi başka bir yerde güvenli bir şekilde depolayın. API anahtarını doğrudan kodunuzla eklemeyin ve hiçbir zaman herkese açık olarak göndermeyin.
Yapay zeka hizmetleri güvenliği hakkında daha fazla bilgi için bkz . Azure AI hizmetlerine yönelik isteklerin kimliğini doğrulama.
Konuşma çevirisi yapılandırması oluşturma
Konuşma SDK'sını kullanarak Konuşma hizmetini çağırmak için bir SpeechTranslationConfig
örnek oluşturmanız gerekir. Bu sınıf, anahtarınız ve ilişkili bölgeniz, uç noktanız, konağınız veya yetkilendirme belirteciniz gibi aboneliğinizle ilgili bilgileri içerir.
İpucu
Konuşma tanıma, konuşma sentezi, çeviri veya amaç tanıma gerçekleştirmenize bakılmaksızın, her zaman bir yapılandırma oluşturursunuz.
Birkaç yolla başlatabilirsiniz SpeechTranslationConfig
:
- Abonelikle: anahtarı ve ilişkili bölgeyi geçirin.
- Uç nokta ile: Konuşma hizmeti uç noktasını geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Bir konak ile: bir konak adresi geçirin. Anahtar veya yetkilendirme belirteci isteğe bağlıdır.
- Yetkilendirme belirteci ile: Yetkilendirme belirtecini ve ilişkili bölgeyi geçirin.
Şimdi bir anahtar ve bölge kullanarak nasıl örnek oluşturabileceğinize SpeechTranslationConfig
bakalım. Azure portalında Konuşma kaynak anahtarını ve bölgesini 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 dili değiştirme
Konuşma çevirisinin yaygın görevlerinden biri giriş (veya kaynak) dilini belirtmektir. Aşağıdaki örnekte giriş dilini İtalyanca olarak nasıl değiştirdiğiniz gösterilmektedir. Kodunuzda, özelliğine SpeechTranslationConfig
atayarak örnekle etkileşim kurun 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 biçim dizesi bekler. Desteklenen konuşma çevirisi yerel ayarları listesine bakın.
Çeviri dili ekleme
Konuşma çevirisinin bir diğer yaygın görevi de hedef çeviri dillerini belirtmektir. En az bir tane gereklidir, ancak katlar desteklenir. Aşağıdaki kod parçacığı hem Fransızca hem de Almancayı çeviri dili hedefleri 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")
için yapılan her çağrıda add_target_language
yeni bir hedef çeviri dili belirtilir. Başka bir deyişle, konuşma kaynak dilden tanındığında, sonuçta elde edilen çeviri işleminin bir parçası olarak her hedef çeviri kullanılabilir.
Çeviri tanıyıcıyı başlatma
Bir SpeechTranslationConfig
örnek oluşturduktan sonra, sonraki adım başlatmaktır TranslationRecognizer
. uygulamasını başlatırken TranslationRecognizer
örneğinizi geçirmeniz translation_config
gerekir. Yapılandırma nesnesi, Konuşma hizmetinin isteğinizi doğrulamak için gerektirdiği kimlik bilgilerini sağlar.
Konuşmaları cihazınızın varsayılan mikrofonuyla TranslationRecognizer
tanıyorsanız şu şekilde 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)
translation_recognizer = speechsdk.translation.TranslationRecognizer(
translation_config=translation_config)
Ses giriş cihazını belirtmek istiyorsanız, bir AudioConfig
sınıf örneği oluşturmanız ve başlatılırken TranslationRecognizer
parametresini audio_config
sağlamanız gerekir.
İpucu
Ses giriş cihazınızın cihaz kimliğini nasıl alacağınızı öğrenin.
İlk olarak, nesnesine AudioConfig
aşağıdaki gibi başvurun:
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)
Mikrofon kullanmak yerine ses dosyası sağlamak istiyorsanız yine de bir audioConfig
parametre sağlamanız gerekir. Ancak, ile çağırmak yerine bir AudioConfig
sınıf örneği oluşturduğunuzda ile filename="path-to-file.wav"
öğesini çağırır ve parametresini filename
sağlarsınız:use_default_microphone=True
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)
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-once 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)
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()
Konuşmayı metne dönüştürme hakkında daha fazla bilgi için bkz . Konuşma tanımanın temelleri.
Çevirileri sentezle
Başarılı bir konuşma tanıma ve konuşma çevirisinin ardından, sonuç bir sözlükteki tüm çevirileri içerir. translations
Sözlük anahtarı hedef çeviri dili, değer ise çevrilmiş metindir. Tanınan konuşma çevrilebilir ve daha sonra farklı bir dilde (konuşmadan konuşmaya) sentezlenebilir.
Olay tabanlı sentez
TranslationRecognizer
nesnesi bir Synthesizing
olayı kullanıma sunar. Olay birkaç kez tetikler ve çeviri tanıma sonucundan sentezlenmiş sesi almak için bir mekanizma sağlar. Birden çok dile çevriliyorsanız bkz . El ile sentezleme.
Bir voice_name
örnek atayarak sentez sesini belirtin ve sesi almak için olay için Synthesizing
bir olay işleyicisi sağlayın. Aşağıdaki örnek çevrilmiş sesi .wav dosyası olarak kaydeder.
Önemli
Olay tabanlı sentez yalnızca tek bir çeviriyle çalışır. Birden çok hedef çeviri dili eklemeyin. Ayrıca, değerin voice_name
hedef çeviri diliyle aynı dil olması gerekir. Örneğin, "de"
ile eşlenebilir "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()
El ile sentez
Çeviri metninden translations
ses sentezlemek için sözlüğü kullanabilirsiniz. Her çeviriyi yineleyip sentezler. Bir SpeechSynthesizer
örnek oluştururken nesnenin özelliğinin SpeechConfig
istenen sese ayarlanmış olması gerekir speech_synthesis_voice_name
.
Aşağıdaki örnek beş dile çevrilir. Her çeviri daha sonra ilgili sinir dilinde bir ses dosyasına sentezlenmiş olur.
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()
Konuşma sentezi hakkında daha fazla bilgi için bkz . Konuşma sentezinin temelleri.
Dil belirleme ile çok dilli çeviri
Birçok senaryoda, hangi giriş dillerini belirtebileceğinizi bilmiyor olabilirsiniz. Dil belirlemeyi kullanarak en fazla 10 olası giriş dili algılayabilir ve otomatik olarak hedef dillerinize çevirebilirsiniz.
Eksiksiz bir kod örneği için bkz . dil belirleme.
Metne konuşma REST API başvurusu | Kısa ses başvurusu için metin REST API'sine konuşma | GitHub'da ek örnekler
Konuşma çevirisi için REST API'yi kullanabilirsiniz, ancak buraya henüz bir kılavuz eklemedik. Başlamak ve kavramlar hakkında bilgi edinmek için lütfen başka bir programlama dili seçin.
Bu nasıl yapılır kılavuzunda insan konuşmasını tanımayı ve başka bir dile çevirmeyi öğreneceksiniz.
Aşağıdakiler hakkında daha fazla bilgi için konuşma çevirisine genel bakış bölümüne bakın:
- Konuşmayı metne çevirme
- Konuşmayı birden çok hedef dile çevirme
- Konuşma çevirisine doğrudan konuşma gerçekleştirme
Önkoşullar
- Azure aboneliği. Ücretsiz bir tane oluşturabilirsiniz.
- Azure portalında konuşma kaynağı oluşturun.
- Konuşma kaynak anahtarını ve bölgesini alın. Konuşma kaynağınız dağıtıldıktan sonra anahtarları görüntülemek ve yönetmek için Kaynağa git'i seçin.
İndirme ve kurma
Bu adımları izleyin ve platformunuzun diğer gereksinimleri için Konuşma CLI'sı hızlı başlangıcına bakın.
Konuşma CLI'sını yüklemek için aşağıdaki .NET CLI komutunu çalıştırın:
dotnet tool install --global Microsoft.CognitiveServices.Speech.CLI
Konuşma kaynak anahtarınızı ve bölgenizi yapılandırmak için aşağıdaki komutları çalıştırın. değerini
SUBSCRIPTION-KEY
Konuşma kaynak anahtarınızla, değerini de Konuşma kaynağı bölgenizle değiştirinREGION
.spx config @key --set SUBSCRIPTION-KEY spx config @region --set REGION
Kaynak ve hedef dilleri ayarlama
Bu komut, konuşmayı mikrofondan İtalyancadan Fransızcaya çevirmek için Konuşma CLI'sini çağırır:
spx translate --microphone --source it-IT --target fr