[可能重复]但我没有在下面找到我的问题的答案。
这两天我一直在做一些语音识别方面的研究,但没有得到我的问题的答案:
- 是否可以将语音识别作为服务运行?我想实现这样的事情:虽然我的电话通过语音识别处于睡眠模式,但我需要拨打一个号码。
- 当我在火车、公共汽车等上时,语音识别是否可以正常检测单词?
- 除了语音识别,还有其他传感器可以检测语音吗?
- 为使语音识别正常工作,用户是否需要靠近手机说话?
[可能重复]但我没有在下面找到我的问题的答案。
这两天我一直在做一些语音识别方面的研究,但没有得到我的问题的答案:
1)将语音识别放入服务中是正确的方法,就像在Google api中所做的那样,其中使用回调方法来获取结果。为了使其持续运行,服务必须处理唤醒锁,以避免陷入睡眠模式。此处提供了更多信息Wake locks android service recurring它有一个很大的缺点 - 电池使用率高,这是由 CPU 的连续工作和传入声音数据的连续计算引起的。(可以通过过滤器、阈值等来减少)
2)语音识别不是一项简单的任务。它需要大量的计算和数据来参考。如果输入音频不清晰(噪音、许多人声等),则很难获得正确的输出。可以做些什么来提高准确性,过滤输入音频:噪声抑制、低通滤波器等。你不能期望 100% 的准确性,但可以达到 80-95%。
更难的是过滤许多人的声音。但是可以使用一些具有自适应阈值的简单幅度(音频强度级别)算法来决定单词何时开始和结束。想法是正确的声音是最响亮的=最接近电话/设备。因此,根据4),当用户靠近麦克风说话时,准确度会更好,因为它是最响亮的声音。
3)我不知道您所说的传感器是什么意思,但是有一些算法可以简单地检测人声而不是解码单词。这些算法称为语音活动检测 (VAD) 一些代码应在 Speex 项目文档 http://www.speex.org/中找到
处理语音识别的最简单方法是使用 Google Speech api,它非常好,它可以识别多种语言但需要 Internet 连接——而且需要一段时间才能得到结果。
更快的是 CMU Sphinx,但它的语言模型很少,需要更多的 RAM 内存和处理器计算,因为所有解码都是在设备上进行的。在我看来,当字典(被重新认识的单词)像命令(左、右、后退、停止、开始等)一样小时非常好。