내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 음성 인식 결과 작업

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1만

 

음성 인식 작업이 끝나면 음성 인식기는 인식 결과에 대한 정보가 들어 있는 결과를 반환합니다. 앱은 일반적으로 인식 결과를 사용하여 사용자의 의도와, 옵션 목록 표시, 검색, 사용자의 입력 확인 또는 사용자에게 더 입력하라는 메시지 표시 등 다음에 할 일을 판단합니다.

인식이 성공적이면(사용자의 음성이 활성 상태의 문법과 일치), 인식 결과에는 보통 매우 유용할 수 있는 다음 정보가 포함됩니다.

  • 인식된 구의 텍스트

  • 음성 입력이 문법과 일치한다는 확실성을 나타내는 음성 인식기에 의해 할당된 신뢰도 등급

  • 인식된 구에 대한 의미 - SRGS(Speech Recognition Grammar Specification) 문법에만 해당

이 항목에는 다음 단원이 포함되어 있습니다.

 

인식된 구의 텍스트는 사용자의 음성 입력에 대해 음성 인식기에서 가장 일치하는 문법의 구입니다. 이 텍스트는 사용자가 말한 내용과 정확히 똑같지는 않지만 사용자가 말한 내용에 대해 활성화된 문법에 있는 구 중에 가장 가까운 일치 항목입니다. 의미가 들어 있지 않은 문법에서 앱은 보통 인식된 텍스트를 사용하여 사용자의 의도를 해석하고 응답을 시작합니다.

다음 예제에서는 결과 개체에서 인식된 구의 텍스트에 액세스하는 방법을 보여 줍니다.

// Declare the SpeechRecognizerUI object at the class level.
SpeechRecognizerUI recoWithUI;

// Initialize the SpeechRecognizerUI object.
recoWithUI = new SpeechRecognizerUI();
        
// Handle the button click event.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
  // Display text to prompt the user's input.
  recoWithUI.Settings.ListenText = "Reminder...";

  // Give an example of ideal speech input.
  recoWithUI.Settings.ExampleText = "'Buy milk' or 'Call baby sitter'";
            
  // Load the pre-defined dictation grammar and start recognition.
  SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();

  // Access the text of the recognition result.
  MessageBox.Show("You said: " + recoResult.RecognitionResult.Text + "\nSave this reminder?");
}

비속어 처리

음성 인식기에서 미리 정의된 문법 유형을 사용하고 사용자가 비속어를 말하면 인식된 구 내에 있는 비속어 단어가 음성 인식 결과의 Text 속성에서 <profanity> 태그로 캡슐화됩니다.

SpeechRecognizerUI 클래스를 사용하면 비속어 단어가 표시된 인식 내용 화면에서 개별적으로 검열되지만 실제 인식 결과는 앞에서 설명한 대로 캡슐화된 <profanity> 태그로 반환됩니다.

인식 결과에 반환된 비속어를 적합한 방식으로 처리하는 것은 개발자의 책입니다.

신뢰도 등급은 사용자의 음성을 활성화된 문법에 있는 구에 얼마나 정확히 연결하는지에 대한 음성 인식기의 평가입니다. 백그라운드 간섭, 불분명한 발음 또는 예상치 못한 단어나 단어 순서를 포함한 다양한 이유로 음성 인식기가 음성 입력에 낮은 신뢰도 점수를 할당할 수 있습니다.

