사용자 지정 인식 제약 조건 정의Define custom recognition constraints

음성 인식에 대 한 사용자 지정 제약 조건을 정의 하 고 사용 하는 방법에 대해 알아봅니다.Learn how to define and use custom constraints for speech recognition.

중요 한 api: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraintImportant APIs: SpeechRecognitionTopicConstraint, SpeechRecognitionListConstraint, SpeechRecognitionGrammarFileConstraint

음성 인식은 인식할 수 있는 어휘를 정의 하는 하나 이상의 제약 조건이 필요 합니다.Speech recognition requires at least one constraint to define a recognizable vocabulary. 제약 조건을 지정 하지 않으면 유니버설 Windows 앱의 미리 정의 된 받아쓰기 문법이 사용 됩니다.If no constraint is specified, the predefined dictation grammar of Universal Windows apps is used. 음성 인식을 참조 하세요.See Speech recognition.

제약 조건 추가Add constraints

SpeechRecognizer 속성을 사용 하 여 음성 인식기에 제약 조건을 추가 합니다.Use the SpeechRecognizer.Constraints property to add constraints to a speech recognizer.

여기서는 앱 내에서 사용 되는 세 가지 종류의 음성 인식 제약 조건을 다룹니다.Here, we cover the three kinds of speech recognition constraints used from within an app. Cortana 음성 명령 제약 조건의 경우 cortana에서 음성 명령을 사용 하 여 포그라운드 앱 시작을 참조 하세요.(For Cortana voice command constraints, see Launch a foreground app with voice commands in Cortana.)

각 음성 인식기에는 하나의 제약 조건 컬렉션이 있을 수 있습니다.Each speech recognizer can have one constraint collection. 이러한 제약 조건 조합만 유효 합니다.Only these combinations of constraints are valid:

  • 단일 항목 제약 조건 (받아쓰기 또는 웹 검색)A single-topic constraint (dictation or web search)
  • Windows 10 10.0.16299.15 (Windows 10) 작성자 업데이트 () 이상에서는 단일 토픽 제약 조건을 list 제약 조건과 함께 사용할 수 있습니다.For Windows 10 Fall Creators Update (10.0.16299.15) and newer, a single topic constraint can be combined with a list constraint
  • 목록 제약 조건 및/또는 문법 파일 제약 조건의 조합입니다.A combination of list constraints and/or grammar-file constraints.

중요

인식 프로세스를 시작 하기 전에 SpeechRecognizer CompileConstraintsAsync 메서드를 호출 하 여 제약 조건을 컴파일합니다.Call the SpeechRecognizer.CompileConstraintsAsync method to compile the constraints before starting the recognition process.

웹 검색 문법 지정 (SpeechRecognitionTopicConstraint)Specify a web-search grammar (SpeechRecognitionTopicConstraint)

토픽 제약 조건 (받아쓰기 또는 웹 검색 문법)을 음성 인식기의 제약 조건 컬렉션에 추가 해야 합니다.Topic constraints (dictation or web-search grammar) must be added to the constraints collection of a speech recognizer.

참고

SpeechRecognitionTopicConstraint 와 함께 SpeechRecognitionListConstraint 를 사용 하 여 받아쓰기 중에 사용 될 가능성이 높은 도메인 특정 키워드 집합을 제공 함으로써 받아쓰기 정확도를 높일 수 있습니다.You can use a SpeechRecognitionListConstraint in conjunction with a SpeechRecognitionTopicConstraint to increase dictation accuracy by providing a set of domain-specific keywords that you think are likely to be used during dictation.

여기서는 웹 검색 문법을 제약 조건 컬렉션에 추가 합니다.Here, we add a web-search grammar to the constraints collection.

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)Specify a programmatic list constraint (SpeechRecognitionListConstraint)

음성 인식기의 제약 조건 컬렉션에 목록 제약 조건을 추가 해야 합니다.List constraints must be added to the constraints collection of a speech recognizer.

