Android:语音识别

时间:2012-12-24 23:31:24

标签: android voice-recognition

[可能重复]但我没有在下面找到我的问题的答案。

过去两天我一直在做一些关于语音识别的研究,但我没有得到我的问题的答案:

  1. 是否可以将语音识别作为服务运行?我想实现这样的事情:虽然我的手机通过语音识别处于睡眠模式,但我需要拨打电话。
  2. 当我乘坐火车,公共汽车等时,语音识别是否能正常检测?
  3. 除语音识别外,是否有传感器检测语音?
  4. 要使语音识别正常工作,用户是否需要靠近手机说话?

1 个答案:

答案 0 :(得分:10)

1)将语音识别功能放入服务是正确的方法,就像在Google API中一样,使用回调方法获取结果。为了使其连续运行,服务必须处理将避免陷入睡眠模式的唤醒锁。这里提供了更多信息Wake locks android service recurring它有一个很大的缺点 - 电池使用率高,由于CPU的连续工作和传入声音数据的连续计算。 (可以通过过滤器,阈值等来减少。)

2)语音识别不是一项简单的任务。它需要大量的计算和数据来参考。如果输入音频不清晰(噪音,许多人声等),则很难获得正确的输出。为提高精度,可以做的是,滤波输入音频:噪声抑制,低通滤波器等。您不能期望100%的准确度,但可以达到80-95%。

更难以过滤许多人类的声音。但是可以使用一些具有自适应阈值的简单幅度(音频强度等级)算法来决定何时字开始和结束。想法是正确的声音是最响的=最接近电话/设备。因此,根据 4)当用户靠近麦克风讲话时,准确度会更好,因为它是最响亮的声音。

3)我不知道您对传感器的意思,但有些算法可以简单地检测人声而不是解码字。这些算法称为语音活动检测(VAD)一些代码应该在Speex项目文档中找到http://www.speex.org/

处理语音识别的最简单方法是使用Google Speech api,它非常好,它能识别大量语言但需要互联网连接 - 并且需要一段时间才能获得结果。
CMU Sphinx更快,但它的语言模型很少,需要更多的RAM内存和proccesor计算,因为所有的解码都是在设备上完成的。在我的意见中,当dicitionary(被识别的单词)像命令(左,右,后,停,开等)一样小时非常好。