음성 인식기가 식별 작업의 결과로 하나 이상의 가능한 인식된 구(대체라고 함)를 반환할 수 있습니다. 대체는 문법에서 온 구입니다. 인식 대체는 다음 방식들 중에서 사용할 수 있습니다.

  • 하나의 대체만 있고, 그 신뢰도 점수가 프리셋 임계값을 충족하거나 초과하면 인식기가 대체를 음성 입력에 연결할 수 있습니다.

  • 하나의 대체만 있고, 그 신뢰도 점수가 프리셋 임계값을 충족하거나 초과하지 못하면 대체는 거부되고 사용자의 음성이 인식되지 않습니다.

  • 프리셋 임계값을 충족하거나 초과하는 음성 입력에 대해 여러 개의 인식 대체가 있고, 한 대체의 신뢰도 점수가 다른 대체들보다 상당히 높으면 인식기가 더 높은 점수를 받는 대체를 음성 입력에 연결합니다.

  • 프리셋 임계값을 충족하거나 초과하는 음성 입력에 대해 여러 개의 인식 대체가 있고, 이 대체들의 신뢰도 점수가 서로 비슷하면 Windows Phone 8 의 음성에 대한 표준 GUI에 확인 내용 화면이 표시됩니다. 확인 내용 화면이 표시되고 사용자가 말한 내용과 가장 비슷하게 일치하는 구를 문법에 최대 네 개까지 들려 줍니다.

인식 작업이 SpeechRecognizerUIRecognizeWithUIAsync() 호출로 시작되고 일치에 로컬 문법만 사용되는 경우 확인 내용 화면이 자동으로 인식 대체 항목과 신뢰도 점수를 처리합니다. 발음이 낮음 또는 중간 신뢰도 점수와 일치하고 음성 인식기가 대체를 반환하는 경우 확인 내용 화면에 점수가 가장 높은 대체들이 최대 네 개까지 표시됩니다.

작성하는 앱은 인식 결과로 반환된 신뢰도 수준을 사용하여 인식 결과에서 작동하는 방식을 결정할 수 있습니다. 예를 들어 앱은 신뢰도 등급이 "높음"이거나 "중간" 이상인 인식 결과만 승인할 수 있습니다. 다음 예제에서는 인식의 신뢰도 수준을 점검하고 반환된 신뢰도 수준에 따라 음성 입력해 다해 다양한 응답을 만듭니다.

// Declare the SpeechRecognizerUI object at the class level.
SpeechRecognizerUI recoWithUI;

// Initialize the SpeechRecognizerUI object.
recoWithUI = new SpeechRecognizerUI();
        
// Handle the button click event.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
  // Display text to prompt the user's input.
  recoWithUI.Settings.ListenText = "Find what?";

  // Give an example of ideal speech input.
  recoWithUI.Settings.ExampleText = " 'Coffee', 'ATMs', 'restaurants' ";

  // Prevents the Heard you say screen from displaying.
  recoWithUI.Settings.ShowConfirmation = false;
            
  // Add the web search grammar to the grammar set.
  recoWithUI.Recognizer.Grammars.AddGrammarFromPredefinedType(
          "webSearch", SpeechPredefinedGrammar.WebSearch);

  // Load the grammar set and start recognition.
  SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();

  // Check the confidence level of the recognition result.
  if ((int)recoResult.RecognitionResult.TextConfidence < (int)SpeechRecognitionConfidence.Medium)
  {
    // If the confidence level of the result is too low, prompt the user to try again and restart recognition.
    MessageBox.Show("Not sure what you said! Try again.");
    await recoWithUI.RecognizeWithUIAsync();
  }
                
  // If the confidence level of the result is good, display a confirmation.
  else
  {
    MessageBox.Show("Searching for " + recoResult.RecognitionResult.Text);
  }
}

의미 체계는 SRGS(Speech Recognition Grammar Specification) 버전 1.0을 준수하는 XML 형식 문법을 만들 때 문법 작성자가 입력하는 정보입니다. 의미 체계는 item 요소의 콘텐츠나 콘텐츠가 정의하는 ruleref 요소 및 구에 의미를 할당합니다. 예를 들어 의미 할당은 인식할 수 있는 도시 이름 목록에서 도시 이름에 공항 코드를 할당할 수도 있습니다. 음성 인식 엔진은 사용자가 문법에 있는 도시 이름을 말하면 도시 이름은 물론 공항 코드까지 반환합니다. 다음은 SRGS 문법에서 발췌한 것으로서, item 요소의 콘텐츠에 문자열 리터럴 형태의 의미 값을 할당하는 방법을 보여 줍니다. item 요소 내의 tag 요소는 의미 값을 정의합니다.