다음 사항을 염두에 두어야 합니다.Keep the following points in mind:

  • 제약 조건 컬렉션에 여러 list 제약 조건을 추가할 수 있습니다.You can add multiple list constraints to a constraints collection.
  • 문자열 값으로 **iiterable < string > ** 을 구현 하는 모든 컬렉션을 사용할 수 있습니다.You can use any collection that implements IIterable<String> for the string values.

여기서는 프로그래밍 방식으로 단어 배열을 목록 제약 조건으로 지정 하 고이를 음성 인식기의 제약 조건 컬렉션에 추가 합니다.Here, we programmatically specify an array of words as a list constraint and add it to the constraints collection of a speech recognizer.

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

SpeechRecognitionGrammarFileConstraint (SRGS 문법 제약 조건) 지정Specify an SRGS grammar constraint (SpeechRecognitionGrammarFileConstraint)

SRGS 문법 파일은 음성 인식기의 제약 조건 컬렉션에 추가 해야 합니다.SRGS grammar files must be added to the constraints collection of a speech recognizer.

SRGS 버전 1.0는 음성 인식에 대 한 XML 형식 문법을 만들기 위한 업계 표준 태그 언어입니다.The SRGS Version 1.0 is the industry-standard markup language for creating XML-format grammars for speech recognition. 유니버설 Windows 앱은 음성 인식 문법을 만드는 데 SRGS를 사용 하는 대신 사용할 수 있는 대안을 제공 하지만 SRGS를 사용 하 여 문법 만들기는 특히 더 많은 음성 인식 시나리오에 적합 한 최상의 결과를 생성 하는 것을 알 수 있습니다.Although Universal Windows apps provide alternatives to using SRGS for creating speech-recognition grammars, you might find that using SRGS to create grammars produces the best results, particularly for more involved speech recognition scenarios.

SRGS 문법은 앱에 대 한 복잡 한 음성 상호 작용을 설계 하는 데 도움이 되는 전체 기능 집합을 제공 합니다.SRGS grammars provide a full set of features to help you architect complex voice interaction for your apps. 예를 들어 SRGS 문법을 사용 하면 다음을 수행할 수 있습니다.For example, with SRGS grammars you can:

  • 단어와 구를 인식 하기 위해 음성 해야 하는 순서를 지정 합니다.Specify the order in which words and phrases must be spoken to be recognized.
  • 여러 목록과 구의 단어를 조합 하 여 인식 합니다.Combine words from multiple lists and phrases to be recognized.
  • 다른 문법에 대 한 링크입니다.Link to other grammars.
  • 대체 단어나 구에 가중치를 할당 하 여 음성 입력을 일치 시키는 데 사용 될 가능성을 늘리거나 줄입니다.Assign a weight to an alternative word or phrase to increase or decrease the likelihood that it will be used to match speech input.
  • 선택적 단어 또는 문구를 포함 합니다.Include optional words or phrases.
  • 문법에 일치 하지 않는 임의 음성 또는 배경 노이즈와 같이 지정 되지 않거나 예기치 않은 입력을 필터링 하는 데 도움이 되는 특수 규칙을 사용 합니다.Use special rules that help filter out unspecified or unanticipated input, such as random speech that doesn't match the grammar, or background noise.
  • 의미 체계를 사용 하 여 앱에 대 한 음성 인식 의미를 정의 합니다.Use semantics to define what speech recognition means to your app.
  • 문법에서 인라인 또는 어휘에 대 한 링크를 통해 발음를 지정 합니다.Specify pronunciations, either inline in a grammar or via a link to a lexicon.

SRGS 요소 및 특성에 대 한 자세한 내용은 SRGS 문법 XML 참조 를 참조 하세요.For more info about SRGS elements and attributes, see the SRGS Grammar XML Reference . SRGS 문법을 만들기 시작 하려면 How To Create a BASIC XML grammar항목을 참조 하세요.To get started creating an SRGS grammar, see How to Create a Basic XML Grammar.

다음 사항을 염두에 두어야 합니다.Keep the following points in mind:

  • 제약 조건 컬렉션에 여러 문법 파일 제약 조건을 추가할 수 있습니다.You can add multiple grammar-file constraints to a constraints collection.
  • SRGS 규칙을 준수 하는 XML 기반 문법 문서에는 grxml 파일 확장명을 사용 합니다.Use the .grxml file extension for XML-based grammar documents that conform to SRGS rules.

