1

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

1 回答 1

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”这个词,你的运气就会变差,然后你会研究在引用“Paris”这个词时,你的应用程序将如何被使用和说话。

于 2012-10-25T21:57:35.100 回答