В настоящее время я разрабатываю приложение распознавания речи с использованием 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>
Приложение будет распознавать только слова, принадлежащие идентификатору правила «rootRule», игнорируя все слова в пределах идентификатора правила «anotherRule». Почему это происходит? Я не обрабатываю файл XML вручную, SDK уже делает это, я только указываю местоположение файла, используя:
spRecEng.LoadGrammar(new Grammar(filename));
И он отлично работает для первого правила, поэтому теоретически он должен работать для всех следующих?!
Я разрабатываю свое приложение на основе уже существующего (оба имеют одну и ту же проблему), и его исходный код можно найти по адресу: https://dl.dropboxusercontent.com/u/28555145/KinectForWindowsSpeech.rar