Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Naučte se, jak ve vaší aplikaci Windows App SDK zachytávat a rozpoznávat dlouhý souvislý diktovaný řečový vstup.
Important
Rozpoznávání řeči vyžaduje identitu balíčku MSIX. Rozhraní API Windows.Media.SpeechRecognition jsou dostupná pouze když vaše aplikace běží s identitou balíčku (v balíčku nebo v balíčku s externím umístěním). Nevybalené aplikace nemůžou tato rozhraní API používat.
Klíčová rozhraní API
Přehled
V rozpoznávání řeči se naučíte zachytit a rozpoznat krátký vstup řeči pomocí RecognizeAsync nebo RecognizeWithUIAsync. Pro delší nepřetržité relace rozpoznávání řeči, jako je diktování nebo e-mail, použijte vlastnost ContinuousRecognitionSession objektu SpeechRecognizer k získání objektu SpeechContinuousRecognitionSession.
Poznámka:
Podpora jazyka diktování závisí na zařízení, na kterém je vaše aplikace spuštěná. U počítačů a přenosných počítačů se pro diktování rozpoznává jenom en-US, zatímco Xbox dokáže rozpoznat všechny jazyky podporované rozpoznáváním řeči. Další informace najdete v tématu Určení jazyka rozpoznávání řeči.
Nastavení
Ke správě relace nepřetržitého diktování potřebuje vaše aplikace následující objekty:
- Instance objektu
SpeechRecognizer. - Odkaz na dispečer uživatelského rozhraní, který během diktování aktualizuje uživatelské rozhraní.
- Způsob, jak sledovat kumulovaná slova mluvená uživatelem
Deklarujte instanci SpeechRecognizer a prvek StringBuilder pro shromažďování výsledků rozpoznávání jako pole vaší třídy stránky:
private SpeechRecognizer speechRecognizer;
private StringBuilder dictatedTextBuilder;
Ve WinUI 3 použijete DispatcherQueue k odesílání aktualizací uživatelského rozhraní z vláken na pozadí (ne CoreDispatcher):
// Get the DispatcherQueue for the current thread (UI thread).
private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
Inicializovat
Během inicializace:
- Inicializace rozpoznávání řeči
- Zkompilujte předdefinované gramatiky diktování (nebo přidejte vlastní omezení).
- Nastavte naslouchací procesy událostí pro události rozpoznává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();
Řešení událostí rozpoznávání
Výsledek vygenerován
Událost ResultGenerated je vyvolána, když uživatel mluví. Rozpoznávač pravidelně předává část řečového vstupu.
Confidence Zkontrolujte vlastnost a rozhodněte se, jestli se má výsledek přijmout.
Vzhledem k tomu, že se tato událost aktivuje ve vlákně na pozadí, použijte DispatcherQueue.TryEnqueue k aktualizaci uživatelského rozhraní:
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;
});
}
}
Dokončeno
Událost Completed označuje, že relace průběžného rozpoznávání skončila. Relace skončí, když zavoláte StopAsync nebo CancelAsyncnebo dojde k chybě nebo když uživatel přestal mluvit.
private void ContinuousRecognitionSession_Completed(
SpeechContinuousRecognitionSession sender,
SpeechContinuousRecognitionCompletedEventArgs args)
{
if (args.Status != SpeechRecognitionResultStatus.Success)
{
dispatcherQueue.TryEnqueue(() =>
{
if (args.Status == SpeechRecognitionResultStatus.TimeoutExceeded)
{
dictationTextBox.Text = dictatedTextBuilder.ToString();
}
});
}
}
Vygenerovaná hypotéza
Zpracujte událost HypothesisGenerated, aby se zobrazily průběžné výsledky, zatímco rozpoznávač stále zpracovává data. Tím se zlepší rychlost odezvy tím, že uživateli poskytnete zpětnou vazbu, než bude k dispozici konečný výsledek:
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;
});
}
Spuštění a zastavení rozpoznávání
Před spuštěním nebo zastavením relace zkontrolujte stav rozpoznávání:
// 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();
}
Chcete-li okamžitě zrušit operaci a zahodit nevyřízené výsledky, zavolejte CancelAsync místo StopAsync.
Poznámka:
Událost ResultGenerated se může aktivovat po volání CancelAsync z důvodu multithreadingu. Pokud při zrušení relace rozpoznávání nastavíte soukromá pole, vždy ověřte jejich hodnoty v obslužné metodě ResultGenerated.
Související články
Windows developer