キーワード リストと相対的なしきい値に基づいて継続的なキーワード スポッティングをテストするように、 Pocketphinx Android デモを変更しています。
edu.cmu.pocketsphinx.RecognitionListener の実装の onResult メソッドが呼び出されると、この文字列
hypothesis.getHypstr()
には可能な一致のリストが含まれます。
ここで、すべての一致とその重みを取得するには、次のようにすることが可能であることを読みました。
for (Segment seg : recognizer.getDecoder().seg()) {
System.out.println(seg.getWord() + " " + seg.getProb());
}
hypothesis.getHypstr()
ただし、複数の一致を示している間に SegmentList が空の場合のように、実行中のコードがセグメントを反復処理することはありません。
ケースを再現するために、より多くの一致が簡単に見つかるように、非常に低いしきい値でこのキーワード リストを使用しています。
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();
}
}
たとえば、"energys" then hypothesis.getHypstr()
="blood about energys blood" と言った場合でも、SegmentList に対する反復は行われません。onResult メソッドの先頭にブレークポイントを配置することで確認できます。
なにか提案を?
ありがとう