이 예제에서는 SRGS 라는 파일에 정의 된 SRGS 문법을 사용 합니다 (뒷부분에서 설명).This example uses an SRGS grammar defined in a file named srgs.grxml (described later). 파일 속성에서 패키지 작업출력 디렉터리로 복사항상 복사로 설정 된 콘텐츠로 설정 됩니다.In the file properties, the Package Action is set to Content with Copy to Output Directory set to Copy always:

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)은 의미 체계 해석 태그를 포함 합니다.This SRGS file (srgs.grxml) includes semantic interpretation tags. 이러한 태그는 응용 프로그램에 문법을 일치 하는 데이터를 반환 하는 메커니즘을 제공 합니다.These tags provide a mechanism for returning grammar match data to your app. 문법은 SISR (음성 인식) 1.0 사양에 대해 W3C (World Wide Web 컨소시엄) 의미 체계 해석을 준수 해야 합니다.Grammars must conform to the World Wide Web Consortium (W3C) Semantic Interpretation for Speech Recognition (SISR) 1.0 specification.

여기서는 "yes" 및 "no"의 변형을 수신 대기 합니다.Here, we listen for variants of "yes" and "no".

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

제약 조건 관리Manage constraints

인식을 위해 제약 조건 컬렉션을 로드 한 후에는 제약 조건의 IsEnabled 속성을 true 또는 false로 설정 하 여 인식 작업에 사용할 제약 조건을 앱에서 관리할 수 있습니다.After a constraint collection is loaded for recognition, your app can manage which constraints are enabled for recognition operations by setting the IsEnabled property of a constraint to true or false. 기본 설정은 true입니다.The default setting is true.

일반적으로 제약 조건을 한 번 로드 하 고 각 인식 작업에 대 한 로드, 언로드 및 컴파일 제약 조건을 사용 하지 않고 필요에 따라 사용 하지 않도록 설정 하는 것이 더 효율적입니다.It's usually more efficient to load constraints once, enabling and disabling them as needed, rather than to load, unload, and compile constraints for each recognition operation. 필요에 따라 IsEnabled 속성을 사용 합니다.Use the IsEnabled property, as required.

음성 인식기가 음성 입력에 대해 검색 하 고 일치 해야 하는 데이터의 양을 제한 하기 위해 제약 조건 수를 제한 합니다.Restricting the number of constraints serves to limit the amount of data that the speech recognizer needs to search and match against the speech input. 그러면 음성 인식의 성능과 정확도를 모두 높일 수 있습니다.This can improve both the performance and the accuracy of speech recognition.

앱이 현재 인식 작업의 컨텍스트에서 사용할 수 있는 구에 따라 사용할 제약 조건을 결정 합니다.Decide which constraints are enabled based on the phrases that your app can expect in the context of the current recognition operation. 예를 들어 현재 응용 프로그램 컨텍스트가 색을 표시 하는 경우 동물의 이름을 인식 하는 제약 조건을 설정할 필요가 없을 것입니다.For example, if the current app context is to display a color, you probably don't need to enable a constraint that recognizes the names of animals.

사용자에 게 말할 수 있는 항목을 묻는 메시지를 표시 하려면 SpeechRecognizer 속성을 사용 하 여 설정 된 AudiblePrompt 및 SpeechRecognizerUIOptions 속성을 사용 SpeechRecognizerUIOptions .To prompt the user for what can be spoken, use the SpeechRecognizerUIOptions.AudiblePrompt and SpeechRecognizerUIOptions.ExampleText properties, which are set by means of the SpeechRecognizer.UIOptions property. 사용자가 인식 작업 중에 말할 수 있는 사항을 준비 하면 활성 제약 조건에 일치 시킬 수 있는 구를 말할 가능성이 높아집니다.Preparing users for what they can say during the recognition operation increases the likelihood that they will speak a phrase that can be matched to an active constraint.

샘플Samples