导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

处理 Windows Phone 8 的语音识别结果

2014/6/18

仅适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1

在语音识别操作结束时,语音识别器将返回一个包含识别内容相关信息的结果。应用通常使用识别结果确定用户的意图和下一步操作,例如,显示选项的列表、执行搜索、确认用户的输入或提示用户进行其他输入。

如果识别成功(用户的语音与某个有效语法相匹配),识别结果将包含以下通常对应用十分有用的信息:

  • 已识别短语的文本。

  • 置信度评分由语音识别器进行分配,用于指示语音输入匹配语法的准确度。

  • 已识别短语的语义(仅用于语音识别语法规范 (SRGS) 语法)。

本主题包括以下部分。

已识别短语的文本是指语音识别器内最匹配用户语音输入的语法中的短语。这可能并非用户真正所讲的内容,但它是已启用语法中最匹配用户所讲内容的短语。在不包含语义的语法中,应用通常使用已识别的文本解释用户的意图并启动某个操作进行响应。

下面的示例演示如何访问结果对象中已识别短语的文本。

// 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?");
}

处理不文明用语

如果语音识别器使用预定义语法类型,而用户说出不文明用语,那么在语音识别结果的“文本”属性中,已识别短语中的不文明用语将被用 <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) 版本 1.0 的 XML 格式的语法时输入的信息。语义将意思指定给某个“项”元素或某个 ruleref 元素的内容和它们定义的短语。例如,语义分配可能会将一个机场代码分配给可识别的城市名称列表中某个城市的名称。当用户说出的城市名称匹配该语法,语音识别引擎将返回机场代码以及城市的名称。以下来自 SRGS 语法的摘录演示了如何将语义值以字符串文本形式分配给“项”元素的内容。“项”元素中的“标记”元素定义语义值。

<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 规则的第一个规则引用将直接跟在“标记”元素之后。“标记”元素为名为 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 语法中的语义的更多信息,请参见标记元素引用语法规则变量使用标记元素语义结果内容

显示:
© 2015 Microsoft