<rule id = "flightCities">
  <one-of>
    <item>
      New York <tag> out = "JFK" </tag>
    </item>
    <item>
      London <tag> out = "LHR" </tag>
    </item>
    <item>
      Beijing <tag> out = "PEK" </tag>
    </item>
    </one-of>
</rule>

ruleref 요소의 의미 할당은 공항 목록에 대한 하나의 규칙 참조에 의해 반환되는 공항 이름이 항공기의 출발지이고, 동일한 공항 목록에 대한 다른 규칙 참조에 의해 반환되는 공항 이름은 항공기의 목적지임을 가리킬 수 있습니다. 다음 예제에서는 flightCities라는 규칙에 대한 첫 번째 규칙 참조 바로 다음에 tag 요소가 옵니다. 이 tag 요소는 flightBooker라는 규칙의 규칙 변수에 대해 LeavingFrom이라는 속성을 만들고, flightCities 규칙의 인식 결과를 LeavingFrom 속성에 할당합니다. flightCities 규칙에 대한 두 번째 참조는 flightCities 규칙의 인식 결과를 GoingTo 속성에 할당합니다.

<grammar mode="voice"
         root="main"
         tag-format="semantics/1.0"
         version="1.0"
         xml:lang="en-US"
         xmlns="http://www.w3.org/2001/06/grammar">

  <rule id="main" scope="public">
    
    <item repeat="0-1"> I want to </item>
    
    <item> fly from </item>

    <item>
      <ruleref uri="#flightCities"/>
      <tag>out.LeavingFrom = rules.latest();</tag>
    </item>

    <item> to </item>

    <item>
      <ruleref uri="#flightCities"/>
      <tag>out.GoingTo = rules.latest();</tag>
    </item>

  </rule>

  <rule id = "flightCities">
    <one-of>
      <item>
        New York <tag> out = "JFK" </tag>
      </item>
      <item>
        London <tag> out = "LHR" </tag>
      </item>
      <item>
        Beijing <tag> out = "PEK" </tag>
      </item>
      </one-of>
  </rule>

</grammar>

SRGS 문법이 올바르게 배포되도록 하려면 솔루션에 이 문법을 추가하고, SRGS 문법의 빌드 작업 속성을 콘텐츠로 설정하고 출력 디렉터리로 복사 속성을 변경된 내용만 복사로 설정합니다.

다음 예제에서는 인식 결과에서 flightBooker 및 flightCities 규칙(공항 코드와 항공기 출발 및 목적지)이 정의하는 의미 값을 검색하는 방법을 보여 줍니다.

// Declare the SpeechRecognizerUI object at the class level.
SpeechRecognizerUI recoWithUI;

// Initialize the SpeechRecognizerUI object.
recoWithUI = new SpeechRecognizerUI();

// Handle the button click event.
private async void Reco1_Click(object sender, RoutedEventArgs e)
{
  // Display text to prompt the user's input.
  recoWithUI.Settings.ListenText = "Fly from where to where?";

  // Give an example of ideal speech input.
  recoWithUI.Settings.ExampleText = "'New York to London', 'London to Beijing', 'Beijing to New York'";

  // Initialize a URI with a path to the SRGS-compliant XML file.
  Uri bookFlights = new Uri("ms-appx:///FlightBooker.grxml", UriKind.Absolute);

  // Add the grammar to the grammar set.
      recoWithUI.Recognizer.Grammars.AddGrammarFromUri("bookFlights", citiesGrammar);

  // Load the grammar set and start recognition.
  SpeechRecognitionUIResult recoResult = await recoWithUI.RecognizeWithUIAsync();

  // Show the semantic information retrieved from the recognition result.
  MessageBox.Show(string.Format("The origin airport is " + recoResult.RecognitionResult.Semantics["LeavingFrom"].Value
        + " \nThe destination airport is " + recoResult.RecognitionResult.Semantics["GoingTo"].Value));
}

SRGS 문법에서의 의미 체계 사용에 대한 자세한 내용은 태그 요소, 문법 규칙 변수 참조, 태그 요소 사용의미 결과 콘텐츠를 참조하세요.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft