Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dowiedz się, jak definiować i używać ograniczeń niestandardowych do rozpoznawania mowy.
Ważne interfejsy API: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint
Rozpoznawanie mowy wymaga co najmniej jednego ograniczenia do zdefiniowania rozpoznawalnego słownictwa. Jeśli nie określono żadnego ograniczenia, zostanie użyta wstępnie zdefiniowana gramatyka dyktowania aplikacji uniwersalnych systemu Windows. Zobacz Rozpoznawanie mowy.
Dodawanie ograniczeń
Użyj właściwości SpeechRecognizer.Constraints , aby dodać ograniczenia do rozpoznawania mowy.
W tym miejscu omówiono trzy rodzaje ograniczeń rozpoznawania mowy używanych z poziomu aplikacji. (Aby uzyskać ograniczenia poleceń głosowych Cortany, zobacz Aktywowanie aplikacji pierwszego planu za pomocą poleceń głosowych za pośrednictwem Cortany).
- SpeechRecognitionTopicConstraint — ograniczenie oparte na wstępnie zdefiniowanej gramatyce (dyktowaniu lub wyszukiwaniu w Internecie).
- SpeechRecognitionListConstraint — ograniczenie oparte na liście słów lub fraz.
- SpeechRecognitionGrammarFileConstraint — ograniczenie zdefiniowane w pliku specyfikacji gramatyki rozpoznawania mowy (SRGS).
Każdy rozpoznawacz mowy może mieć jeden zestaw ograniczeń. Prawidłowe są tylko następujące kombinacje ograniczeń:
- Ograniczenie pojedynczego tematu (dyktowanie lub wyszukiwanie w Internecie)
- W przypadku aktualizacji Windows 10 Fall Creators Update (10.0.16299.15) i nowszych ograniczenie jednego tematu można połączyć z ograniczeniem listy
- Kombinacja ograniczeń listy i/lub ograniczeń pliku gramatycznego.
Ważne
Wywołaj metodę SpeechRecognizer.CompileConstraintsAsync, aby skompilować ograniczenia przed rozpoczęciem procesu rozpoznawania.
Określ gramatykę wyszukiwania internetowego (SpeechRecognitionTopicConstraint)
Ograniczenia tematu (dyktowanie lub gramatyka wyszukiwania w Internecie) muszą zostać dodane do kolekcji ograniczeń rozpoznawania mowy.
Uwaga / Notatka
Możesz użyć obiektu SpeechRecognitionListConstraint w połączeniu z elementem SpeechRecognitionTopicConstraint , aby zwiększyć dokładność dyktowania, podając zestaw słów kluczowych specyficznych dla domeny, które prawdopodobnie będą używane podczas dyktowania.
W tym miejscu dodajemy gramatykę wyszukiwania w Internecie do kolekcji ograniczeń.
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();
}
Definiowanie ograniczenia listy programowej (SpeechRecognitionListConstraint)
Ograniczenia listy należy dodać do kolekcji ograniczeń rozpoznawania mowy.
Należy pamiętać o następujących kwestiach:
- Możesz dodać wiele ograniczeń listy do zbioru ograniczeń.
- Możesz użyć dowolnej kolekcji, która implementuje IIterable<String> dla wartości ciągowych.
W tym miejscu programowo określamy tablicę wyrazów jako ograniczenie listy i dodajemy ją do kolekcji ograniczeń rozpoznawania mowy.
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();
}
Określ ograniczenie gramatyki SRGS (SpeechRecognitionGrammarFileConstraint)
Pliki gramatyczne SRGS należy dodać do kolekcji ograniczeń rozpoznawania mowy.
SRGS w wersji 1.0 to standardowy język znaczników branżowych do tworzenia gramatyki w formacie XML na potrzeby rozpoznawania mowy. Mimo że aplikacje uniwersalne systemu Windows udostępniają alternatywy dla używania SRGS do tworzenia gramatyki rozpoznawania mowy, może się okazać, że tworzenie gramatyki przy użyciu biblioteki SRGS daje najlepsze wyniki, szczególnie w przypadku bardziej zaangażowanych scenariuszy rozpoznawania mowy.
Gramatyki SRGS zapewniają pełny zestaw funkcji, które ułatwiają tworzenie złożonych interakcji głosowych dla aplikacji. Na przykład w przypadku gramatyki SRGS można wykonywać następujące czynności:
- Określ kolejność rozpoznawania wyrazów i fraz.
- Połącz wyrazy z wielu list i fraz, które mają być rozpoznawane.
- Łącze do innych gramatyk.
- Przypisz wagę do alternatywnego słowa lub frazy, aby zwiększyć lub zmniejszyć prawdopodobieństwo, że będzie on używany do dopasowania danych wejściowych mowy.
- Dołącz opcjonalne wyrazy lub frazy.
- Użyj specjalnych reguł, które pomagają odfiltrować nieokreślone lub nieprzewidziane dane wejściowe, takie jak losowa mowa, która nie jest zgodna z gramatyką lub szumem tła.
- Użyj semantyki, aby zdefiniować znaczenie rozpoznawania mowy w aplikacji.
- Określ wymowę w tekście w gramatyce lub za pośrednictwem linku do leksykonu.
Aby uzyskać więcej informacji o elementach i atrybutach SRGS, zobacz dokumentację XML gramatyki SRGS . Aby rozpocząć tworzenie gramatyki SRGS, zobacz How to Create a Basic XML Grammar (Jak utworzyć podstawową gramatykę XML).
Należy pamiętać o następujących kwestiach:
- Do kolekcji ograniczeń można dodać wiele ograniczeń plików gramatycznych.
- Użyj rozszerzenia pliku grxml dla dokumentów gramatycznych opartych na formacie XML, które są zgodne z regułami SRGS.
W tym przykładzie użyto gramatyki SRGS zdefiniowanej w pliku o nazwie srgs.grxml (opisanej później). We właściwościach pliku akcja Pakietu jest ustawiona na Zawartość z kopiowaniem do katalogu wyjściowego ustawionym na Kopiuj zawsze:
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();
}
Ten plik SRGS (srgs.grxml) zawiera tagi interpretacji semantycznej. Znaczniki te udostępniają mechanizm zwracania danych dotyczących dopasowania gramatycznego do aplikacji. Gramatyka musi być zgodna ze specyfikacją World Wide Web Consortium (W3C) Interpretacja Semantyczna dla Rozpoznawania Mowy (SISR) 1.0.
Tutaj słuchamy wariantów "tak" i "nie".
<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>
Zarządzanie ograniczeniami
Po załadowaniu kolekcji ograniczeń do rozpoznawania aplikacja może zarządzać ograniczeniami, które są włączone dla operacji rozpoznawania, ustawiając właściwość IsEnabled ograniczenia na wartość true lub false. Ustawienie domyślne ma wartość true.
Zwykle bardziej wydajne jest ładowanie ograniczeń raz, włączanie i wyłączanie ich w razie potrzeby, a nie ładowanie, zwalnianie i kompilowanie ograniczeń dla każdej operacji rozpoznawania. Użyj właściwości IsEnabled zgodnie z potrzebami.
Ograniczenie liczby ograniczeń służy do ograniczenia ilości danych, które aparat rozpoznawania mowy musi przeszukiwać i dopasowywać względem danych wejściowych mowy. Może to poprawić zarówno wydajność, jak i dokładność rozpoznawania mowy.
Zdecyduj, które ograniczenia są włączone na podstawie fraz, których aplikacja może oczekiwać w kontekście bieżącej operacji rozpoznawania. Na przykład, jeśli bieżący kontekst aplikacji dotyczy wyświetlania koloru, prawdopodobnie nie musisz włączać ograniczeń, które rozpoznają nazwy zwierząt.
Aby monitować użytkownika o to, co można powiedzieć, użyj właściwości SpeechRecognizerUIOptions.AudiblePrompt i SpeechRecognizerUIOptions.ExampleText , które są ustawiane za pomocą właściwości SpeechRecognizer.UIOptions . Przygotowanie użytkowników do tego, co mogą powiedzieć podczas operacji rozpoznawania, zwiększa prawdopodobieństwo, że będą mówić frazę, która może być dopasowana do aktywnego ograniczenia.
Powiązane artykuły
Samples
Windows developer