【问题标题】:Android: Voice recognition安卓:语音识别
【发布时间】:2012-12-24 23:31:24
【问题描述】:

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

这两天我一直在做一些语音识别方面的研究,但我的问题没有得到答案:

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

【问题讨论】:

  • 你是指语音识别还是语音识别? (阅读voice-recognition 摘录:“语音识别意味着识别说话的人,并且经常被误用为表示“语音识别” - 识别正在说话的内容。”)
  • 下次请尝试一次搜索一个问题,一次问一个问题。这将帮助您找到答案。

标签: android voice-recognition


【解决方案1】:

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 内存和处理器计算,因为所有解码都是在设备上进行的。在我看来,当字典(被重新识别的单词)像命令(左、右、后退、停止、开始等)一样小时非常好。

【讨论】:

  • 感谢您的意见。我想开发一个应用程序,当我说帮助时,无论我身在何处,它都会自动拨打紧急号码。我可能在公共汽车、市场或其他地方。我的第一个问题没有得到答案,如果您有任何意见,请告诉他们?
  • 我更新了我的答案,所以它也涵盖了你的第一个问题,在你的情况下,Sphinx 会非常快,而且非常 aqqurate,因为只需要识别一个单词。 “帮助”
  • 再次感谢您的意见。关于第四个问答,正如您所说,我们需要靠近麦克风讲话以获得更好的准确性。假设我在公共汽车上,我需要一些帮助,因为那里过于拥挤和嘈杂,可能无法识别正确的单词?
  • “到拥挤”的意思是还有很多其他人的声音。你可以想象,很难过滤这种信号。当只有比人类语音(300Hz - 3kHz)更高或更低频率的其他噪声时,更容易制作仅通过特定波段(人类)的门。因此,为了使其更容易并达到更好的精度,使用了另一种方法:不是通过频率而是通过强度(幅度)来限定正确的信号。当然,在高级算法中使用了许多技术,包括频率和幅度,
  • 总而言之,在嘈杂的地方更难得到正确的结果,准确度取决于,如何实现好的算法。当然,这取决于处理语音识别的算法有多好。但我已经谈到了 Google Speech 和 Sphinx,它们让它变得非常好
猜你喜欢
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多