语音识别安卓应用
Posted
技术标签:
【中文标题】语音识别安卓应用【英文标题】:Speech Recognition Android App 【发布时间】:2012-03-08 21:15:30 【问题描述】:我正在制作一个应用程序,它从用户那里获取命令并实时编写它。对我来说最好的选择是什么? sphinx 之类的第三方软件还是我应该使用内置的(android 语音识别)?
其次,我希望它实时书写,就像我说话时它开始书写一样?
【问题讨论】:
【参考方案1】:您应该使用内置的 Android 语音识别。具体来说,您需要操作SpeechRecognier API,以便不会弹出对话框。
此外,不要期望 SpeechRecognizer 会返回 onPartialResults() 内的任何内容。它很少这样做。
您可以尝试使用 Sphinx,但其他开发人员似乎很难让它在 Android 上运行。也就是说,如果您希望应用在没有互联网连接的情况下运行,那么 sphinx 将是您唯一的选择。
这是您需要使用 SpeechRecognizer 的代码片段:
public void recognizeDirectly(Intent recognizerIntent)
// SpeechRecognizer requires EXTRA_CALLING_PACKAGE, so add if it's not
// here
if (!recognizerIntent.hasExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE))
recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,
"com.dummy");
SpeechRecognizer recognizer = getSpeechRecognizer();
recognizer.startListening(recognizerIntent);
@Override
public void onResults(Bundle results)
Log.d(TAG, "full results");
receiveResults(results);
@Override
public void onPartialResults(Bundle partialResults)
Log.d(TAG, "partial results");
receiveResults(partialResults);
/**
* common method to process any results bundle from @link SpeechRecognizer
*/
private void receiveResults(Bundle results)
if ((results != null)
&& results.containsKey(SpeechRecognizer.RESULTS_RECOGNITION))
List<String> heard =
results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
float[] scores =
results.getFloatArray(SpeechRecognizer.CONFIDENCE_SCORES);
receiveWhatWasHeard(heard, scores);
@Override
public void onError(int errorCode)
recognitionFailure(errorCode);
/**
* stop the speech recognizer
*/
@Override
protected void onPause()
if (getSpeechRecognizer() != null)
getSpeechRecognizer().stopListening();
getSpeechRecognizer().cancel();
getSpeechRecognizer().destroy();
super.onPause();
/**
* lazy initialize the speech recognizer
*/
private SpeechRecognizer getSpeechRecognizer()
if (recognizer == null)
recognizer = SpeechRecognizer.createSpeechRecognizer(this);
recognizer.setRecognitionListener(this);
return recognizer;
// other unused methods from RecognitionListener...
@Override
public void onReadyForSpeech(Bundle params)
Log.d(TAG, "ready for speech " + params);
@Override
public void onEndOfSpeech()
【讨论】:
谢谢你先生..但我在android编程方面不太好..你能解释一下如何实现这段代码吗?我已经实现了出现对话的语音识别的普通代码。如何用这段代码替换它?在此先感谢:) 使用与对话版本相同的 Intent,但调用我的 identifyDirectly 方法。您还需要实现 receiveWhatWasHeard() 和 recognitionFailure() 来处理语音识别的结果。 谢谢你先生..我很高兴听到这个消息..我在写方向工作..我的应用程序的第一个任务现在完成了..谢谢你:) 先生,当我停止应用程序时,它给出了平均错误.. 03-12 15:35:21.142: E/ActivityThread(30248): Activity com.yawar.Main has leaked ServiceConnection android.speech.SpeechRecognizer $Connection@40669368 原来绑定在这里【参考方案2】:gregm 是对的,但问题的主要“实时写入”部分没有得到回答。您需要添加额外的内容以表明您有兴趣获取部分结果:
在意图中添加额外内容对我有用
intent.putExtra(RecognizerIntent.EXTRA_PARTIAL_RESULTS, true);
警告:Partial 不仅会返回新内容,还会返回以前的内容。因此,您需要自己检查差异...
【讨论】:
以上是关于语音识别安卓应用的主要内容,如果未能解决你的问题,请参考以下文章