安卓:语音识别

标签 android voice-recognition

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

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

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

最佳答案

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/

相关文章:

android - 如何设置 HTML 元视口(viewport)以 100% 宽度开始?

java - Line2D 的 Android 替代品?

android - 需要使用 appium 识别 android 元素的 xpath

android - 我如何知道我的应用程序是由 Google Assistant 打开的,而不是正常启动的

android - 如何制作没有文字的单选按钮?

android - 在 Android 中使用录音的 SpeechRecognizer

.net - .NET 中的语音识别

java - 我可以从语音识别中获取语音数据(例如 mp3 格式)吗?

具有简单命令/词汇的 Android 离线语音识别

android - 如何处理关闭 RadioButtonDialog