pocketsphinx android - 为每个不同的口语返回相同的单词

时间:2018-04-27 11:49:27

标签: android speech-recognition pocketsphinx pocketsphinx-android

我已从Github下载了pocketsphinx-android-demo,并为自己的目的做了一些修改。

我为我的应用专用字词创建了一个新的my-en-us.dict(字典)文件,并添加了以下字词

hey HH EY
smarty S M AA R T IY

login L AA G IH N

然后,我创建了一个login.gram(Grammer)文件,代码如下

#JSGF V1.0;

grammar login;

public <item> = login;

然后,我在我的Activity中做了识别器初始化

public static final String KWS_SEARCH = "wakeup";
public static final String LOGIN_SEARCH = "login";

/* Keyword we are looking for to activate menu */
public static final String KEYPHRASE = "hey smarty";

private void setupRecognizer(File assetsDir) throws IOException {
    recognizer = SpeechRecognizerSetup.defaultSetup()
                .setAcousticModel(new File(assetsDir, "en-us-ptm"))
                .setDictionary(new File(assetsDir, "my-en-us.dict"))
                .getRecognizer();
    recognizer.addListener(this);

    recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);

    File loginGrammar = new File(assetsDir, "login.gram");
    recognizer.addGrammarSearch(LOGIN_SEARCH, loginGrammar);
}

其余的代码与pocketsphinx-android-demo相同,用于启动识别器,听取单词等。

启动Android应用程序后,我说&#34;嘿聪明&#34;激活识别&#34;登录&#34;字。当我说&#34;登录&#34;时,它返回&#34;登录&#34;但当我说任何其他的词,如&#34;你好&#34;,&#34;设置&#34;等,它只返回&#34;登录&#34;。

我不知道为什么会这样。我做错了什么,如果是的话,那么只添加特定单词以进行准确识别的正确方法是什么?

另一个问题是,如何检查&#34;部分结果的准确率百分比&#34;或&#34;结果&#34;?

1 个答案:

答案 0 :(得分:2)

大概你改变了onPartialResult()的实现来处理switchSearch(LOGIN_SEARCH)

这个假设不断地“登录”,因为这是你语法中唯一的单词。其他的话(“你好”,“设置”)可能被误解为“登录”,因为该关键字没有与之关联的“kws-threshold”。

对于此用例,您希望使用addKeywordSearch()而不是语法。它与addKeyPhraseSearch()非常相似,但允许您使用多个关键字,每个关键字都有自己的阈值:

File f = new File( context.getCacheDir(), "temp.gram" );
PrintWriter p = new PrintWriter( f );
p.print(
 "hello/1e-10/\n" +
 "login/1e-10/\n" +
 "settings/1e-10/\n"
);
p.close();
recognizer.addKeywordSearch( LOGIN_SEARCH, f );

(我在这里使用了PrintWriter,因为addKeywordSearch()需要一个文件)。

正如我在this answer中提到的,每个关键字的阈值都会有所不同,通常可以通过实验找到。我提供的值是名义上的。

这也应该回答你的第二个问题:你不必检查准确率百分比(我不认为PocketSphinx甚至为关键字提供一个),因为阈值实际上是为你做的。

当然,您的所有关键字也必须出现在词典中。

相关问题