Заклинание буква за буквой

Я создаю приложение для 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.

Для большей точности распознавания также рекомендуется добавлять буквенные комбинации в грамматику вместо буквенных. Например, если вы хотите "аа", то добавьте "аа" в грамматику. Письма слишком короткие, чтобы их можно было надежно распознать.

Другие вопросы по тегам