拼写字母

时间:2015-12-04 18:29:31

标签: java android speech-recognition voice-recognition speech-to-text

我正在构建一个Android应用,通过语音到文字来获取用户输入。

用户将输入类似于' AA001',' BC022',' AD011'等等。我已经能够打开语音识别活动并从中获取用户输入(下面的片段,来自here),但它会返回单词。

我需要一种方法来设置它,以便只获得用户真正输入的字母和数字。

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 个答案:

答案 0 :(得分:2)

你无法使用Google引擎。您可以使用CMUSphinx等其他引擎执行此操作。在那里你可以指定一个语法来只识别字母和数字,语法应该是这样的:

#JSGF V1.0;
grammar alphadigits;
public <letters> = (one | two | three | four | ... | a. | b. | c. | d. ... | z.)*;

此类语法仅返回精确度高于Google原生API的数字。

为了更好的识别准确性,还建议在字母而不是字母中添加字母组合。例如,如果你想要“aa”,那么在语法中添加“aa”。信件太短,无法可靠识别。