Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows Uygulama SDK'sı uygulamanızda uzun biçimli, sürekli dikte konuşma girişini yakalamayı ve tanımayı öğrenin.
Important
Konuşma tanıma için MSIX paket kimliği gerekir.
Windows.Media.SpeechRecognition API'leri yalnızca uygulamanız paket kimliğiyle (paketlenmiş veya dış konumla paketlenmiş olarak) çalıştığında kullanılabilir. Paketlenmemiş uygulamalar bu API'leri kullanamaz.
Anahtar API'leri
Genel Bakış
Konuşma tanıma bölümünde, RecognizeAsync veya RecognizeWithUIAsync kullanarak kısa konuşma girdisini yakalamayı ve tanımayı öğrenirsiniz. Dikte veya e-posta gibi daha uzun, sürekli konuşma tanıma oturumları için bir SpeechRecognizer öğesinin ContinuousRecognitionSession özelliğini kullanarak bir SpeechContinuousRecognitionSession nesnesi edinin.
Uyarı
Dikte dili desteği, uygulamanızın çalıştığı cihaza bağlıdır. Bilgisayarlar ve dizüstü bilgisayarlar için dikte için yalnızca en-US tanınırken, Xbox konuşma tanıma tarafından desteklenen tüm dilleri tanıyabilir. Daha fazla bilgi için bkz. Konuşma tanıma dilini belirtme.
Kurulum
Uygulamanızın sürekli dikte oturumunu yönetmek için aşağıdaki nesnelere ihtiyacı vardır:
- Bir nesnenin
SpeechRecognizerörneği. - Dikte sırasında kullanıcı arabirimini güncellemek için UI dispatcher referansı.
- Kullanıcı tarafından söylenen birikmiş sözcükleri izlemenin bir yolu.
Sayfa sınıfınızın alanları olarak, bir SpeechRecognizer örneği ve tanıma sonuçlarını biriktirmek için bir StringBuilder bildirin:
private SpeechRecognizer speechRecognizer;
private StringBuilder dictatedTextBuilder;
WinUI 3'te, arka plan iş parçacıklarından UI güncelleştirmelerini göndermek için DispatcherQueue kullanırsınız (CoreDispatcher değil):
// Get the DispatcherQueue for the current thread (UI thread).
private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
Başlat
Başlatma sırasında şunları yaparsınız:
- Konuşma tanıyıcıyı başlatın.
- Yerleşik dikte dil bilgisini derleyin (veya özel kısıtlamalar ekleyin).
- Tanıma olayları için dinleyiciler ayarlayın.
// Initialize the speech recognizer.
speechRecognizer = new SpeechRecognizer();
// Compile the default dictation grammar.
SpeechRecognitionCompilationResult result =
await speechRecognizer.CompileConstraintsAsync();
// Subscribe to continuous recognition events.
speechRecognizer.ContinuousRecognitionSession.ResultGenerated +=
ContinuousRecognitionSession_ResultGenerated;
speechRecognizer.ContinuousRecognitionSession.Completed +=
ContinuousRecognitionSession_Completed;
speechRecognizer.HypothesisGenerated +=
SpeechRecognizer_HypothesisGenerated;
dictatedTextBuilder = new StringBuilder();
Tanıma olaylarını işleme
Sonuç oluşturuldu
Kullanıcı konuştukça ResultGenerated olayı tetiklenir. Tanıyıcı, düzenli aralıklarla konuşma girdisinin bir bölümünü iletir. Sonucun Confidence kabul edilip edilmeyeceğine karar vermek için özelliğini denetleyin.
Bu olay bir arka plan iş parçacığında tetiklendiğinden kullanıcı arabirimini güncelleştirmek için kullanın DispatcherQueue.TryEnqueue :
private void ContinuousRecognitionSession_ResultGenerated(
SpeechContinuousRecognitionSession sender,
SpeechContinuousRecognitionResultGeneratedEventArgs args)
{
if (args.Result.Confidence == SpeechRecognitionConfidence.Medium ||
args.Result.Confidence == SpeechRecognitionConfidence.High)
{
dictatedTextBuilder.Append(args.Result.Text + " ");
dispatcherQueue.TryEnqueue(() =>
{
dictationTextBox.Text = dictatedTextBuilder.ToString();
btnClearText.IsEnabled = true;
});
}
}
Tamamlandı
Completed olayı, sürekli tanıma oturumunun sona erdiğini gösterir. Veya çağrısı StopAsyncCancelAsyncyaptığınızda ya da bir hata oluştuğunda ya da kullanıcı konuşmayı durdurduğunda oturum sona erer.
private void ContinuousRecognitionSession_Completed(
SpeechContinuousRecognitionSession sender,
SpeechContinuousRecognitionCompletedEventArgs args)
{
if (args.Status != SpeechRecognitionResultStatus.Success)
{
dispatcherQueue.TryEnqueue(() =>
{
if (args.Status == SpeechRecognitionResultStatus.TimeoutExceeded)
{
dictationTextBox.Text = dictatedTextBuilder.ToString();
}
});
}
}
HipotezDeğerlendirildi
Tanıyıcı hâlâ işlemeye devam ederken ara sonuçları göstermek için HypothesisGenerated olayını işleyin. Bu, nihai bir sonuç elde etmeden önce kullanıcıya geri bildirim vererek yanıt hızını artırır:
private void SpeechRecognizer_HypothesisGenerated(
SpeechRecognizer sender,
SpeechRecognitionHypothesisGeneratedEventArgs args)
{
string hypothesis = args.Hypothesis.Text;
string textboxContent = dictatedTextBuilder.ToString() + " " + hypothesis + " ...";
dispatcherQueue.TryEnqueue(() =>
{
dictationTextBox.Text = textboxContent;
btnClearText.IsEnabled = true;
});
}
Tanımayı başlat ve durdur
Oturumu başlatmadan veya durdurmadan önce tanıyıcı durumunu denetleyin:
// Start continuous recognition.
if (speechRecognizer.State == SpeechRecognizerState.Idle)
{
await speechRecognizer.ContinuousRecognitionSession.StartAsync();
}
// Stop continuous recognition (lets pending events complete).
if (speechRecognizer.State != SpeechRecognizerState.Idle)
{
await speechRecognizer.ContinuousRecognitionSession.StopAsync();
}
Hemen iptal etmek ve bekleyen sonuçları göz ardı etmek için StopAsync yerine CancelAsync çağrın.
Uyarı
Çoklu iş parçacığı kullanımı nedeniyle, CancelAsync çağrısı yaptıktan sonra ResultGenerated olayı tetiklenebilir. Tanıma oturumunu iptal ederken özel alanlar ayarlarsanız, her zaman işleyicideki ResultGenerated değerlerini doğrulayın.
İlgili makaleler
Windows developer