Заклинание буква за буквой
Я создаю приложение для Android, которое будет получать пользовательский ввод с помощью голоса в текст.
Пользователь собирается вводить коды, такие как "AA001", "BC022", "AD011" и так далее. Я уже могу открыть функцию распознавания голоса и получить от нее пользовательский ввод (фрагмент ниже), но он возвращает слова.
Мне нужен способ настроить его, чтобы получить только буквы и цифры, которые пользователь действительно ввел.
private void promptSpeechInput() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
getString(R.string.speech_prompt));
try {
startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
} catch (ActivityNotFoundException a) {
Toast.makeText(getApplicationContext(),
getString(R.string.speech_not_supported),
Toast.LENGTH_SHORT).show();
}
}
1 ответ
Вы не можете сделать это с помощью движка Google. Вы можете сделать это с другими движками, такими как CMUSphinx. Там вы можете указать грамматику для распознавания только букв и цифр, грамматика должна выглядеть так:
#JSGF V1.0;
grammar alphadigits;
public <letters> = (one | two | three | four | ... | a. | b. | c. | d. ... | z.)*;
Такая грамматика вернет вам только цифры с большей точностью, чем родной API Google.
Для большей точности распознавания также рекомендуется добавлять буквенные комбинации в грамматику вместо буквенных. Например, если вы хотите "аа", то добавьте "аа" в грамматику. Письма слишком короткие, чтобы их можно было надежно распознать.