我正在尝试完全按照该线程的作者所做/解决的事情:
他说语法文件应该是这样的,以避免检测到不在语法文件中的单词:
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/