Konuşmayı metne dönüştürme ile çalışmaya başlama

Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı tanıyabilme ve (genellikle konuşma-metin olarak adlandırılır). Bu hızlı başlangıçta, uygulama ve ürünlerinize yönelik konuşma SDK 'sını kullanarak yüksek kaliteli bir konuşmayı metne dönüştürme işlemini nasıl gerçekleştireceğinizi öğreneceksiniz.

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

yalnızca paket adının başlatılmasını istiyorsanız Install-Package Microsoft.CognitiveServices.Speech NuGet konsolunda çalıştırın.

Platforma özgü yükleme yönergeleri için aşağıdaki bağlantılara bakın:

Konuşma yapılandırması oluşturma

Konuşma SDK 'sını kullanarak konuşma hizmetini çağırmak için bir oluşturmanız gerekir SpeechConfig . Bu sınıf, sizin anahtarınız, anahtar ve ilişkili konum/bölge, uç nokta, ana bilgisayar veya yetkilendirme belirteciniz gibi bilgileri içerir. SpeechConfigAnahtarınızı ve konumunuzu/bölgenizi kullanarak oluşturun. Anahtar konumu/bölge çiftini bulmak için anahtarları ve konum/bölge bulma sayfasına bakın.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
    }
}

Şunları başlatabilmeniz için birkaç farklı yol vardır SpeechConfig :

  • 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/konumu geçirin.

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.

Mikrofondan tanı

Cihaz mikrofonunuzu kullanarak konuşmayı tanımak için bir AudioConfig kullanarak oluşturun FromDefaultMicrophoneInput() . Ardından, ve ' yi geçirerek bir başlatın SpeechRecognizer audioConfig speechConfig .

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromMic(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromDefaultMicrophoneInput();
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        Console.WriteLine("Speak into your microphone.");
        var result = await recognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
        await FromMic(speechConfig);
    }
}

Belirli bir ses giriş cihazını kullanmak istiyorsanız, IÇINDE cihaz kimliği belirtmeniz gerekir AudioConfig . Ses giriş cihazınız için CIHAZ kimliğini nasıl alabileceğinizi öğrenin.

Dosyadan tanı

Konuşmayı bir mikrofon yerine bir ses dosyasından tanımak istiyorsanız, yine de oluşturmanız gerekir AudioConfig . Ancak, AudioConfig öğesini çağırmak yerine, FromDefaultMicrophoneInput() FromWavFileInput() dosya yolunu çağırır ve geçitirsiniz.

using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromFile(SpeechConfig speechConfig)
    {
        using var audioConfig = AudioConfig.FromWavFileInput("PathToFile.wav");
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        var result = await recognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
        await FromFile(speechConfig);
    }
}

Bellek içi akıştan tanıma

Birçok kullanım durumu için, ses verilerinizin blob depolamadan geldiği veya başka bir durumda byte[] veya benzer bir ham veri yapısı olarak bellek içi olması olasıdır. Aşağıdaki örnek, temel olarak PushAudioInputStream soyut bir bellek akışı olan konuşmayı tanımak için bir kullanır. Örnek kod şunları yapar:

  • PushAudioInputStream' I kabul eden işlevini kullanarak ham ses verilerini (PCM) yazar Write() byte[] .
  • .wavTanıtım amacıyla bir dosyayı okur FileReader , ancak zaten bir içinde ses verilerinize sahipseniz byte[] , içeriği giriş akışına yazmak için doğrudan atlayabilirsiniz.
  • Varsayılan biçim 16 bittir, 16khz mono PCM 'dir. Biçimi özelleştirmek için, AudioStreamFormat CreatePushStream() statik işlevi kullanarak bir nesnesini geçirebilirsiniz AudioStreamFormat.GetWaveFormatPCM(sampleRate, (byte)bitRate, (byte)channels) .
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;

class Program 
{
    async static Task FromStream(SpeechConfig speechConfig)
    {
        var reader = new BinaryReader(File.OpenRead("PathToFile.wav"));
        using var audioInputStream = AudioInputStream.CreatePushStream();
        using var audioConfig = AudioConfig.FromStreamInput(audioInputStream);
        using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        byte[] readBytes;
        do
        {
            readBytes = reader.ReadBytes(1024);
            audioInputStream.Write(readBytes, readBytes.Length);
        } while (readBytes.Length > 0);

        var result = await recognizer.RecognizeOnceAsync();
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
    }

    async static Task Main(string[] args)
    {
        var speechConfig = SpeechConfig.FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");
        await FromStream(speechConfig);
    }
}

Giriş olarak bir gönderim akışı kullanmak, ses verilerinin ham PCM olduğunu varsayar, ör. herhangi bir üst bilgi atlanıyor. Üst bilgi atlanmadığında, API bazı durumlarda çalışmaya devam eder, ancak en iyi sonuçlar için, byte[] ses verilerinin başlangıcında başlayacak şekilde üstbilgileri okumak için mantığı uygulamayı düşünün.

Hata işleme

Önceki örneklerde, ' den tanınan metin alınır result.text , ancak hataları ve diğer yanıtları işlemek için, sonucu işlemek üzere bazı kodlar yazmanız gerekir. Aşağıdaki kod, özelliğini değerlendirir result.Reason ve:

  • Tanınma sonucunu yazdırır: ResultReason.RecognizedSpeech
  • Bir tanıma eşleşmesi yoksa, kullanıcıyı bilgilendirin: ResultReason.NoMatch
  • Bir hata ile karşılaşırsanız, hata iletisini yazdırın: ResultReason.Canceled
switch (result.Reason)
{
    case ResultReason.RecognizedSpeech:
        Console.WriteLine($"RECOGNIZED: Text={result.Text}");
        break;
    case ResultReason.NoMatch:
        Console.WriteLine($"NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled:
        var cancellation = CancellationDetails.FromResult(result);
        Console.WriteLine($"CANCELED: Reason={cancellation.Reason}");

        if (cancellation.Reason == CancellationReason.Error)
        {
            Console.WriteLine($"CANCELED: ErrorCode={cancellation.ErrorCode}");
            Console.WriteLine($"CANCELED: ErrorDetails={cancellation.ErrorDetails}");
            Console.WriteLine($"CANCELED: Did you update the speech key and location/region info?");
        }
        break;
}

Sürekli tanıma

Önceki örneklerde, tek bir utterance tanıyan, başlatma öncesi tanıma kullanılır. Tek bir utterüance 'in sonunda, sonda sessizlik dinlemesi veya en fazla 15 saniyelik ses işlenene kadar belirlenir.

Bunun aksine, sürekli tanıma, tanımanın ne zaman durdurulacağını denetlemek istediğinizde kullanılır. Recognizing Recognized Tanıma sonuçlarını almak için,, ve olaylarına abone olmanızı gerektirir Canceled . Tanımayı durdurmak için çağrısı yapmanız gerekir StopContinuousRecognitionAsync . İşte, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştirilebileceğini gösteren bir örnek.

Girişi tanımlayarak ve şunu başlatarak başlayın SpeechRecognizer :

using var audioConfig = AudioConfig.FromWavFileInput("YourAudioFile.wav");
using var recognizer = new SpeechRecognizer(speechConfig, audioConfig);

Ardından TaskCompletionSource<int> konuşma tanımanın durumunu yönetmek için oluşturun.

var stopRecognition = new TaskCompletionSource<int>();

Sonra, öğesinden gönderilen olaylara abone olun SpeechRecognizer .

  • Recognizing: Ara tanıma sonuçları içeren olaylar için sinyal.
  • Recognized: Son tanıma sonuçlarını içeren olaylar için sinyal (başarılı bir tanıma denemesi olduğunu gösterir).
  • SessionStopped: Bir tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.
  • Canceled: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal (sonuç veya doğrudan iptal isteği olarak iptal edilen bir tanıma girişimi veya ya da bir aktarım ya da protokol arızası).
recognizer.Recognizing += (s, e) =>
{
    Console.WriteLine($"RECOGNIZING: Text={e.Result.Text}");
};

recognizer.Recognized += (s, e) =>
{
    if (e.Result.Reason == ResultReason.RecognizedSpeech)
    {
        Console.WriteLine($"RECOGNIZED: Text={e.Result.Text}");
    }
    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 speech key and location/region info?");
    }

    stopRecognition.TrySetResult(0);
};

recognizer.SessionStopped += (s, e) =>
{
    Console.WriteLine("\n    Session stopped event.");
    stopRecognition.TrySetResult(0);
};

Her şey ayarlandığında, tanımayı Başlat ' ı çağırın StartContinuousRecognitionAsync .

await recognizer.StartContinuousRecognitionAsync();

