Поделиться через


Определение ограничений пользовательского распознавания

Узнайте, как определить и использовать пользовательские ограничения для распознавания речи.

Важные API: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

Распознавание речи требует по крайней мере одного ограничения для определения распознаваемого словаря. Если ограничение не указано, используется предопределенная грамматика диктовки универсальных приложений Windows. См. распознавание речи.

Добавление ограничений

Используйте свойство SpeechRecognizer.Constraints, чтобы добавить ограничения в распознаватель речи.

Здесь мы рассмотрим три типа ограничений распознавания речи, используемых в приложении. (Ограничения голосовой команды Кортаны см. в разделе .Активация приложения переднего плана с помощью голосовых команд с помощью Кортаны.)

Каждый распознаватель речи может иметь одну коллекцию ограничений. Допустимы только эти сочетания ограничений:

  • Ограничение с одним разделом (диктовка или поиск в Интернете)
  • Для Windows 10 Fall Creators Update (10.0.16299.15) и более поздней версии ограничение одного раздела можно объединить с ограничением списка.
  • Сочетание ограничений списка и /или ограничений грамматического файла.

Внимание

Вызовите метод SpeechRecognizer.CompileConstraintsAsync, чтобы скомпилировать ограничения перед началом процесса распознавания.

Укажите грамматику поиска в Интернете (SpeechRecognitionTopicConstraint)

Ограничения раздела (диктовка или грамматика веб-поиска) необходимо добавить в коллекцию ограничений распознавателя речи.

Примечание.

Вы можете использовать SpeechRecognitionListConstraint в сочетании с SpeechRecognitionTopicConstraint для повышения точности диктовки, предоставив набор ключевых слов, относящихся к домену, которые, по вашему мнению, будут использоваться во время диктовки.

Здесь мы добавим грамматику веб-поиска в коллекцию ограничений.

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();
}

Укажите ограничение программного списка (SpeechRecognitionListConstraint)

Ограничения списка необходимо добавить в коллекцию ограничений распознавателя речи.

Имейте в виду следующие моменты:

  • Можно добавить несколько ограничений списка в коллекцию ограничений.
  • Вы можете использовать любую коллекцию, реализующую строку IIterable<для> строковых значений.

Здесь мы программным образом указываем массив слов как ограничение списка и добавляем его в коллекцию ограничений распознавателя речи.

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();
}

Укажите ограничение грамматики SRGS (SpeechRecognitionGrammarFileConstraint)

Файлы грамматики SRGS необходимо добавить в коллекцию ограничений распознавателя речи.

SRGS версии 1.0 — это стандартный для отрасли язык разметки для создания грамматик формата XML для распознавания речи. Хотя универсальные приложения Windows предоставляют альтернативные варианты использования SRGS для создания грамматик распознавания речи, вы можете найти, что использование SRGS для создания грамматики дает лучшие результаты, особенно для более задействованных сценариев распознавания речи.

Грамматики SRGS предоставляют полный набор функций, которые помогут вам разработать сложное взаимодействие с голосовой связью для приложений. Например, с грамматиками SRGS можно:

  • Укажите порядок, в котором должны быть распознаны слова и фразы.
  • Объединение слов из нескольких списков и фраз для распознавания.
  • Ссылка на другие грамматики.
  • Назначьте вес альтернативному слову или фразе, чтобы увеличить или уменьшить вероятность того, что она будет использоваться для сопоставления входных данных речи.
  • Включите необязательные слова или фразы.
  • Используйте специальные правила, которые помогают отфильтровать непреднамеренные или непреднамеренные входные данные, такие как случайная речь, которая не соответствует грамматике или фоновому шуму.
  • Используйте семантику для определения того, что означает распознавание речи для приложения.
  • Укажите произношение, встроенное в грамматике или через ссылку на лексикон.

Дополнительные сведения о элементах и атрибутах SRGS см. в XML-справочнике по грамматике SRGS. Чтобы приступить к созданию грамматики SRGS, см. инструкции по созданию базовой грамматики XML.

Имейте в виду следующие моменты:

  • В коллекцию ограничений можно добавить несколько ограничений грамматики.
  • Используйте расширение GRXML-файла для документов грамматики на основе XML, соответствующих правилам SRGS.

В этом примере используется грамматика SRGS, определенная в файле srgs.grxml (описано далее). В свойствах файла действие пакета имеет значение Content with Copy to Output Directory , чтобы всегда копировать:

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();
}

Этот файл SRGS (srgs.grxml) включает теги семантической интерпретации. Эти теги предоставляют механизм возврата данных о соответствии грамматики приложению. Грамматики должны соответствовать спецификации Семантического толкования W3C (W3C) для распознавания речи (SISR) 1.0 .

Здесь мы слушаем варианты "да" и "нет".

<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>

Управление ограничениями

После загрузки коллекции ограничений для распознавания приложение может управлять тем, какие ограничения включены для операций распознавания, задав свойству IsEnabled ограничения значение true или false. Значение по умолчанию — true.

Обычно более эффективно загружать ограничения один раз, включать и отключать их по мере необходимости, а не загружать, выгружать и компилировать ограничения для каждой операции распознавания. При необходимости используйте свойство IsEnabled.

Ограничение количества ограничений служит для ограничения объема данных, которые распознаватель речи должен выполнять поиск и сопоставление с входными данными речи. Это может повысить производительность и точность распознавания речи.

Определите, какие ограничения включены на основе фраз, которые приложение может ожидать в контексте текущей операции распознавания. Например, если текущий контекст приложения должен отображать цвет, возможно, не нужно включить ограничение, которое распознает имена животных.

Чтобы побудить пользователя к тому, что можно говорить, используйте свойства SpeechRecognizerUIOptions.AudiblePrompt и SpeechRecognizerUIOptions.ExampleText, которые задаются с помощью свойства SpeechRecognizer.UIOptions. Подготовка пользователей к тому, что они могут сказать во время операции распознавания, повышает вероятность того, что они будут говорить фразу, которая может соответствовать активному ограничению.

Примеры