[可能重复]但我没有在下面找到我的问题的答案。
过去两天我一直在做一些关于语音识别的研究,但我没有得到我的问题的答案:
答案 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(被识别的单词)像命令(左,右,后,停,开等)一样小时非常好。