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