1

我正在尝试完全按照该线程的作者所做/解决的事情:

使用 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/
4

0 回答 0