我试图完成这个线程的作者所做的/解决的事情:
Recognizing multiple keywords using PocketSphinx
他说语法文件应该是这样的,以避免检测不在语法文件中的单词:
up /1e-1/
down /1e-1/
left /1e-1/
right /1e-1/
forwards /1e-1/
backwards /1e-1/
....但如果它完全是这样的话它就不起作用了。我可以这样做:
#JSGF V1.0;
grammar digits;
public <digits> = /1e-1/ left |
/1e-1/ right;
但这并没有改变任何东西,/ 1.0 /也没有改变任何东西。它一直在检测左/右的假词。
将阈值放在每个单词的右侧(如作者)会导致应用崩溃。
有人可以帮我吗?
更新
我通过在函数setupRecognizer(File assetsDir)中使用addKeywordSearch解决了这个问题。在我的情况下,它仍然像在PocketSphinx-Demo addGrammarSearch中。为了完整性(就像链接问题的作者的setupRecognizer函数一样):
private void setupRecognizer(File assetsDir)
{
File modelsDir = new File(assetsDir, "models");
recognizer = defaultSetup().setAcousticModel(new File(modelsDir, "hmm/en-us-semi"))
.setDictionary(new File(modelsDir, "dict/cmu07a.dic"))
.setRawLogDir(assetsDir).setKeywordThreshold(1e-20f)
.getRecognizer();
recognizer.addListener(this);
File digitsGrammar = new File(modelsDir, "grammar/digits.gram");
recognizer.addKeywordSearch(DIGITS_SEARCH, digitsGrammar);
}
如果语法文件看起来(也像作者发布的那样)完全,那么它会起作用:
up /1e-1/
down /1e-1/
left /1e-1/
right /1e-1/
forwards /1e-1/
backwards /1e-1/