【发布时间】:2017-01-08 18:25:49
【问题描述】:
我正在修改 pocketsphinx android 演示,以测试基于关键字列表和相关阈值的连续关键字发现。
当我的edu.cmu.pocketsphinx.RecognitionListener实现的onResult方法被调用这个字符串
hypothesis.getHypstr() 将包含可能匹配的列表。
我读到here 说要获得每场比赛及其权重,可以这样做:
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 方法的开头放置一个断点来查看它。
有什么建议吗?
谢谢
【问题讨论】:
-
它很可能会迭代,但什么也不打印。您还需要将循环移动到 Hypothesis != null 条件中。
-
感谢@Nikolay,我不是在查看标准输出中的输出,而是在调试代码并且从未输入该块。你是对的,我将移动假设!= null 条件,但无论如何在调试时我可以看到假设不为 null,因为输入了以下块
标签: android speech-recognition cmusphinx pocketsphinx pocketsphinx-android