// Waits for completion. Use Task.WaitAny to keep the task rooted.
Task.WaitAny(new[] { stopRecognition.Task });

// make the following call at some point to stop recognition.
// await recognizer.StopContinuousRecognitionAsync();

Dikte etme modu

Sürekli tanıma kullanırken, ilgili "dikte etmeyi etkinleştir" işlevini kullanarak dikte işlemini etkinleştirebilirsiniz. Bu mod, konuşma yapılandırma örneğinin noktalama gibi tümce yapılarının sözcük açıklamalarını yorumlamasını sağlar. Örneğin, "kasadaki gerçek zamanlı olarak", "kasadaki canlı mısınız?" metni olarak yorumlanabilir.

Dikte modunu etkinleştirmek için, içindeki EnableDictation yöntemi kullanın SpeechConfig .

speechConfig.EnableDictation();

Kaynak dilini değiştir

Konuşma tanıma 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, SpeechConfig daha sonra bu satırı hemen altına ekleyin.

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

Tanıma doğruluğunu geliştirme

Tümcecik listeleri, bir kişinin adı veya belirli bir konum gibi, ses verilerinde bilinen tümcecikleri belirlemek için kullanılır. Deyimlerin bir listesini sağlayarak konuşma tanımanın doğruluğunu geliştirerek.

Örnek olarak, "taşı" komutuna ve söylenen "Ward" bir hedefe sahipseniz, "Ward 'e taşı" girişini ekleyebilirsiniz. Bir tümcecik eklemek, ses "ilerlemek için taşı" yerine "ilerlemek" yerine tanınabilmesi olasılığını artırır.

Tek sözcükler veya bütün ifadeler, bir tümcecik listesine eklenebilir. Tanıma sırasında, bir ifade listesindeki bir giriş, girdiler utterance 'in ortasında görünse bile, listedeki sözcüklerin ve deyimlerin tanınmasını artırmak için kullanılır.

Önemli

Tümcecik listesi özelliği şu dillerde sunulmaktadır: en-US, de-DE, en-AU, en-CA, en-GB, en---, en-GB, en-ın, ES-ES, fr-FR, It-IT, ja-JP, PT-BR, zh-CN

Tümcecik listesi özelliği, birkaç yüz tümceciği olmadan kullanılmalıdır. Daha büyük bir listeniz veya şu anda desteklenmeyen diller varsa, özel bir modeli eğitmek doğruluğu artırmak için büyük olasılıkla daha iyi bir seçenek olacaktır.

Tümcecik listesi özelliği özel uç noktalarla desteklenmez. Özel uç noktalarla kullanmayın. Bunun yerine, tümcecikleri içeren özel bir modeli eğitme.

Bir tümcecik listesi kullanmak için, önce bir PhraseListGrammar nesne oluşturun, ardından ile belirli sözcükler ve deyimler ekleyin AddPhrase .

Herhangi bir değişiklik PhraseListGrammar , bir sonraki tanıma göre veya konuşma hizmetine yeniden bağlanmaya sonra devreye girer.

var phraseList = PhraseListGrammar.FromRecognizer(recognizer);
phraseList.AddPhrase("Supercalifragilisticexpialidocious");

Tümcecik listenizi temizlemeniz gerekirse:

phraseList.Clear();

Tanıma doğruluğunu artırmak için diğer seçenekler

Tümcecik listeleri, tanıma doğruluğunu artırmak için yalnızca bir seçenektir. Aşağıdakileri de yapabilirsiniz:

Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı tanıyabilme ve (genellikle konuşma-metin olarak adlandırılır). Bu hızlı başlangıçta, uygulama ve ürünlerinize yönelik konuşma SDK 'sını kullanarak yüksek kaliteli bir konuşmayı metne dönüştürme işlemini nasıl gerçekleştireceğinizi öğreneceksiniz.

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, aşağıdaki yönergeleri kullanın:

Konuşma yapılandırması oluşturma

Konuşma SDK 'sını kullanarak konuşma hizmetini çağırmak için bir oluşturmanız gerekir SpeechConfig . Bu sınıf, sizin anahtarınız, anahtar ve ilişkili konum/bölge, uç nokta, ana bilgisayar veya yetkilendirme belirteciniz gibi bilgileri içerir. SpeechConfigAnahtarınızı ve bölgenizi kullanarak oluşturun. Anahtar konumu/bölge çiftini bulmak için anahtarları ve konum/bölge bulma sayfasına bakın.

using namespace std;
using namespace Microsoft::CognitiveServices::Speech;

auto config = SpeechConfig::FromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

Şunları başlatabilmeniz için birkaç farklı yol vardır SpeechConfig :

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

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.

Mikrofondan tanı

Cihaz mikrofonunuzu kullanarak konuşmayı tanımak için bir AudioConfig kullanarak oluşturun FromDefaultMicrophoneInput() . Ardından, ve ' yi geçirerek bir başlatın SpeechRecognizer audioConfig config .

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioConfig = AudioConfig::FromDefaultMicrophoneInput();
auto recognizer = SpeechRecognizer::FromConfig(config, audioConfig);

cout << "Speak into your microphone." << std::endl;
auto result = recognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Belirli bir ses giriş cihazını kullanmak istiyorsanız, IÇINDE cihaz kimliği belirtmeniz gerekir AudioConfig . Ses giriş cihazınız için CIHAZ kimliğini nasıl alabileceğinizi öğrenin.

Dosyadan tanı

Konuşmayı kullanmak yerine bir ses dosyasından konuşmayı tanımak istiyorsanız, yine de oluşturmanız gerekir AudioConfig . Ancak, AudioConfig öğesini çağırmak yerine, FromDefaultMicrophoneInput() FromWavFileInput() dosya yolunu çağırır ve geçitirsiniz.

using namespace Microsoft::CognitiveServices::Speech::Audio;

auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = SpeechRecognizer::FromConfig(config, audioInput);

auto result = recognizer->RecognizeOnceAsync().get();
cout << "RECOGNIZED: Text=" << result->Text << std::endl;

Konuşma tanıma

C++ için konuşma SDK 'Sı için tanıyıcı sınıfı , konuşma tanıma için kullanabileceğiniz birkaç yöntem sunar.

Noktadan başlayarak tanıma

At-start tanıma, tek bir utterance 'yi zaman uyumsuz olarak tanır. Tek bir utterüance 'in sonunda, sonda sessizlik dinlemesi veya en fazla 15 saniyelik ses işlenene kadar belirlenir. İşte zaman uyumsuz tanıma ile Şu şekilde bir örnek RecognizeOnceAsync :

auto result = recognizer->RecognizeOnceAsync().get();

Sonucu işlemek için bazı kodlar yazmanız gerekir. Bu örnek şunları değerlendirir result->Reason :

  • Tanınma sonucunu yazdırır: ResultReason::RecognizedSpeech
  • Bir tanıma eşleşmesi yoksa, kullanıcıyı bilgilendirin: ResultReason::NoMatch
  • Bir hata ile karşılaşırsanız, hata iletisini yazdırın: ResultReason::Canceled
switch (result->Reason)
{
    case ResultReason::RecognizedSpeech:
        cout << "We recognized: " << result->Text << std::endl;
        break;
    case ResultReason::NoMatch:
        cout << "NOMATCH: Speech could not be recognized." << std::endl;
        break;
    case ResultReason::Canceled:
        {
            auto cancellation = CancellationDetails::FromResult(result);
            cout << "CANCELED: Reason=" << (int)cancellation->Reason << std::endl;
    
            if (cancellation->Reason == CancellationReason::Error) {
                cout << "CANCELED: ErrorCode= " << (int)cancellation->ErrorCode << std::endl;
                cout << "CANCELED: ErrorDetails=" << cancellation->ErrorDetails << std::endl;
                cout << "CANCELED: Did you update the speech key and location/region info?" << std::endl;
            }
        }
        break;
    default:
        break;
}

Sürekli tanıma

Sürekli tanıma, 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 . Tanımayı durdurmak için StopContinuousRecognitionAsyncöğesini çağırmanız gerekir. İşte, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştirilebileceğini gösteren bir örnek.

Girişi tanımlayarak ve şunu başlatarak başlayalım SpeechRecognizer :

auto audioInput = AudioConfig::FromWavFileInput("YourAudioFile.wav");
auto recognizer = SpeechRecognizer::FromConfig(config, audioInput);

Sonra, konuşma tanımanın durumunu yönetmek için bir değişken oluşturalım. Başlamak için, promise<void> tanımanın başlangıcında bitmediğini güvenli bir şekilde varsaydığımız için bir bildirir.

promise<void> recognitionEnd;

