Я модифицирую демо-версию pocketsphinx android для тестирования непрерывного определения ключевых слов на основе списка ключевых слов и относительных пороговых значений.Невозможно перебрать SegmentList, если найдено более одного совпадения
Когда метод onResult моей реализации edu.cmu.pocketsphinx.RecognitionListener называется этой строкой hypothesis.getHypstr()
будет содержать список возможных совпадений.
Я прочитал here, что, чтобы получить каждый матч и их веса можно сделать так:
for (Segment seg : recognizer.getDecoder().seg()) {
System.out.println(seg.getWord() + " " + seg.getProb());
}
Однако мой код работает никогда не итерация сегментов, как если SegmentList был пуст, а hypothesis.getHypstr()
показывает более чем одно совпадение.
Чтобы воспроизвести случай я использую этот список ключевых слов с очень низким tresholds так, что больше матчей легко найти:
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();
}
}
Например, если я говорю «энергии», то hypothesis.getHypstr()
= «кровь об энергиях крови», но не выполняется итерация над SegmentList: я вижу это, поставив точку останова в начале метода onResult.
Любое предложение?
Thanks
Скорее всего, он выполняет итерацию, но ничего не печатает. Вам также нужно переместить цикл внутри гипотезы! = Нулевое условие. –
Спасибо @Nikolay, я не ищу выход в стандартном выпуске, но вместо этого я отлаживаю код, и блок никогда не вводится. Вы правы. Я переведу гипотезу! = Null, но в любом случае во время отладки я вижу, что гипотеза не является нулевой, потому что введен следующий блок. – salvolds