如何使用System.Speech将确切的短语识别为命令

时间:2012-08-09 03:01:22

标签: system.speech.recognition

例如,假设我想要一个命令“center”,点击屏幕中央的鼠标。琐碎的例子,但我对它的语法方面更感兴趣。

如果我只想匹配“中心”怎么办?

所以,如果我暂停,说“中心”,然后暂停它就是一场比赛。

但如果我说“我在房间的中心”,我就不会得到匹配。

以下代码似乎与单词“center”相匹配,无论它在哪个部分使用:

            Choices center = new Choices( new string[] { "center" } );
            SemanticResultKey centerKeys = new SemanticResultKey( "center", center );

            GrammarBuilder centerGrammarBuilder = new GrammarBuilder();
            centerGrammarBuilder.Append( centerKeys );

           speechRecognitionEngine.UnloadAllGrammars();

           speechRecognitionEngine.LoadGrammar(new Grammar(centerGrammarBuilder));

1 个答案:

答案 0 :(得分:0)

语音引擎通常做得不错,确保他们不会识别句子中间的语法词。但并非总是如此,如果你发现其中一个边缘情况,引擎会识别句子中的句子,我可以推荐两件事来帮助。

  • 向您的语法添加垃圾规则,然后忽略包含垃圾规则的任何识别事件。通常,这不推荐(但可以工作),因为人们很少使用垃圾规则在模型构建期间进行权衡并且性能受损。您也可能会注意到它在某些语言模型中效果更好,而不是其他语言模型。同样,这是模型构建和调整的结果。 (在grxml中,它看起来像这样< ruleref special =“GARBAGE”/>) http://msdn.microsoft.com/en-us/library/system.speech.recognition.srgsgrammar.srgsruleref.garbage(v=VS.85).aspx
  • 检查并调整结果单词的置信度。即使它识别出中期句子,你也应该对该短语的置信度得分低得多。不幸的是,这种调整有时需要大量音频才能正确。