Kaynağından gönderilen olaylara abone edeceğiz SpeechRecognizer .

  • Recognizing: Ara tanıma sonuçları içeren olaylar için sinyal.
  • Recognized: Son tanıma sonuçlarını içeren olaylar için sinyal (başarılı bir tanıma denemesi olduğunu gösterir).
  • SessionStopped: Bir tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.
  • Canceled: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal (sonuç veya doğrudan iptal isteği olarak iptal edilen bir tanıma girişimi veya ya da bir aktarım ya da protokol arızası).
recognizer->Recognizing.Connect([](const SpeechRecognitionEventArgs& e)
    {
        cout << "Recognizing:" << e.Result->Text << std::endl;
    });

recognizer->Recognized.Connect([](const SpeechRecognitionEventArgs& e)
    {
        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;
        }
    });

recognizer->Canceled.Connect([&recognitionEnd](const SpeechRecognitionCanceledEventArgs& e)
    {
        cout << "CANCELED: Reason=" << (int)e.Reason << std::endl;
        if (e.Reason == CancellationReason::Error)
        {
            cout << "CANCELED: ErrorCode=" << (int)e.ErrorCode << "\n"
                 << "CANCELED: ErrorDetails=" << e.ErrorDetails << "\n"
                 << "CANCELED: Did you update the speech key and location/region info?" << std::endl;

            recognitionEnd.set_value(); // Notify to stop recognition.
        }
    });

recognizer->SessionStopped.Connect([&recognitionEnd](const SessionEventArgs& e)
    {
        cout << "Session stopped.";
        recognitionEnd.set_value(); // Notify to stop recognition.
    });

Her şey ayarlandığında, çağırabiliriz StopContinuousRecognitionAsync .

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
recognizer->StartContinuousRecognitionAsync().get();

// Waits for recognition end.
recognitionEnd.get_future().get();

// Stops recognition.
recognizer->StopContinuousRecognitionAsync().get();

Dikte etme modu

Sürekli tanıma kullanırken, ilgili "dikte etmeyi etkinleştir" işlevini kullanarak dikte işlemini etkinleştirebilirsiniz. Bu mod, konuşma yapılandırma örneğinin noktalama gibi tümce yapılarının sözcük açıklamalarını yorumlamasını sağlar. Örneğin, "kasadaki gerçek zamanlı olarak", "kasadaki canlı mısınız?" metni olarak yorumlanabilir.

Dikte modunu etkinleştirmek için, içindeki EnableDictation yöntemi kullanın SpeechConfig .

config->EnableDictation();

Kaynak dilini değiştir

Konuşma tanıma için ortak bir görev, giriş (veya kaynak) dilini belirtmektir. Giriş dilini Almanca olarak nasıl değiştirebileceğinizi göz atalım. Kodunuzda, SpeechConfig daha sonra bu satırı hemen altına ekleyin.

config->SetSpeechRecognitionLanguage("de-DE");

SetSpeechRecognitionLanguage bağımsız değişken olarak bir dize alan parametredir. Desteklenen yerel ayarlar/dillerlistesinde herhangi bir değer sağlayabilirsiniz.

Tanıma doğruluğunu geliştirme

Tümcecik listeleri, bir kişinin adı veya belirli bir konum gibi, ses verilerinde bilinen tümcecikleri belirlemek için kullanılır. Deyimlerin bir listesini sağlayarak konuşma tanımanın doğruluğunu geliştirerek.

Örnek olarak, "taşı" komutuna ve söylenen "Ward" bir hedefe sahipseniz, "Ward 'e taşı" girişini ekleyebilirsiniz. Bir tümcecik eklemek, ses "ilerlemek için taşı" yerine "ilerlemek" yerine tanınabilmesi olasılığını artırır.

Tek sözcükler veya bütün ifadeler, bir tümcecik listesine eklenebilir. Tanıma sırasında, bir ifade listesindeki bir giriş, girdiler utterance 'in ortasında görünse bile, listedeki sözcüklerin ve deyimlerin tanınmasını artırmak için kullanılır.

Önemli

Tümcecik listesi özelliği şu dillerde sunulmaktadır: en-US, de-DE, en-AU, en-CA, en-GB, en---, en-GB, en-ın, ES-ES, fr-FR, It-IT, ja-JP, PT-BR, zh-CN

Tümcecik listesi özelliği, birkaç yüz tümceciği olmadan kullanılmalıdır. Daha büyük bir listeniz veya şu anda desteklenmeyen diller varsa, özel bir modeli eğitmek doğruluğu artırmak için büyük olasılıkla daha iyi bir seçenek olacaktır.

Tümcecik listesi özelliği özel uç noktalarla desteklenmez. Özel uç noktalarla kullanmayın. Bunun yerine, tümcecikleri içeren özel bir modeli eğitme.

Bir tümcecik listesi kullanmak için, önce bir PhraseListGrammar nesne oluşturun, ardından ile belirli sözcükler ve deyimler ekleyin AddPhrase .

Herhangi bir değişiklik PhraseListGrammar , bir sonraki tanıma göre veya konuşma hizmetine yeniden bağlanmaya sonra devreye girer.

auto phraseListGrammar = PhraseListGrammar::FromRecognizer(recognizer);
phraseListGrammar->AddPhrase("Supercalifragilisticexpialidocious");

Tümcecik listenizi temizlemeniz gerekirse:

phraseListGrammar->Clear();

Tanıma doğruluğunu artırmak için diğer seçenekler

Tümcecik listeleri, tanıma doğruluğunu artırmak için yalnızca bir seçenektir. Aşağıdakileri de yapabilirsiniz:

Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşmayı tanıyabilme ve tam olarak ifade etmektir (genellikle konuşmayı metne göre ifade etmek olarak adlandırılır). Bu hızlı başlangıçta, yüksek kaliteli konuşmayı metne dönüştürme gerçekleştirmek için uygulamalarınız ve ürünleriniz için Konuşma SDK'sı kullanmayı öğrenirsiniz.

GitHub'da örneklere atla

Doğrudan örnek koda atlamak için bkz. Go hızlı başlangıç örnekleri 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 Go için Konuşma SDK'sı yüklemeniz gerekir.

Mikrofondan konuşmayı metne ayarlama

Varsayılan cihaz mikrofonunuzla konuşma tanımayı çalıştırmak için aşağıdaki kod örneğini kullanın. ve değişkenlerini subscription konuşma region anahtarınız ve konumunuz/bölgeniz ile değiştirin. Anahtar-konum/bölge çiftini bulmak için Anahtarları ve konumu/bölgeyi bulma sayfasına bakın. Betiği çalıştırarak varsayılan mikrofonunuz ve çıkış metniniz üzerinde bir tanıma oturumu başlatabilirsiniz.

package main

import (
    "bufio"
    "fmt"
    "os"

    "github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
    "github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func sessionStartedHandler(event speech.SessionEventArgs) {
    defer event.Close()
    fmt.Println("Session Started (ID=", event.SessionID, ")")
}

func sessionStoppedHandler(event speech.SessionEventArgs) {
    defer event.Close()
    fmt.Println("Session Stopped (ID=", event.SessionID, ")")
}

func recognizingHandler(event speech.SpeechRecognitionEventArgs) {
    defer event.Close()
    fmt.Println("Recognizing:", event.Result.Text)
}

func recognizedHandler(event speech.SpeechRecognitionEventArgs) {
    defer event.Close()
    fmt.Println("Recognized:", event.Result.Text)
}

func cancelledHandler(event speech.SpeechRecognitionCanceledEventArgs) {
    defer event.Close()
    fmt.Println("Received a cancellation: ", event.ErrorDetails)
}

func main() {
    subscription :=  "<paste-your-speech-key-here>"
    region := "<paste-your-speech-location/region-here>"

    audioConfig, err := audio.NewAudioConfigFromDefaultMicrophoneInput()
    if err != nil {
        fmt.Println("Got an error: ", err)
        return
    }
    defer audioConfig.Close()
    config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
    if err != nil {
        fmt.Println("Got an error: ", err)
        return
    }
    defer config.Close()
    speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
    if err != nil {
        fmt.Println("Got an error: ", err)
        return
    }
    defer speechRecognizer.Close()
    speechRecognizer.SessionStarted(sessionStartedHandler)
    speechRecognizer.SessionStopped(sessionStoppedHandler)
    speechRecognizer.Recognizing(recognizingHandler)
    speechRecognizer.Recognized(recognizedHandler)
    speechRecognizer.Canceled(cancelledHandler)
    speechRecognizer.StartContinuousRecognitionAsync()
    defer speechRecognizer.StopContinuousRecognitionAsync()
    bufio.NewReader(os.Stdin).ReadBytes('\n')
}

