Kinect语音识别只识别一个语法规则

时间:2014-05-11 21:10:47

标签: xml kinect speech

我目前正在使用Microsoft Kinect SDK开发语音识别应用程序。该应用程序的目标是加载包含语法的任何(有效)XML文件,并使用它来处理语音。 由于某些原因我还没有理解,应用程序似乎只能识别属于XML语法文件中第一个规则的所有单词。例如,在以下语法中:

<grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0-literals" xmlns="http://www.w3.org/2001/06/grammar">
<rule id="rootRule">
<one-of>
  <item>
    <tag>PEOPLE</tag>
    <one-of>
      <item> team </item>
      <item> kara </item>
      <item> john </item>
      <item> george </item>
    </one-of>
  </item>
  <item>
    <tag>FOOD</tag>
    <one-of>
      <item> apple </item>
      <item> banana </item>
    </one-of>
  </item>
</one-of>
</rule>
<rule id="anotherRule">
<one-of>
  <item>
    <tag>COMMANDS</tag>
    <one-of>
      <item> close </item>
      <item> shut down </item>
      <item> stop the application </item>
    </one-of>
  </item>
  <item>
    <tag>TOYS</tag>
    <one-of>
      <item> doll </item>
      <item> teddy bear </item>
    </one-of>
  </item>
  </one-of>
 </rule>
</grammar>

应用程序只会识别属于规则ID&#34; rootRule&#34;的单词,忽略规则ID中的所有单词&#34; anotherRule&#34;。为什么会这样?我没有手动处理XML文件,SDK已经这样做了,我只提供文件的位置:

spRecEng.LoadGrammar(new Grammar(filename));

它适用于第一条规则,所以理论上它应适用于以下所有规则?!

我正在根据已有的应用程序开发我的应用程序(两者都有完全相同的问题),其源代码可在以下位置找到:https://dl.dropboxusercontent.com/u/28555145/KinectForWindowsSpeech.rar

1 个答案:

答案 0 :(得分:1)

您在语法元素root="rootRule"中指定了根规则:

 <grammar version="1.0" xml:lang="en-US" root="rootRule" tag-format="semantics/1.0-literals" xmlns="http://www.w3.org/2001/06/grammar">

所以它需要rootRule作为基础。如果您需要替代品,您可以在顶部构建替代品。第二条规则可以通过第一条规则引用并在识别中使用,例如见这里:

http://msdn.microsoft.com/en-us/library/hh362887(v=office.14).aspx

但语法的单一切入点可用于识别。这就是引擎的工作原理。

相关问题