Как вы используете речь в реальном времени Android для текста?
В андроиде 4.1 вы можете преобразовать текст в режиме реального времени в текстовое преобразование, используя опцию микрофона на клавиатуре .
Я смотрел документы для android.speech, пытаясь выяснить, как реализовать речь в реальном времени для текста для приложения, Однако единственным вариантом, который облегчил бы это, является опция "EXTRA_PARTIAL_RESULTS" (которую сервер игнорирует каждый раз, когда я пытаюсь его использовать).
Код:
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "VoiceIME");
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
intent.putExtra(RecognizerIntent.EXTRA_SPEECH_INPUT_MINIMUM_LENGTH_MILLIS, 3000L);
mSpeaker.startListening(intent);
Никогда не возвращает частичные результаты.
Я знаю, что это возможно, так как версия для клавиатуры делает это последовательно. Кто-нибудь знает как?
Ответы
Ответ 1
Перед вызовом startListening
вам необходимо зарегистрировать onPartialResults
-callback. Следует отметить две важные вещи:
- структура пакета, с которым вызывается
onPartialResults
, не определяется API Android;
- не каждый распознаватель речи поддерживает этот обратный вызов.
Таким образом, ваш код будет специфичным для Google Voice Search.
mSpeaker.setRecognitionListener(new RecognitionListener() {
...
public void onPartialResults(Bundle partialResults) {
// WARNING: The following is specific to Google Voice Search
String[] results =
partialResults.getStringArray("com.google.android.voicesearch.UNSUPPORTED_PARTIAL_RESULTS");
updateTheUi(results);
}
...
}
Чтобы увидеть этот обратный вызов в действии в приложении с открытым исходным кодом, см. Babble:
Ответ 2
если вы хотите, чтобы частичные результаты в режиме реального времени отображались во время включения микрофона, а говорящий говорящий, вы можете отказаться от подхода, используя распознавание и распознавание dropService в пользу простого текстового блока Android в сочетании с предварительным выбором значок "mic", как вы можете сделать в приложении для заметок андроида "примечания"...
см../samples/android-16/NotePad/tests/src/com/example/android/notepad
Эта комбо обеспечивает такую функцию, как u, в режиме реального времени, результаты частичного текстового речевого вывода, когда они возвращаются с серверного "voiceSearch", который каким-то образом отличается от "распознавателя" относительно "частичного" обратного вызова.
В многочисленных комментариях указано, что распознавательIntent не запускает обратный вызов 'onPartialResults'. По какой-то причине андроид 4.2, похоже, не поддерживает "непрерывный" режим речевого воспроизведения, который отлично работает с использованием javascript. Мои тесты интерфейса "RecognitionListener" в 4.2 показывают сотни обратных вызовов для onRmsChanged на событиях томов, но нулевую активность в событии "partialResult". Где-то этот обратный вызов теряется?
для js-решения, установите chrome-beta release 25 и перейдите здесь
используя андроид замечания приложение. образец и предварительный выбор значка микрофона с клавиатуры, вы можете сделать то же самое, что и ссылка JS webapp выше.
Ответ 3
Так как мы не можем точно знать имена клавиш Bundle, поступающие из обратного вызова частичных результатов, используйте это, чтобы узнать его содержимое:
public void onPartialResults(Bundle partialResults) {
String string = "Bundle{";
for (String key : partialResults.keySet()) {
string += " " + key + " => " + partialResults.get(key) + ";";
}
Log.e("joshtag","onPartialResults"+string);
//see the keynames in Logcat and extract partial reesults here
}