Aşağıdaki komutları çalıştırarak dosyanın üzerinde barındırılan bileşenlere bağlantı içeren bir go.mod GitHub.

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

Şimdi kodu derleme ve çalıştırma.

go build
go run quickstart

ve sınıfları hakkında ayrıntılı bilgi için başvuru SpeechConfig belgelerine SpeechRecognizer bakın.

Ses dosyasından konuşmayı metne değiştirme

Ses dosyasından konuşma tanımayı çalıştırmak için aşağıdaki örneği kullanın. ve değişkenlerini subscription konuşma region anahtarınız ve konumunuz/bölgeniz ile değiştirin. Anahtar-konum/bölge çiftini bulmak için Anahtarları ve konumu/bölgeyi bulma sayfasına bakın. Ayrıca değişkenlerini file bir .wav dosyasının yoluyla değiştirin. Betiği çalıştırma, dosyadan gelen konuşmayı tanır ve metin sonucu verir.

package main

import (
    "fmt"
    "time"

    "github.com/Microsoft/cognitive-services-speech-sdk-go/audio"
    "github.com/Microsoft/cognitive-services-speech-sdk-go/speech"
)

func main() {
    subscription :=  "<paste-your-speech-key-here>"
    region := "<paste-your-speech-location/region-here>"
    file := "path/to/file.wav"

    audioConfig, err := audio.NewAudioConfigFromWavFileInput(file)
    if err != nil {
        fmt.Println("Got an error: ", err)
        return
    }
    defer audioConfig.Close()
    config, err := speech.NewSpeechConfigFromSubscription(subscription, region)
    if err != nil {
        fmt.Println("Got an error: ", err)
        return
    }
    defer config.Close()
    speechRecognizer, err := speech.NewSpeechRecognizerFromConfig(config, audioConfig)
    if err != nil {
        fmt.Println("Got an error: ", err)
        return
    }
    defer speechRecognizer.Close()
    speechRecognizer.SessionStarted(func(event speech.SessionEventArgs) {
        defer event.Close()
        fmt.Println("Session Started (ID=", event.SessionID, ")")
    })
    speechRecognizer.SessionStopped(func(event speech.SessionEventArgs) {
        defer event.Close()
        fmt.Println("Session Stopped (ID=", event.SessionID, ")")
    })

    task := speechRecognizer.RecognizeOnceAsync()
    var outcome speech.SpeechRecognitionOutcome
    select {
    case outcome = <-task:
    case <-time.After(5 * time.Second):
        fmt.Println("Timed out")
        return
    }
    defer outcome.Close()
    if outcome.Error != nil {
        fmt.Println("Got an error: ", outcome.Error)
    }
    fmt.Println("Got a recognition!")
    fmt.Println(outcome.Result.Text)
}

Aşağıdaki komutları çalıştırarak dosyanın üzerinde barındırılan bileşenlere bağlantı içeren bir go.mod GitHub.

go mod init quickstart
go get github.com/Microsoft/cognitive-services-speech-sdk-go

Şimdi kodu derleme ve çalıştırma.

go build
go run quickstart

ve sınıfları hakkında ayrıntılı bilgi için başvuru SpeechConfig belgelerine SpeechRecognizer bakın.

Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşmayı tanıyabilme ve tam olarak ifade etmektir (genellikle konuşmayı metne göre ifade etmek olarak adlandırılır). Bu hızlı başlangıçta, yüksek kaliteli konuşmayı metne dönüştürme gerçekleştirmek için uygulamalarınız ve ürünleriniz için Konuşma SDK'sı kullanmayı öğrenirsiniz.

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 aşağıdaki yönergeleri kullanın:

Konuşma yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetine çağrı yapmak için bir oluşturmanız SpeechConfig gerekir. Bu sınıf, anahtarınız ve ilişkili konum/bölge, uç nokta, konak veya yetkilendirme belirteci gibi aboneliğiniz hakkında bilgiler içerir. Anahtarınızı SpeechConfig ve konumu/bölgenizi kullanarak bir oluşturun. Anahtar-konum/bölge çiftini bulmak için Anahtarları ve konumu/bölgeyi bul sayfasına bakın.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
    }
}

Başlatmanın birkaç yolu daha SpeechConfig vardır:

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

Not

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.

Mikrofondan tanıma

