我希望我的 Android 应用程序能够进行连续的关键字发现。我正在修改 pocketsphinx android 演示来测试我是如何做到的。我将这个列表写在一个名为 en-keywords.txt 的文件中,从cmudict-en-us.dict 中挑选单词:
rainbow /1e-50/
about /1e-50/
blood /1e-50/
energies /1e-50/
在 setupRecognizer 方法中,我删除了每个搜索并仅将这个关键字搜索添加到识别器中:
File keywords= new File(assetsDir, "en-keywords.txt");
recognizer.addKeywordSearch(KWS_SEARCH, keywords);
最后我像这样修改了onPartialResult:
public void onPartialResult(Hypothesis hypothesis) {
if (hypothesis == null)
return;
String text = hypothesis.getHypstr();
switchSearch(KWS_SEARCH);
}
因此,每次找到具有非空假设的部分结果时,都会调用 onResult 并重新开始搜索。
我在运行的应用程序中看到的不是我所期望的:
- 如果我说的内容与我正在寻找的内容非常不同,那么 onPartialResult 每次说话时都有一个不为零的假设;
- 如果我在PartialResult 上说“嘿”,hypotesis 通常由多个单词组成;最坏的情况我说“嘿”并且方法理解“关于能量血液的彩虹”
- 然后调用 onResult 方法,但它打印的 Toast 文本与 onPartialResult 找到的最后一个文本不同;就像它是以一些不平凡的顺序完成的字符串的连接。
我尝试使用不同的关键字阈值,但我没有找到自己的方式......可能我错过了一些基本概念或一些配置参数......有人可以帮助我吗?