我正在构建一个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();
}
}
答案 0 :(得分:2)
你无法使用Google引擎。您可以使用CMUSphinx等其他引擎执行此操作。在那里你可以指定一个语法来只识别字母和数字,语法应该是这样的:
#JSGF V1.0;
grammar alphadigits;
public <letters> = (one | two | three | four | ... | a. | b. | c. | d. ... | z.)*;
此类语法仅返回精确度高于Google原生API的数字。
为了更好的识别准确性,还建议在字母而不是字母中添加字母组合。例如,如果你想要“aa”,那么在语法中添加“aa”。信件太短,无法可靠识别。