Cihazınızın mikrofonunu kullanarak konuşmayı tanımak için kullanarak AudioConfig bir fromDefaultMicrophoneInput() oluşturun. Ardından ve SpeechRecognizer 'nizi geçerek bir audioConfig 'i config başlatmak.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromMic(speechConfig);
    }

    public static void fromMic(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromDefaultMicrophoneInput();
        SpeechRecognizer recognizer = new SpeechRecognizer(speechConfig, audioConfig);

        System.out.println("Speak into your microphone.");
        Future<SpeechRecognitionResult> task = recognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

Belirli bir ses girişi cihazı kullanmak için içinde cihaz kimliğini belirtmeniz AudioConfig gerekir. Ses giriş cihazınızın cihaz kimliğini nasıl ala öğrenin.

Dosyadan tanıma

Mikrofon kullanmak yerine ses dosyasından gelen konuşmayı tanımak için yine de oluşturmanız AudioConfig gerekir. Ancak, çağrısı yapmak yerine AudioConfig , sanız fromDefaultMicrophoneInput() ve dosya fromWavFileInput() yolunu geçer.

import com.microsoft.cognitiveservices.speech.*;
import com.microsoft.cognitiveservices.speech.audio.AudioConfig;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

public class Program {
    public static void main(String[] args) throws InterruptedException, ExecutionException {
        SpeechConfig speechConfig = SpeechConfig.fromSubscription("<paste-your-subscription-key>", "<paste-your-region>");
        fromFile(speechConfig);
    }

    public static void fromFile(SpeechConfig speechConfig) throws InterruptedException, ExecutionException {
        AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
        SpeechRecognizer recognizer = new SpeechRecognizer(speechConfig, audioConfig);
        
        Future<SpeechRecognitionResult> task = recognizer.recognizeOnceAsync();
        SpeechRecognitionResult result = task.get();
        System.out.println("RECOGNIZED: Text=" + result.getText());
    }
}

Hata işleme

Önceki örneklerde yalnızca kullanılarak tanınan metin elde edildi ancak hataları ve diğer yanıtları işlemek için sonucu işlemek için result.getText() bazı kodlar yazmanız gerekir. Aşağıdaki örnekte ve result.getReason() değerlendirilir:

  • Tanıma sonucu yazdırır: ResultReason.RecognizedSpeech
  • Tanıma eşleşmesi yoksa, kullanıcıya bildirme: ResultReason.NoMatch
  • Hatayla karşılaşırsanız hata iletisini yazdırabilirsiniz: ResultReason.Canceled
switch (result.getReason()) {
    case ResultReason.RecognizedSpeech:
        System.out.println("We recognized: " + result.getText());
        exitCode = 0;
        break;
    case ResultReason.NoMatch:
        System.out.println("NOMATCH: Speech could not be recognized.");
        break;
    case ResultReason.Canceled: {
            CancellationDetails cancellation = CancellationDetails.fromResult(result);
            System.out.println("CANCELED: Reason=" + cancellation.getReason());

            if (cancellation.getReason() == CancellationReason.Error) {
                System.out.println("CANCELED: ErrorCode=" + cancellation.getErrorCode());
                System.out.println("CANCELED: ErrorDetails=" + cancellation.getErrorDetails());
                System.out.println("CANCELED: Did you update the subscription info?");
            }
        }
        break;
}

Sürekli tanıma

Önceki örneklerde, tek bir ifadeyi tanıyan başlangıç tanıması 1. Tek bir konuşmanın sonu, en fazla 15 saniyelik ses işlenene kadar sessizlik dinlenerek belirlenir.

Buna karşılık, ne zaman tanınmayacaklarını kontrol etmek istediğiniz zaman sürekli tanıma kullanılır. Tanıma sonuçlarını almak için recognizing , recognized ve canceled olaylarını abone olmanız gerekir. Tanımayı durdurmak için çağrısı stopContinuousRecognitionAsync gerekir. Burada, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştiriliyor olduğuyla ilgili bir örnek ve ardından.

Giriş tanımlayarak ve başlatarak SpeechRecognizer başlayalım:

AudioConfig audioConfig = AudioConfig.fromWavFileInput("YourAudioFile.wav");
SpeechRecognizer recognizer = new SpeechRecognizer(config, audioConfig);

Şimdi konuşma tanıma durumunu yönetmek için bir değişken oluşturuz. Başlamak için, sınıf kapsamında Semaphore bir bildireriz.

private static Semaphore stopTranslationWithFileSemaphore;

üzerinden gönderilen olaylara abone SpeechRecognizer oluruz.

  • recognizing: Ara tanıma sonuçlarını içeren olaylar için sinyal.
  • recognized: Son tanıma sonuçlarını içeren olaylar için sinyal (başarılı bir tanıma denemesi olduğunu gösteren).
  • sessionStopped: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.
  • canceled: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal (sonuç olarak iptal edilen bir tanıma denemesini veya doğrudan iptal isteğini ya da alternatif olarak bir aktarım veya protokol arızasını gösteren).
// First initialize the semaphore.
stopTranslationWithFileSemaphore = new Semaphore(0);

recognizer.recognizing.addEventListener((s, e) -> {
    System.out.println("RECOGNIZING: Text=" + e.getResult().getText());
});

recognizer.recognized.addEventListener((s, e) -> {
    if (e.getResult().getReason() == ResultReason.RecognizedSpeech) {
        System.out.println("RECOGNIZED: Text=" + e.getResult().getText());
    }
    else if (e.getResult().getReason() == ResultReason.NoMatch) {
        System.out.println("NOMATCH: Speech could not be recognized.");
    }
});

recognizer.canceled.addEventListener((s, e) -> {
    System.out.println("CANCELED: Reason=" + e.getReason());

    if (e.getReason() == CancellationReason.Error) {
        System.out.println("CANCELED: ErrorCode=" + e.getErrorCode());
        System.out.println("CANCELED: ErrorDetails=" + e.getErrorDetails());
        System.out.println("CANCELED: Did you update the subscription info?");
    }

    stopTranslationWithFileSemaphore.release();
});

recognizer.sessionStopped.addEventListener((s, e) -> {
    System.out.println("\n    Session stopped event.");
    stopTranslationWithFileSemaphore.release();
});

Her şey ayarlanmışken çağrısında da startContinuousRecognitionAsync olabiliriz.

// Starts continuous recognition. Uses StopContinuousRecognitionAsync() to stop recognition.
recognizer.startContinuousRecognitionAsync().get();

// Waits for completion.
stopTranslationWithFileSemaphore.acquire();

// Stops recognition.
recognizer.stopContinuousRecognitionAsync().get();

Dikte modu

Sürekli tanımayı kullanırken, ilgili "dikteyi etkinleştir" işlevini kullanarak dikte işlemini etkinleştirin. Bu mod, konuşma yapılandırma örneğinin noktalama gibi cümle yapılarının sözcük açıklamalarını yorumlamasına neden olur. Örneğin, "Şehir içinde yaşıyor musunuz?" soru işareti, "Şehirde yaşıyor musunuz?" metni olarak yorumlanır.

Dikte modunu etkinleştirmek için üzerinde enableDictation yöntemini SpeechConfig kullanın.

config.enableDictation();

Kaynak dili değiştirme

Konuşma tanıma için yaygın bir görev, giriş (veya kaynak) dilini belirtmektir. Şimdi giriş dilini Fransızca olarak nasıl değiştir diye bir göz at bakalım. Kodunuz içinde, kodunuzu bulun SpeechConfig ve hemen altına bu satırı ekleyin.

config.setSpeechRecognitionLanguage("fr-FR");

setSpeechRecognitionLanguage , bir dizeyi bağımsız değişken olarak alan bir parametredir. Desteklenen yerel diller/diller listesinde herhangi bir değer sekleyebilirsiniz.

Tanıma doğruluğunu geliştirme

Tümcecik Listeleri, ses verilerinde bir kişinin adı veya belirli bir konum gibi bilinen tümcecikleri tanımlamak için kullanılır. Tümceciklerin listesini sağlayarak konuşma tanımanın doğruluğunu geliştirebilirsiniz.

Örneğin, "Move to" komutuna ve konuşulan olası "Ward" hedefine sahipse "Move to Ward" (Ward'a Taşı) girişini ebilirsiniz. Tümcecik eklemek, ses tanınıyorsa "Move to Ward" (Ward'a Taşı) ifadesinin "Move toward" (Doğru taşı) yerine "Move to Ward" (Bölgeye Taşı) tanınma olasılığını artıracaktır

Tek sözcük veya tam tümcecikler bir Tümcecik Listesine eklenebilir. Tanıma sırasında, tümcecik listesinde girişler konuşmanın ortasında görünse bile listede yer alan sözcüklerin ve tümceciklerin tanınmasını artırmak için kullanılır.

Önemli

Tümcecik Listesi özelliği şu dillerde kullanılabilir: en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN

Tümcecik Listesi özelliği, en fazla birkaç yüz tümcecik ile kullanılmalıdır. Daha büyük bir listeniz veya şu anda desteklenmiyor olan diller için, doğruluğu artırmak için özel bir model eğitebilirsiniz.

Tümcecik Listesi özelliği özel uç noktalarla birlikte desteklenmiyor. Bunu özel uç noktalarla birlikte kullanmayın. Bunun yerine, tümcecikleri içeren özel bir model eğitin.

Tümcecik listesi kullanmak için önce bir nesnesi PhraseListGrammar oluşturun, ardından ile belirli sözcükleri ve tümcecikleri AddPhrase ekleyin.

Bir sonraki PhraseListGrammar tanımada veya Konuşma hizmetine yeniden bağlandığınızda etkili olacak değişiklikler.

PhraseListGrammar phraseList = PhraseListGrammar.fromRecognizer(recognizer);
phraseList.addPhrase("Supercalifragilisticexpialidocious");

Tümcecik listenizi temizlemeniz gerekirse:

phraseList.clear();

Tanıma doğruluğunu geliştirmek için diğer seçenekler

Tümcecik listeleri, tanıma doğruluğunu geliştirmek için yalnızca bir seçenektir. Aşağıdakileri de yapabilirsiniz:

Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşmayı tanıyabilme ve tam olarak ifade etmektir (genellikle konuşmayı metne göre ifade etmek olarak adlandırılır). Bu hızlı başlangıçta, yüksek kaliteli konuşmayı metne dönüştürme gerçekleştirmek için uygulamalarınız ve ürünleriniz için Konuşma SDK'sı kullanmayı öğrenirsiniz.

GitHub'da örneklere atla

Doğrudan örnek koda atlamak için aşağıdaki JavaScript hızlı başlangıç örneklerine GitHub.

Alternatif olarak, React sdk'sını tarayıcı tabanlı bir ortamda nasıl kullanabileceğiniz hakkında bilgi edinmek için React örneğine bakın.

Ö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 yapmak için önce Konuşma SDK'sı'Node.js. Yalnızca paket adının yüklü olması için npm install microsoft-cognitiveservices-speech-sdk çalıştırın. Kılavuzlu yükleme yönergeleri için başlama makalesine bakın.

requireSDK'yı içeri almak için aşağıdaki deyimi kullanın.

const sdk = require("microsoft-cognitiveservices-speech-sdk");

hakkında daha fazla bilgi require için gerekli belgelere bakın.

Konuşma yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetine çağrı yapmak için bir oluşturmanız SpeechConfig gerekir. Bu sınıf, anahtarınız ve ilişkili konum/bölge, uç nokta, konak veya yetkilendirme belirteci gibi aboneliğiniz hakkında bilgiler içerir. Anahtarınızı SpeechConfig ve konumu/bölgenizi kullanarak bir oluşturun. Anahtar-konum/bölge çiftini bulmak için Anahtarları ve konumu/bölgeyi bul sayfasına bakın.

const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

Başlatmanın birkaç yolu daha SpeechConfig vardır:

  • 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 konumu/bölgeyi iletir.

Not

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.

Mikrofondan tanıma (yalnızca tarayıcı)

Mikrofondan gelen konuşmaların tanınması Node.jsve yalnızca tarayıcı tabanlı bir JavaScript ortamında de desteklemektedir. Mikrofon uygulamasından React metne GitHub görmek için aşağıdaki komut örneğine bakın.

Not

Belirli bir ses girişi cihazı kullanmak için içinde cihaz kimliğini belirtmeniz AudioConfig gerekir. Ses giriş cihazınızın cihaz kimliğini nasıl ala öğrenin.

Dosyadan tanıma

Bir ses dosyasından gelen konuşmayı tanımak için nesnesini AudioConfig kabul fromWavFileInput() eden bir Buffer oluşturun. Ardından ve SpeechRecognizer 'nizi geçerek bir audioConfig 'i speechConfig başlatmak.

const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

function fromFile() {
    let audioConfig = sdk.AudioConfig.fromWavFileInput(fs.readFileSync("YourAudioFile.wav"));
    let recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

    recognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        recognizer.close();
    });
}
fromFile();

Bellek içinde akıştan tanıma

