2015-06-04 2 views
4

SpeechRecognizer возвращает ERROR_NO_MATCH в onResults, когда устройство находится в автономном режиме, когда оно возвращает частичные результаты в onPartialResults(). В последний раз, когда я играл с SpeechRecognizer, он работал нормально в офлайн-режиме, интересно, нашел ли кто-нибудь решение для него.SpeechRecognizer offline ERROR_NO_MATCH

ответ

4

В качестве работы я использую partialResults, возвращаемый inPartialResults(). В возвращенном комплекте «SpeechRecognizer.RESULTS_RECOGNITION» есть все термины минус последний термин, а «android.speech.extra.UNSTABLE_TEXT» имеет последний отсутствующий признанный термин.

@Override 
public void onPartialResults(Bundle partialResults) { 
    ArrayList<String> data = partialResults.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
    ArrayList<String> unstableData = partialResults.getStringArrayList("android.speech.extra.UNSTABLE_TEXT"); 
    mResult = data.get(0) + unstableData.get(0); 
} 
+1

Можете ли вы показать свой код? – Raptor

1

Для того, чтобы ответить немного более ясно, что вам нужно включить частичные результаты первого и вызвать UNSTABLE_TEXT в определенной моды:

// When creating the intent, set the partial flag to true 
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS,true); 

// When requesting results in onPartialResults(), the UNSTABLE_TEXT parameter to getSTtringArrayList() must be in quotes 
ArrayList<String> unstableMatches = partialResults.getStringArrayList("android.speech.extra.UNSTABLE_TEXT"); 

onPartialResults() вызывается несколько раз now и onError() по-прежнему вызывается с помощью ERROR_NO_MATCH. Я в конечном итоге, используя раствор, похожий на тот, перечисленные здесь: https://github.com/nenick/QuAcc/blob/master/app/src/main/java/de/nenick/quacc/speechrecognition/speech/RecognizerListenerWithOfflineWorkaround.java

В двух словах:

  • отслеживать частичных результатов, и было ли показано ошибка
  • Сброс как в onBeginningOfSpeech()
  • Сохранять частичные результаты в переменной, когда onPartialResults() вызывается
  • Когда вызывается onError(), проверьте, является ли результат ERROR_NO_MATCH и объединяет SpeechRecognizer.RESULTS_RECOGNITION с «android.speech.extra.UNSTABLE_TEXT» в вашу часть ial результатов
  • Звоните по результатам()
+0

Ссылка более недействительна. – Matthew

+0

Я исправил ссылку. вместо приложения – Tima

Смежные вопросы