【问题标题】:pocketsphinx android - returning same word for every different spoken wordpocketsphinx android - 为每个不同的口语返回相同的单词
【发布时间】:2018-04-27 11:49:27
【问题描述】:

我已经从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 应用后,我说“hey smarty”以激活对“login”字样的识别。当我说“login”时,它会返回“login”,但是当我说“hello”、“settings”等任何其他词时,它只会返回“login”。

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

另一个问题是,如何检查“部分结果”或“结果”的准确率?

【问题讨论】:

    标签: android speech-recognition pocketsphinx pocketsphinx-android


    【解决方案1】:

    大概您更改了onPartialResult() 的实现以处理switchSearch(LOGIN_SEARCH)

    假设是不断地“登录”,因为这是你语法中唯一的词。其他词(“hello”、“settings”)可能被误解为“login”,因为该关键字没有与之关联的“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 甚至没有为关键字提供准确度百分比),因为阈值有效地为您做到这一点。

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

    【讨论】:

    • 谢谢!它适用于单个单词。如何修改单个单词(单词 = 设置)和多个单词(单词 = 打开设置)的文件或代码以进行识别。目前,它只支持一个单词搜索。有什么建议吗?
    • @MA13 关键字不必是单个单词;它们可以是短语:"oh mighty computer/1e-40/\n"
    • 再次感谢!是的,短语也有效。我需要你对德语单词语音学的建议。我正在为德国人开发一个应用程序,他们的口音不同,所以我需要在字典文件中添加德语语音吗? pocketsphinx 是否适用于德语语音?有没有办法像这个图书馆目前正在做的那样使用英文字母来写德语语音?
    • @MA13 不客气,我的朋友,但这听起来像是一个新问题。另外,我也不知道答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多