Çoğu kullanım örneğinde ses verileriniz büyük olasılıkla blob depolamadan gelir veya başka bir şekilde zaten bellek içinde veya benzer bir ham veri ArrayBuffer yapısı olarak kullanılır. Aşağıdaki kod:

  • kullanarak bir anında akış createPushStream() oluşturur.
  • Tanıtım amacıyla kullanarak bir dosyayı okur, ancak içinde zaten ses verileriniz varsa içeriği doğrudan giriş akışına .wav fs.createReadStream yazmaya ArrayBuffer atlayabilirsiniz.
  • Anından akış kullanarak bir ses yapılandırması oluşturur.
const fs = require('fs');
const sdk = require("microsoft-cognitiveservices-speech-sdk");
const speechConfig = sdk.SpeechConfig.fromSubscription("<paste-your-speech-key-here>", "<paste-your-speech-location/region-here>");

function fromStream() {
    let pushStream = sdk.AudioInputStream.createPushStream();

    fs.createReadStream("YourAudioFile.wav").on('data', function(arrayBuffer) {
        pushStream.write(arrayBuffer.slice());
    }).on('end', function() {
        pushStream.close();
    });
 
    let audioConfig = sdk.AudioConfig.fromStreamInput(pushStream);
    let recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);
    recognizer.recognizeOnceAsync(result => {
        console.log(`RECOGNIZED: Text=${result.text}`);
        recognizer.close();
    });
}
fromStream();

Giriş olarak bir anında İlerle akışı kullanmak, ses verisi ham bir PCM olduğunu varsayıyor, örneğin tüm üst bilgileri atlar. Üst bilgi atlanmadığında API hala belirli durumlarda çalışır, ancak en iyi sonuçlar için üst bilgileri okumak için mantık uygulamayı göz önünde bulundurarak ses verisi fs başlangıcını kullanın.

Hata işleme

Önceki örnekler yalnızca 'den tanınan metni almakla birlikte, hataları ve diğer yanıtları işlemek için sonucu işlemek için result.text bazı kodlar yazmanız gerekir. Aşağıdaki kod, özelliğini değerlendirir result.reason ve:

  • Tanıma sonucu yazdırır: ResultReason.RecognizedSpeech
  • Tanıma eşleşmesi yoksa, kullanıcıya bildirme: ResultReason.NoMatch
  • Hatayla karşılaşırsanız hata iletisini yazdırabilirsiniz: ResultReason.Canceled
switch (result.reason) {
    case sdk.ResultReason.RecognizedSpeech:
        console.log(`RECOGNIZED: Text=${result.text}`);
        break;
    case sdk.ResultReason.NoMatch:
        console.log("NOMATCH: Speech could not be recognized.");
        break;
    case sdk.ResultReason.Canceled:
        const cancellation = CancellationDetails.fromResult(result);
        console.log(`CANCELED: Reason=${cancellation.reason}`);

        if (cancellation.reason == sdk.CancellationReason.Error) {
            console.log(`CANCELED: ErrorCode=${cancellation.ErrorCode}`);
            console.log(`CANCELED: ErrorDetails=${cancellation.errorDetails}`);
            console.log("CANCELED: Did you update the key and location/region info?");
        }
        break;
    }

Sürekli tanıma

Önceki örneklerde, tek bir ifadeyi tanıyan başlangıç tanıması 1. Tek bir konuşmanın sonu, en fazla 15 saniyelik ses işlenene kadar sessizlik dinlenerek belirlenir.

Buna karşılık, ne zaman tanınmayacaklarını kontrol etmek istediğiniz zaman sürekli tanıma kullanılır. Tanıma sonuçlarını almak için Recognizing , Recognized ve Canceled olaylarını abone olmanız gerekir. Tanımayı durdurmak için çağrısı stopContinuousRecognitionAsync gerekir. Burada, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştiriliyor olduğuyla ilgili bir örnek ve ardından.

Giriş tanımlayarak ve başlatarak SpeechRecognizer başlayabilirsiniz:

const recognizer = new sdk.SpeechRecognizer(speechConfig, audioConfig);

Ardından, 'den gönderilen olaylara abone SpeechRecognizer olun.

  • recognizing: Ara tanıma sonuçlarını içeren olaylar için sinyal.
  • recognized: Son tanıma sonuçlarını içeren olaylar için sinyal (başarılı bir tanıma denemesi olduğunu gösteren).
  • sessionStopped: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.
  • canceled: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal (sonuç olarak iptal edilen bir tanıma denemesini veya doğrudan iptal isteğini ya da alternatif olarak bir aktarım veya protokol arızasını gösteren).
recognizer.recognizing = (s, e) => {
    console.log(`RECOGNIZING: Text=${e.result.text}`);
};

recognizer.recognized = (s, e) => {
    if (e.result.reason == sdk.ResultReason.RecognizedSpeech) {
        console.log(`RECOGNIZED: Text=${e.result.text}`);
    }
    else if (e.result.reason == sdk.ResultReason.NoMatch) {
        console.log("NOMATCH: Speech could not be recognized.");
    }
};

recognizer.canceled = (s, e) => {
    console.log(`CANCELED: Reason=${e.reason}`);

    if (e.reason == sdk.CancellationReason.Error) {
        console.log(`"CANCELED: ErrorCode=${e.errorCode}`);
        console.log(`"CANCELED: ErrorDetails=${e.errorDetails}`);
        console.log("CANCELED: Did you update the key and location/region info?");
    }

    recognizer.stopContinuousRecognitionAsync();
};

recognizer.sessionStopped = (s, e) => {
    console.log("\n    Session stopped event.");
    recognizer.stopContinuousRecognitionAsync();
};

Her şey ayarlanmışken startContinuousRecognitionAsync çağrısıyla tanımaya başlayabiliriz.

recognizer.startContinuousRecognitionAsync();

// make the following call at some point to stop recognition.
// recognizer.stopContinuousRecognitionAsync();

Dikte modu

Sürekli tanımayı kullanırken, ilgili "dikteyi etkinleştir" işlevini kullanarak dikte işlemini etkinleştirin. Bu mod, konuşma yapılandırma örneğinin noktalama gibi cümle yapılarının sözcük açıklamalarını yorumlamasına neden olur. Örneğin, "Şehir içinde yaşıyor musunuz?" soru işareti, "Şehirde yaşıyor musunuz?" metni olarak yorumlanır.

Dikte modunu etkinleştirmek için üzerinde enableDictation yöntemini SpeechConfig kullanın.

speechConfig.enableDictation();

Kaynak dili değiştirme

Konuşma tanıma için yaygın bir görev, giriş (veya kaynak) dilini belirtmektir. Şimdi giriş dilini nasıl İtalyanca olarak değiştirdkine göz at bakalım. Kodunuz içinde, kodunuzu bulun SpeechConfig ve hemen altına bu satırı ekleyin.

speechConfig.speechRecognitionLanguage = "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.

Tanıma doğruluğunu geliştirme

Tümcecik Listeleri, ses verilerinde bir kişinin adı veya belirli bir konum gibi bilinen tümcecikleri tanımlamak için kullanılır. Tümceciklerin listesini sağlayarak konuşma tanımanın doğruluğunu geliştirebilirsiniz.

Örneğin, "Move to" komutuna ve konuşulan olası "Ward" hedefine sahipse "Move to Ward" (Ward'a Taşı) girişini ebilirsiniz. Tümcecik eklemek, ses tanınıyorsa "Move to Ward" (Ward'a Taşı) ifadesinin "Move toward" (Doğru taşı) yerine "Move to Ward" (Bölgeye Taşı) tanınma olasılığını artıracaktır

Tek sözcük veya tam tümcecikler bir Tümcecik Listesine eklenebilir. Tanıma sırasında, tümcecik listesinde girişler konuşmanın ortasında görünse bile listede yer alan sözcüklerin ve tümceciklerin tanınmasını artırmak için kullanılır.

Önemli

Tümcecik Listesi özelliği şu dillerde kullanılabilir: en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN

Tümcecik Listesi özelliği, en fazla birkaç yüz tümcecik ile kullanılmalıdır. Daha büyük bir listeniz veya şu anda desteklenmiyor olan diller için, doğruluğu artırmak için özel bir model eğitebilirsiniz.

Tümcecik Listesi özelliği özel uç noktalarla birlikte desteklenmiyor. Bunu özel uç noktalarla birlikte kullanmayın. Bunun yerine, tümcecikleri içeren özel bir model eğitin.

Tümcecik listesi kullanmak için önce bir nesnesi PhraseListGrammar oluşturun, ardından ile belirli sözcükleri ve tümcecikleri addPhrase ekleyin.

