Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Lär dig hur du fångar och identifierar talindata för lång, sammanhängande diktering i din Windows App SDK-app.
Important
Taligenkänning kräver MSIX-paketidentitet.
Windows.Media.SpeechRecognition API:erna är endast tillgängliga när din app körs med paketidentitet (paketerad eller paketerad med extern plats). Uppackade appar kan inte använda dessa API:er.
Nyckel-API:er
Översikt
I Taligenkänning-avsnittet får du lära dig hur du fångar upp och känner igen kort talinmatning med hjälp av RecognizeAsync eller RecognizeWithUIAsync. För längre, kontinuerliga taligenkänningssessioner, till exempel diktering eller e-post, använder du egenskapen ContinuousRecognitionSession för en SpeechRecognizer för att hämta ett SpeechContinuousRecognitionSession-objekt.
Anmärkning
Språkstöd för diktering beror på vilken enhet appen körs på. För datorer och bärbara datorer identifieras endast en-US för diktering, medan Xbox kan känna igen alla språk som stöds av taligenkänning. Mer information finns i Ange taligenkänningsspråket.
Ställ in
Appen behöver följande objekt för att hantera en kontinuerlig dikteringssession:
- En instans av ett objekt av typen
SpeechRecognizer. - En referens till UI-avsändaren för att uppdatera användargränssnittet under dikteringen.
- Ett sätt att spåra de ackumulerade ord som användaren talar.
Deklarera en SpeechRecognizer instans och en StringBuilder för att ackumulera igenkänningsresultat som fält i sidklassen:
private SpeechRecognizer speechRecognizer;
private StringBuilder dictatedTextBuilder;
I WinUI 3 använder DispatcherQueue du för att skicka användargränssnittsuppdateringar från bakgrundstrådar (inte CoreDispatcher):
// Get the DispatcherQueue for the current thread (UI thread).
private Microsoft.UI.Dispatching.DispatcherQueue dispatcherQueue =
Microsoft.UI.Dispatching.DispatcherQueue.GetForCurrentThread();
Initialisera
Under initialiseringen gör du följande:
- Initiera taligenkänningen.
- Kompilera den inbyggda dikterings grammatiken (eller lägg till anpassade begränsningar).
- Konfigurera händelselyssnare för igenkänningshändelser.
// 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();
Hantera igenkänningshändelser
Resultat genererat
Händelsen ResultGenerated utlöses när användaren talar. Igenkännaren skickar regelbundet vidare ett segment av talinmatningen. Kontrollera egenskapen Confidence för att avgöra om resultatet ska accepteras.
Eftersom den här händelsen utlöses i en bakgrundstråd använder du DispatcherQueue.TryEnqueue för att uppdatera användargränssnittet:
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;
});
}
}
Har slutförts
Händelsen Completed anger att den kontinuerliga igenkänningssessionen har avslutats. Sessionen avslutas när du anropar StopAsync eller CancelAsync, eller när ett fel inträffar eller när användaren har slutat tala.
private void ContinuousRecognitionSession_Completed(
SpeechContinuousRecognitionSession sender,
SpeechContinuousRecognitionCompletedEventArgs args)
{
if (args.Status != SpeechRecognitionResultStatus.Success)
{
dispatcherQueue.TryEnqueue(() =>
{
if (args.Status == SpeechRecognitionResultStatus.TimeoutExceeded)
{
dictationTextBox.Text = dictatedTextBuilder.ToString();
}
});
}
}
Genererad hypotes
HypothesisGenerated Hantera händelsen för att visa interimsresultat medan identifieraren fortfarande bearbetas. Detta förbättrar svarstiden genom att ge användaren feedback innan ett slutligt resultat är tillgängligt:
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;
});
}
Starta och stoppa igenkänning
Kontrollera igenkännartillståndet innan du startar eller stoppar en session:
// 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();
}
Om du vill avbryta omedelbart och kassera väntande resultat anropar du CancelAsync i stället för StopAsync.
Anmärkning
En ResultGenerated händelse kan utlösas när du anropar CancelAsync på grund av multitrådning. Om du anger privata fält när du avbryter igenkänningssessionen kontrollerar du alltid deras värden i ResultGenerated hanteraren.
Relaterade artiklar
Windows developer