14

介绍

Android 为我提供了两种使用语音识别的方法。

一种方法是通过Intent, 就像在这个问题中一样:Intent example。一个新Activity的被推到堆栈的顶部,它倾听用户的声音,听到一些语音,尝试转录它(通常通过云),然后通过onActivityResult调用将结果返回给我的应用程序。

第二是通过获取一个SpeechRecognizer,就像这里的代码:SpeechRecognizer 示例。在这里,看起来语音是在其他线程上录制和转录的,然后回调给我带来结果。这是在不离开我Activity的情况下完成的。

我想了解这两种语音识别方式的优缺点

到目前为止我所拥有的

使用Intent

  • 编码简单
  • 避免重新发明轮子
  • 在整个设备上提供一致的语音识别用户体验

  • 使用自己的窗口创建新活动可能会很慢

使用SpeechRecognizer

  • 让我在我的应用程序中保留对 UI 的控制
  • 给了我额外的可能性来回应(文档

  • 仅限于从主线程调用
  • 更多的控制需要更多的错误检查。
4

3 回答 3

12

除了所有这些,我至少要补充一点:

SpeechRecognizer更适合免提用户界面,因为您的应用实际上会响应“不匹配”之类的错误条件,并且可能会自行重启。当您使用 时Intent,应用程序会发出哔哔声并显示一个对话框,用户必须按下该对话框才能继续。

我的总结如下:

语音识别器

  • 显示不同的 UI 或根本不显示 UI。您真的希望您的应用程序的用户界面发出哔哔声吗?您真的希望您的 UI 在出现错误时显示对话框并等待用户单击吗?

  • 应用程序可以在语音识别发生时做其他事情

  • 可以在后台运行或从服务中识别语音

  • 可以更好地处理错误

  • 可以访问原始音频或 RMS 等低级语音内容。分析该音频或使用响度发出某种闪光以表明应用正在收听

意图

  • 为用户提供一致且易于使用的 UI
  • 易于编程
于 2012-08-14T00:19:44.917 回答
2

主要区别在于用户界面。SpeechRecognizer没有,所以你有责任创建一个。
我曾经写过一个原型,我有一个用于听耳机按钮的接收器,然后激活语音识别来听一些命令。屏幕没有激活,所以我不得不使用SpeechRecognizer(我的 UI 是一些预先录制的声音和文本转语音)。

第二个区别是SpeechRecognizer具有持续倾听的能力。意图版本总是会在一段时间后结束强制执行。例如SpeechRecognizer,语音识别“键盘”使用,因此您可以口述 SMS。
在这种情况下,您将仅收到部分结果(在正常模式下SpeechRecognizer仅给出最终结果)。

于 2012-08-13T10:47:39.013 回答
1

其他答案没有提到的一件事:如果设备上安装了多个语音识别器,那么用户在它们之间的切换会有所不同,具体取决于是否SpeechRecognizer使用了“意图”或 。

  • 如果是“意图”,则会弹出标准活动选择对话框。用户可以选择要使用的识别器,并可选择将其全局设置为默认识别器,以避免将来出现对话框。
  • 如果SpeechRecognizer用户可以在全局设置中设置和配置默认识别器(Language and input -> Voice recognizer在 ICS 上)。

因此,根据使用的接口,有关设置默认识别器和在识别器之间切换的文档应该是不同的。(在大多数情况下,虽然只有一个识别器,谷歌语音搜索,所以这在实践中可能不是一个大问题。)

于 2012-08-23T07:30:45.033 回答