Bir sonraki PhraseListGrammar tanımada veya Konuşma hizmetine yeniden bağlandığınızda etkili olacak değişiklikler.

const phraseList = sdk.PhraseListGrammar.fromRecognizer(recognizer);
phraseList.addPhrase("Supercalifragilisticexpialidocious");

Tümcecik listenizi temizlemeniz gerekirse:

phraseList.clear();

Tanıma doğruluğunu geliştirmek için diğer seçenekler

Tümcecik listeleri, tanıma doğruluğunu geliştirmek için yalnızca bir seçenektir. Aşağıdakileri de yapabilirsiniz:

Konuşma hizmetinin temel özelliklerinden biri de insan konuşmanızı tanıyabilme ve (genellikle konuşma-metin olarak adlandırılır). Bu örnekte, uygulama ve ürünlerinize yönelik konuşma SDK 'sını kullanarak yüksek kaliteli konuşmayı metne dönüştürme işlemini nasıl gerçekleştireceğinizi öğreneceksiniz.

GitHub React örneği

konuşma SDK 'sını tarayıcı tabanlı bir JavaScript ortamında nasıl kullanacağınızı öğrenmek için GitHub React örneğine gidin. Bu örnek, kimlik doğrulama belirteci değişim ve yönetimine ilişkin tasarım model örneklerini gösterir ve konuşmayı metne dönüştürme için bir mikrofondan veya dosyadan ses yakalamaya yöneliktir.

Ayrıca, Node.js hızlı başlangıçta kullanılan tasarım desenleri de tarayıcı ortamında kullanılabilir.

Swift ve amaç-C için konuşma SDK 'sını kullanarak konuşmayı metne aktarabilirsiniz.

Önkoşullar

Aşağıdaki örneklerde bir Azure hesabınız ve konuşma hizmeti aboneliğiniz olduğunu varsayalım. Hesabınız ve aboneliğiniz yoksa konuşma hizmetini ücretsiz deneyin.

Konuşma SDK 'Sı ve örnekleri 'ni yükler

Bilişsel Hizmetler konuşma SDK 'sı , IOS ve Mac için Swift ve amaç-C ' d e yazılmış örnekleri içerir. Her örnek için yükleme yönergelerini görmek üzere bir bağlantıya tıklayın:

Ayrıca, Amaç-C başvurusu için çevrimiçi bir konuşma SDK 'sısunuyoruz.

Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşmayı tanıyabilme ve tam olarak ifade etmektir (genellikle konuşmayı metne göre ifade etmek olarak adlandırılır). Bu hızlı başlangıçta, yüksek kaliteli konuşmayı metne dönüştürme gerçekleştirmek için uygulamalarınız ve ürünleriniz için Konuşma SDK'sı kullanmayı öğrenirsiniz.

GitHub'da örneklere atla

Doğrudan örnek koda atlamak için aşağıdaki Python hızlı başlangıç örneklerine GitHub.

Önkoşullar

Bu makalede şu kabuller yer almaktadır:

Konuşma SDK'sı yükleme ve içeri aktarma

Herhangi bir şey yapamadan önce Konuşma SDK'sı yüklemeniz gerekir.

pip install azure-cognitiveservices-speech

macOS'taysanız ve yükleme sorunlarıyla ilgili sorunlarınız varsa önce bu komutu çalıştırmanız gerekir.

python3 -m pip install --upgrade pip

Konuşma SDK'sı yüklendikten sonra Python projenize aktarın.

import azure.cognitiveservices.speech as speechsdk

Konuşma yapılandırması oluşturma

Konuşma SDK'sını kullanarak Konuşma hizmetine çağrı yapmak için bir oluşturmanız SpeechConfig gerekir. Bu sınıf, anahtarınız ve ilişkili konum/bölge, uç nokta, konak veya yetkilendirme belirteci gibi aboneliğiniz hakkında bilgiler içerir. Anahtarınızı SpeechConfig ve konumu/bölgenizi kullanarak bir oluşturun. Anahtar-konum/bölge çiftini bulmak için Anahtarları ve konumu/bölgeyi bul sayfasına bakın.

speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")

Başlatmanın birkaç yolu daha SpeechConfig vardır:

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

Not

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.

Mikrofondan tanıma

Cihazınızın mikrofonunu kullanarak konuşmayı tanımak için, bir geçirmeden bir SpeechRecognizer oluşturmanız ve AudioConfig geçirmeniz speech_config gerekir.

import azure.cognitiveservices.speech as speechsdk

def from_mic():
    speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config)
    
    print("Speak into your microphone.")
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_mic()

Belirli bir ses giriş cihazı kullanmak için, içinde cihaz kimliğini belirtmeniz ve oluşturucu parametresine AudioConfig SpeechRecognizer geçmeniz audio_config gerekir. Ses giriş cihazınızın cihaz kimliğini nasıl ala öğrenin.

Dosyadan tanıma

Mikrofon kullanmak yerine ses dosyasından gelen konuşmayı tanımak için bir oluşturun AudioConfig ve parametresini filename kullanın.

import azure.cognitiveservices.speech as speechsdk

def from_file():
    speech_config = speechsdk.SpeechConfig(subscription="<paste-your-speech-key-here>", region="<paste-your-speech-location/region-here>")
    audio_input = speechsdk.AudioConfig(filename="your_file_name.wav")
    speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_input)
    
    result = speech_recognizer.recognize_once_async().get()
    print(result.text)

from_file()

Hata işleme

Önceki örnekler yalnızca 'den tanınan metni almakla birlikte, hataları ve diğer yanıtları işlemek için sonucu işlemek için result.text bazı kodlar yazmanız gerekir. Aşağıdaki kod, özelliğini değerlendirir result.reason ve:

  • Tanıma sonucu yazdırır: speechsdk.ResultReason.RecognizedSpeech
  • Tanıma eşleşmesi yoksa, kullanıcıya bildirme: speechsdk.ResultReason.NoMatch
  • Hatayla karşılaşırsanız hata iletisini yazdırabilirsiniz: speechsdk.ResultReason.Canceled
if result.reason == speechsdk.ResultReason.RecognizedSpeech:
    print("Recognized: {}".format(result.text))
elif result.reason == speechsdk.ResultReason.NoMatch:
    print("No speech could be recognized: {}".format(result.no_match_details))
elif result.reason == speechsdk.ResultReason.Canceled:
    cancellation_details = result.cancellation_details
    print("Speech Recognition canceled: {}".format(cancellation_details.reason))
    if cancellation_details.reason == speechsdk.CancellationReason.Error:
        print("Error details: {}".format(cancellation_details.error_details))

Sürekli tanıma

Önceki örneklerde, tek bir ifadeyi tanıyan başlangıç tanıması 1. Tek bir konuşmanın sonu, en fazla 15 saniyelik ses işlenene kadar sessizlik dinlenerek belirlenir.

Buna karşılık, ne zaman tanınmayacaklarını kontrol etmek istediğiniz zaman sürekli tanıma kullanılır. Tanıma sonuçlarını almak için bağlantısına bağlanmanız ve tanımayı durdurmak için EventSignal stop_continuous_recognition() veya stop_continuous_recognition() çağrısı stop_continuous_recognition. Burada, bir ses giriş dosyasında sürekli tanımanın nasıl gerçekleştiriliyor olduğuyla ilgili bir örnek ve ardından.

Giriş tanımlayarak ve başlatarak SpeechRecognizer başlayalım:

audio_config = speechsdk.audio.AudioConfig(filename=weatherfilename)
speech_recognizer = speechsdk.SpeechRecognizer(speech_config=speech_config, audio_config=audio_config)

Şimdi konuşma tanıma durumunu yönetmek için bir değişken oluşturuz. Başlangıç olarak bunu olarak ayarlayacağız çünkü tanımanın başında güvenli bir şekilde bit False olmadığını varsayabilirsiniz.

done = False

Şimdi, bir alınarak sürekli tanımayı durdurmak için bir geri çağırma evt oluşturuz. Gözlerde tutmamız gereken birkaç şey vardır.

def stop_cb(evt):
    print('CLOSING on {}'.format(evt))
    speech_recognizer.stop_continuous_recognition()
    nonlocal done
    done = True

Bu kod örneği, geri çağırmaları üzerinden gönderilen olaylara bağlamayı SpeechRecognizer gösterir.

  • recognizing: Ara tanıma sonuçlarını içeren olaylar için sinyal.
  • recognized: Son tanıma sonuçlarını içeren olaylar için sinyal (başarılı bir tanıma denemesi olduğunu gösteren).
  • session_started: Tanıma oturumunun (işlem) başlangıcını gösteren olaylar için sinyal.
  • session_stopped: Tanıma oturumunun (işlem) sonunu gösteren olaylar için sinyal.
  • canceled: İptal edilen tanıma sonuçlarını içeren olaylar için sinyal (sonuç olarak iptal edilen bir tanıma denemesini veya doğrudan iptal isteğini ya da alternatif olarak bir aktarım veya protokol arızasını gösteren).
