hypothesis.getHypstr()
всегда одно значение, даже после того, как я меняю ключевое слово!onPartialResult всегда одно значение, даже после того, как я изменил ключевое слово?
Я использую pocketsphinx
для распознавания речи, и я позволяю пользователю изменять то, что нужно слушать. Это значение сохраняется в моих общих настройках. Моя проблема заключается в том, что hypothesis.getHypstr()
вызывается только при разговоре предыдущего ключевого слова.
Например:
Если установлено значение по умолчанию для ключевых слов (апельсинов и радугу), то распознавание работает отлично. Но, если пользователь меняет его на «привет компьютер», тогда метод onPartialResult
по-прежнему вызывается только тогда, когда пользователь говорит привет, и hypothesis.getHypstr()
все еще апельсины и радуги.
OnCreate:
try {
Assets assets = new Assets(MyService.this);
File assetDir = assets.syncAssets();
setupRecognizer(assetDir);
Log.v(TAG, "SET UP DIRECTORIES STARTING LISTENING!");
mSpeechRecognizer.startListening("usersKeyword");
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, e.toString());
}
setupRecognizer()
public void setupRecognizer(File sphinxDir) {
try {
mSpeechRecognizer = defaultSetup()
.setAcousticModel(new File(sphinxDir, "en-us-ptm"))
.setDictionary(new File(sphinxDir, "cmudict-en-us.dict"))
.setBoolean("-allphone_ci", true)
.setKeywordThreshold(1e-40f)
.getRecognizer();
} catch (IOException e) {
e.printStackTrace();
}
mSpeechRecognizer.addListener(this);
mSpeechRecognizer.addKeyphraseSearch("usersKeyword", keyword.getString("keyword", "oranges and rainbows"));
}
onPartialResult:
@Override
public void onPartialResult(Hypothesis hypothesis) {
if (hypothesis == null) { //no one spoke
return;
}
String text = hypothesis.getHypstr();
Log.v(TAG, "TEXT: " + text + "hypothesis.getHypstr: " + hypothesis.getHypstr());
if (text.equals(keyword.getString("keyword", "oranges and rainbows"))) { //Only happens when text is oranges and rainbows, even after changing preference value!!!
Log.v(TAG, "Heard user keyword!");
mSpeechRecognizer.cancel();
mSpeechRecognizer.startListening("usersKeyword");
}
}
Почему hypothesis.getHypstr()
всегда только одно значение, даже после того, как я изменяю значение addKeyphraseSearch
?
Спасибо,
Ruchir
EDIT: Я на самом деле остановить и запустить службу каждый раз, когда пользователь изменяет свой вклад, и поэтому onCreate()
называется каждый раз, когда пользователь изменяет свои данные.
ПОЛНЫЙ КОД:
https://gist.github.com/anonymous/47efc9c1ca08d808e0be
Вам нужно показать полный код, а не только его части. –
@NikolayShmyrev Проблема заключается в том, что 'hypology.getHypstr();' всегда «апельсины и радуги», даже после того, как я изменил ключевое слово users. –
@NikolayShmyrev Возможно, мне нужно удалить все файлы активов до их создания?Есть что-то вроде метода 'assets.deleteSync'? –