我正在修改pocketsphinx android 演示以测试基于关键字列表和相对阈值的连续关键字发现。
当我的 edu.cmu.pocketsphinx.RecognitionListener 实现的 onResult 方法被调用时,这个字符串
hypothesis.getHypstr()
将包含可能匹配的列表。
我在这里读到,要获得每场比赛及其权重,可以这样做:
for (Segment seg : recognizer.getDecoder().seg()) {
System.out.println(seg.getWord() + " " + seg.getProb());
}
但是,我运行的代码永远不会迭代段,例如 SegmentList 是否为空而hypothesis.getHypstr()
显示多个匹配项。
为了重现这种情况,我使用了这个阈值非常低的关键字列表,以便轻松找到更多匹配项:
rainbow /1e-50/
about /1e-50/
blood /1e-50/
energies /1e-50/
我的onPartialResult
方法是什么都不做,而:
public void onEndOfSpeech() {
switchSearch(KWS_SEARCH);
}
public void onResult(Hypothesis hypothesis) {
if (hypothesis != null) {
for (Segment seg : recognizer.getDecoder().seg()) {
//No iteration is done here!!!
Log.d("onResult", seg.getWord() + " " + seg.getProb());
}
String text = hypothesis.getHypstr();
makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show();
}
}
例如,如果我说“energies”,那么hypothesis.getHypstr()
="blood about energies blood" 但没有对 SegmentList 进行迭代:我可以通过在 onResult 方法的开头放置一个断点来查看它。
有什么建议吗?
谢谢