speech_recognizer.recognizing.connect(lambda evt: print('RECOGNIZING: {}'.format(evt)))
speech_recognizer.recognized.connect(lambda evt: print('RECOGNIZED: {}'.format(evt)))
speech_recognizer.session_started.connect(lambda evt: print('SESSION STARTED: {}'.format(evt)))
speech_recognizer.session_stopped.connect(lambda evt: print('SESSION STOPPED {}'.format(evt)))
speech_recognizer.canceled.connect(lambda evt: print('CANCELED {}'.format(evt)))

speech_recognizer.session_stopped.connect(stop_cb)
speech_recognizer.canceled.connect(stop_cb)

Her şey ayarlanmışken start_continuous_recognition() çağrısı start_continuous_recognition.

speech_recognizer.start_continuous_recognition()
while not done:
    time.sleep(.5)

Dikte modu

Sürekli tanımayı kullanırken, ilgili "dikteyi etkinleştir" işlevini kullanarak dikte işlemini etkinleştirin. Bu mod, konuşma yapılandırma örneğinin noktalama gibi cümle yapılarının sözcük açıklamalarını yorumlamasına neden olur. Örneğin, "Şehir içinde yaşıyor musunuz?" soru işareti, "Şehirde yaşıyor musunuz?" metni olarak yorumlanır.

Dikte modunu etkinleştirmek için üzerinde enable_dictation() yöntemini SpeechConfig kullanın.

SpeechConfig.enable_dictation()

Kaynak dili değiştirme

Konuşma tanıma için yaygın bir görev, giriş (veya kaynak) dilini belirtmektir. Şimdi giriş dilini Almanca olarak nasıl değiştir diye bir göz at bakalım. Kodunuz içinde SpeechConfig'inizi bulun ve hemen altına bu satırı ekleyin.

speech_config.speech_recognition_language="de-DE"

speech_recognition_language , bir dizeyi bağımsız değişken olarak alan bir parametredir. Desteklenen yerel diller/diller listesinde herhangi bir değer sekleyebilirsiniz.

Tanıma doğruluğunu geliştirme

Tümcecik Listeleri, ses verilerinde bir kişinin adı veya belirli bir konum gibi bilinen tümcecikleri tanımlamak için kullanılır. Tümceciklerin listesini sağlayarak konuşma tanımanın doğruluğunu geliştirebilirsiniz.

Örneğin, "Move to" komutuna ve konuşulan olası "Ward" hedefine sahipse "Move to Ward" (Ward'a Taşı) girişini ebilirsiniz. Tümcecik eklemek, ses tanınıyorsa "Move to Ward" (Ward'a Taşı) ifadesinin "Move toward" (Doğru taşı) yerine "Move to Ward" (Bölgeye Taşı) tanınma olasılığını artıracaktır

Tek sözcük veya tam tümcecikler bir Tümcecik Listesine eklenebilir. Tanıma sırasında, tümcecik listesinde girişler konuşmanın ortasında görünse bile listede yer alan sözcüklerin ve tümceciklerin tanınmasını artırmak için kullanılır.

Önemli

Tümcecik Listesi özelliği şu dillerde kullanılabilir: en-US, de-DE, en-AU, en-CA, en-GB, en-IN, es-ES, fr-FR, it-IT, ja-JP, pt-BR, zh-CN

Tümcecik Listesi özelliği, en fazla birkaç yüz tümcecik ile kullanılmalıdır. Daha büyük bir listeniz veya şu anda desteklenmiyor olan diller için, doğruluğu artırmak için özel bir model eğitebilirsiniz.

Tümcecik Listesi özelliği özel uç noktalarla birlikte desteklenmiyor. Bunu özel uç noktalarla birlikte kullanmayın. Bunun yerine, tümcecikleri içeren özel bir model eğitin.

Tümcecik listesi kullanmak için önce bir nesnesi PhraseListGrammar oluşturun, ardından ile belirli sözcükleri ve tümcecikleri addPhrase ekleyin.

Bir sonraki PhraseListGrammar tanımada veya Konuşma hizmetine yeniden bağlandığınızda etkili olacak değişiklikler.

phrase_list_grammar = speechsdk.PhraseListGrammar.from_recognizer(reco)
phrase_list_grammar.addPhrase("Supercalifragilisticexpialidocious")

Tümcecik listenizi temizlemeniz gerekirse:

phrase_list_grammar.clear()

Tanıma doğruluğunu geliştirmek için diğer seçenekler

Tümcecik listeleri, tanıma doğruluğunu geliştirmek için yalnızca bir seçenektir. Aşağıdakileri de yapabilirsiniz:

Bu hızlı başlangıçta, Konuşma tanıma hizmetini ve cURL'yi kullanarak konuşmayı metne dönüştürmeyi öğrenirsiniz.

Konuşmadan Metne Konuşma kavramlarına üst düzey bir bakış için genel bakış makalesine bakın.

Ö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şmayı metne dönüştürme

Komut isteminde aşağıdaki komutu çalıştırın. Komutuna aşağıdaki değerleri ekleyebilirsiniz.

curl --location --request POST 'https://INSERT_REGION_HERE.stt.speech.microsoft.com/speech/recognition/conversation/cognitiveservices/v1?language=en-US' \
--header 'Ocp-Apim-Subscription-Key: INSERT_SUBSCRIPTION_KEY_HERE' \
--header 'Content-Type: audio/wav' \
--data-binary @'INSERT_AUDIO_FILE_PATH_HERE'

Aşağıdakine benzer bir yanıt alasınız.

{
    "RecognitionStatus": "Success",
    "DisplayText": "My voice is my passport, verify me.",
    "Offset": 6600000,
    "Duration": 32100000
}

Daha fazla bilgi için bkz. konuşmayı metne REST API başvurusu.

Konuşma tanıma hizmetinin temel özelliklerinden biri, insan konuşmayı tanıyabilme ve tam olarak ifade etmektir (genellikle konuşmayı metne göre ifade etmek olarak adlandırılır). Bu hızlı başlangıçta, yüksek kaliteli konuşmayı metne dönüştürme gerçekleştirmek için uygulamalarınız ve ürünleriniz için Konuşma CLI'sini kullanmayı öğrenirsiniz.

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

Mikrofondan konuşmayı metne ayarlama

Bilgisayarınızın mikrofonunu takın ve kapatın ve mikrofonu da kullana tüm uygulamaları kapatın. Bazı bilgisayarlar yerleşik bir mikrofona sahipken, bazıları da bir Bluetooth gerektirir.

Artık mikrofondan gelen konuşmayı tanımak için Konuşma CLI'sını çalıştırmaya hazır oluruz. Komut satırına, Konuşma CLI ikili dosyasını içeren dizine değişiklik yapın ve aşağıdaki komutu çalıştırın.

spx recognize --microphone

Not

Konuşma CLI'sı varsayılan olarak İngilizce'dir. Konuşmayı metne ifade etmek tablosundan farklı bir dil seçebilirsiniz. Örneğin, Almanca konuşmayı --source de-DE tanımak için ekleyin.

Mikrofona konuşun; sözcüklerinizin gerçek zamanlı olarak metne transkripsiyonunu görüyorsunuz. Konuşma CLI'si bir süre sessizlik olduktan sonra veya ctrl-C tuşlarına basıp durduracak.

Ses dosyasından konuşmayı metne değiştirme

Konuşma CLI'sı, birçok dosya biçimi ve doğal dilde konuşmayı tanıyabilirsiniz. Bu örnekte, İngilizce konuşma içeren herhangi bir WAV dosyasını (16kHz veya 8kHz, 16 bit ve mono PCM) kullanabilirsiniz. Hızlı bir örnek almak için whatstheweatherlike.wav dosyasını indirip Konuşma CLI ikili dosyasıyla aynı dizine kopyalayın.

Artık aşağıdaki komutu çalıştırarak ses dosyasında bulunan konuşmayı tanımak için Konuşma CLI'sını çalıştırmaya hazır olursanız.

spx recognize --file whatstheweatherlike.wav

Not

Konuşma CLI'sı varsayılan olarak İngilizce'dir. Konuşmayı metne ifade etmek tablosundan farklı bir dil seçebilirsiniz. Örneğin, Almanca konuşmayı --source de-DE tanımak için ekleyin.

Konuşma CLI'sinde ekranda konuşmanın metin transkripsiyonu gösterilir.

Sonraki adımlar