我已经能够在kinect上进行语音识别。然而,即使它们是句子的一部分,我也试图提高识别某些词的效率。
this.speechEngine = new SpeechRecognitionEngine(ri.Id);
var words = new Choices();
words.Add(new SemanticResultValue("emerging", "EMERGING"));
words.Add(new SemanticResultValue("expiriences", "EXPIRIENCES"));
words.Add(new SemanticResultValue("paris", "PARIS"));
words.Add(new SemanticResultValue("atlanta", "ATLANTA"));
words.Add(new SemanticResultValue("creative", "CREATIVE"));
words.Add(new SemanticResultValue("back", "BACK"));
var gb = new GrammarBuilder { Culture = ri.Culture };
gb.AppendWildcard();
gb.Append(words);
var g = new Grammar(gb);
speechEngine.LoadGrammar(g);
speechEngine.SpeechRecognized += SpeechRecognized;
speechEngine.SetInputToAudioStream(
this.audioStream, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));
speechEngine.RecognizeAsync(RecognizeMode.Multiple);
答案 0 :(得分:2)
您应退后一步,查看Micrsoft Speech Platform(版本11是最新版本)。
http://msdn.microsoft.com/en-us/library/dd266409.aspx
文档(包括那些引用的文档)详细介绍了在处理语法定义时的具体情况。其中一个更好的文档涉及语音识别语法规范(SRGS)v1.0以及如何定义“动态”词汇。
http://www.w3.org/TR/speech-grammar/
如果您想要更多动态词汇,我强烈建议您使用外部XML(使用SRGS定义)而不是在代码中定义语法。
例如,以下是我为航空公司创建的部分:
<rule id="showFlight">
<example>Show me Alaska Airlines flight number 2117.</example>
<example>Where is US Airways flight 45.</example>
<item>
<one-of>
<item>show me</item>
<item>where is</item>
</one-of>
</item>
<item>
<ruleref uri="#airline" />
<tag>out.Carrier = rules.airline;</tag>
</item>
flight
<item repeat="0-1">number</item>
<tag>out.Number = "";</tag>
<item repeat="1-">
<ruleref uri="#digit" />
<tag>out.Number += rules.digit;</tag>
</item>
</rule>
...请注意,那里有很多参考资料和许多可选项和备选方案......而且这个很简单!
如果只是在一个句子的中间单词“Paris”,你的运气就会减少,那么你就会研究如何在引用“巴黎”这个词时使用和说出你的应用程序。 / p>