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.
Zjistěte, jak definovat a používat vlastní omezení pro rozpoznávání řeči.
Důležitá rozhraní API: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint
Rozpoznávání řeči vyžaduje alespoň jedno omezení pro definování rozpoznatelného slovníku. Pokud není zadáno žádné omezení, použije se předdefinovaná gramatika diktování univerzálních aplikací pro Windows. Viz Rozpoznávání řeči.
Přidání omezení
Pomocí vlastnosti SpeechRecognizer.Constraints přidejte omezení do rozpoznávání řeči.
Tady se podíváme na tři druhy omezení rozpoznávání řeči používané v aplikaci. (Omezení hlasových příkazů Cortany najdete v tématu Aktivace aplikace na popředí pomocí hlasových příkazů prostřednictvím Cortany.)
- SpeechRecognitionTopicConstraint – omezení založené na předdefinované gramatikě (diktování nebo vyhledávání na webu).
- SpeechRecognitionListConstraint – omezení založené na seznamu slov nebo frází.
- SpeechRecognitionGrammarFileConstraint – omezení definované v souboru SRGS (Speech Recognition Grammar Specification).
Každý rozpoznávač řeči může mít jednu sadu omezení. Platné jsou pouze tyto kombinace omezení:
- Omezení s jedním tématem (diktování nebo vyhledávání na webu)
- Pro Windows 10 Fall Creators Update (10.0.16299.15) a novější je možné sloučit jedno omezení tématu s omezením seznamu.
- Kombinace omezení seznamu a/nebo omezení gramatických souborů
Důležité
Před zahájením procesu rozpoznávání volejte metodu SpeechRecognizer.CompileConstraintsAsync , která zkompiluje omezení.
Specifikovat gramatiku vyhledávání na webu (SpeechRecognitionTopicConstraint)
Omezení tématu (diktování nebo gramatika vyhledávání na webu) musí být přidána do kolekce omezení rozpoznávání řeči.
Poznámka:
Pomocí funkce SpeechRecognitionListConstraint ve spojení s funkcí SpeechRecognitionTopicConstraint můžete zvýšit přesnost diktování tím, že poskytnete sadu klíčových slov specifických pro doménu, která se budou pravděpodobně používat během diktování.
Tady přidáme gramatiku vyhledávání na webu do kolekce omezení.
private async void WeatherSearch_Click(object sender, RoutedEventArgs e)
{
// Create an instance of SpeechRecognizer.
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
// Listen for audio input issues.
speechRecognizer.RecognitionQualityDegrading += speechRecognizer_RecognitionQualityDegrading;
// Add a web search grammar to the recognizer.
var webSearchGrammar = new Windows.Media.SpeechRecognition.SpeechRecognitionTopicConstraint(Windows.Media.SpeechRecognition.SpeechRecognitionScenario.WebSearch, "webSearch");
speechRecognizer.UIOptions.AudiblePrompt = "Say what you want to search for...";
speechRecognizer.UIOptions.ExampleText = @"Ex. 'weather for London'";
speechRecognizer.Constraints.Add(webSearchGrammar);
// Compile the constraint.
await speechRecognizer.CompileConstraintsAsync();
// Start recognition.
Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
//await speechRecognizer.RecognizeWithUIAsync();
// Do something with the recognition result.
var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
await messageDialog.ShowAsync();
}
Určení omezení programového seznamu (SpeechRecognitionListConstraint)
Seznamová omezení musí být přidána do kolekce omezení rozpoznávače řeči.
Mějte na paměti následující body:
- Do kolekce omezení můžete přidat více omezení seznamu.
- Pro řetězcové hodnoty můžete použít libovolnou kolekci, která implementuje IIterable<String>.
Tady programově určíme pole slov jako omezení seznamu a přidáme ho do kolekce omezení rozpoznávání řeči.
private async void YesOrNo_Click(object sender, RoutedEventArgs e)
{
// Create an instance of SpeechRecognizer.
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
// You could create this array dynamically.
string[] responses = { "Yes", "No" };
// Add a list constraint to the recognizer.
var listConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionListConstraint(responses, "yesOrNo");
speechRecognizer.UIOptions.ExampleText = @"Ex. 'yes', 'no'";
speechRecognizer.Constraints.Add(listConstraint);
// Compile the constraint.
await speechRecognizer.CompileConstraintsAsync();
// Start recognition.
Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
// Do something with the recognition result.
var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
await messageDialog.ShowAsync();
}
Zadejte omezení gramatiky SRGS (SpeechRecognitionGrammarFileConstraint)
Gramatické soubory SRGS musí být přidány do kolekce omezení systému pro rozpoznávání řeči.
SRGS verze 1.0 je standardní jazyk značek pro vytváření gramatik ve formátu XML pro rozpoznávání řeči. I když univerzální aplikace pro Windows poskytují alternativy k používání SRGS k vytváření gramatiky rozpoznávání řeči, můžete zjistit, že použití SRGS k vytváření gramatiky vede k nejlepším výsledkům, zejména pro scénáře rozpoznávání řeči, které se týkají zapojení do rozpoznávání řeči.
Gramatiky SRGS poskytují úplnou sadu funkcí, které vám pomůžou navrhovat složité hlasové interakce pro vaše aplikace. Například s gramatikami SRGS můžete:
- Zadejte pořadí, ve kterém se slova a fráze musí vyslovovat, aby bylo možné rozpoznat.
- Zkombinujte slova z více seznamů a frází, která se mají rozpoznat.
- Propojení s dalšími gramatikami
- Přiřaďte alternativnímu slovu nebo frázi váhu, abyste zvýšili nebo snížili pravděpodobnost jeho použití v souladu s rozpoznáváním řeči.
- Zahrnout volitelná slova nebo fráze
- Použijte speciální pravidla, která pomáhají vyfiltrovat nezadaná nebo neočekádaná zadání, jako je náhodná řeč, která neodpovídají gramatikě nebo šumu na pozadí.
- Pomocí sémantiky můžete definovat, co pro vaši aplikaci znamená rozpoznávání řeči.
- Zadejte výslovnost, buď v textu gramatiky, nebo pomocí odkazu na lexikon.
Další informace o prvcích a atributech SRGS naleznete v tématu SRGS Grammar XML Reference . Pokud chcete začít vytvářet gramatiku SRGS, přečtěte si téma Vytvoření základní gramatiky XML.
Mějte na paměti následující body:
- Do kolekce omezení můžete přidat více omezení gramatických souborů.
- Pro gramatické dokumenty založené na JAZYCE XML, které odpovídají pravidlům SRGS, použijte příponu souboru .grxml.
Tento příklad používá gramatiku SRGS definovanou v souboru srgs.grxml (popsané později). Ve vlastnostech souboru je akce balíčku nastavena na Obsah s možností Kopírovat do výstupního adresáře nastavenou na možnost Kopírovat vždy:
private async void Colors_Click(object sender, RoutedEventArgs e)
{
// Create an instance of SpeechRecognizer.
var speechRecognizer = new Windows.Media.SpeechRecognition.SpeechRecognizer();
// Add a grammar file constraint to the recognizer.
var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Colors.grxml"));
var grammarFileConstraint = new Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint(storageFile, "colors");
speechRecognizer.UIOptions.ExampleText = @"Ex. 'blue background', 'green text'";
speechRecognizer.Constraints.Add(grammarFileConstraint);
// Compile the constraint.
await speechRecognizer.CompileConstraintsAsync();
// Start recognition.
Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = await speechRecognizer.RecognizeWithUIAsync();
// Do something with the recognition result.
var messageDialog = new Windows.UI.Popups.MessageDialog(speechRecognitionResult.Text, "Text spoken");
await messageDialog.ShowAsync();
}
Tento soubor SRGS (srgs.grxml) obsahuje sémantické interpretační značky. Tyto značky poskytují mechanismus pro vrácení dat o shodě gramatiky do vaší aplikace. Gramatiky musí odpovídat specifikaci Semantic Interpretation for Speech Recognition (SISR) 1.0 od Světového konsorcia pro web (W3C).
Tady nasloucháme variantám "ano" a "ne".
<grammar xml:lang="en-US"
root="yesOrNo"
version="1.0"
tag-format="semantics/1.0"
xmlns="http://www.w3.org/2001/06/grammar">
<!-- The following rules recognize variants of yes and no. -->
<rule id="yesOrNo">
<one-of>
<item>
<one-of>
<item>yes</item>
<item>yeah</item>
<item>yep</item>
<item>yup</item>
<item>un huh</item>
<item>yay yus</item>
</one-of>
<tag>out="yes";</tag>
</item>
<item>
<one-of>
<item>no</item>
<item>nope</item>
<item>nah</item>
<item>uh uh</item>
</one-of>
<tag>out="no";</tag>
</item>
</one-of>
</rule>
</grammar>
Správa omezení
Po načtení kolekce omezení pro rozpoznávání může vaše aplikace spravovat, která omezení jsou povolena pro operace rozpoznávání, nastavením vlastnosti IsEnabled na true nebo false. Výchozí nastavení je pravdivé.
Obvykle je efektivnější načíst omezení jednou, povolit a zakázat je podle potřeby, a ne načíst, uvolnit a zkompilovat omezení pro každou operaci rozpoznávání. Podle potřeby použijte isEnabled vlastnost.
Omezením počtu restrikcí se snižuje množství dat, která musí rozpoznávač řeči vyhledat a porovnávat se vstupem řeči. To může zlepšit výkon i přesnost rozpoznávání řeči.
Rozhodněte se, která omezení jsou povolená na základě frází, které vaše aplikace může očekávat v kontextu aktuální operace rozpoznávání. Pokud má například aktuální kontext aplikace zobrazovat barvu, pravděpodobně nebudete muset povolit omezení, které rozpoznává názvy zvířat.
Pokud chcete uživatele vyzvat k zadání mluveného slova, použijte vlastnosti SpeechRecognizerUIOptions.AudiblePrompt a SpeechRecognizerUIOptions.ExampleText, které se nastavují pomocí vlastnosti SpeechRecognizer.UIOptions. Příprava uživatelů na to, co mohou během operace rozpoznávání říct, zvyšuje pravděpodobnost, že budou mluvit frázi, která se dá spárovat s aktivním omezením.
Související články
Samples
Windows developer