改善kinect语音识别

时间:2012-10-25 19:24:12

标签: speech-recognition kinect kinect-sdk

我已经能够在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);

1 个答案:

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