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:

  1. 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.

  2. .NET Core 3.1 SDK'sı yükleyin.

  3. Ş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