首页 文章

在Android中使用语音识别的比较:通过Intent还是on-thread?

提问于
浏览
14

简介

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

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

second 是获取 SpeechRecognizer ,就像这里的代码一样:SpeechRecognizer example . 在这里,看起来语音被记录并转录到其他一些线程上,然后回调给我带来了结果 . 这是在不离开我的 Activity 的情况下完成的 .

我想了解 pros and cons of these two ways of doing speech recognition .

到目前为止我得到了什么

使用 Intent

  • 很容易编码

  • 避免重新发明轮子

  • 在整个设备上提供一致的语音识别用户体验

使用自己的窗口创建新活动时,

  • 可能会很慢

使用 SpeechRecognizer

  • 让我在我的应用程序中保留对UI的控制权

  • 给了我更多回应的可能性(documentation

  • 仅限于从主线程调用

  • 更多控制需要更多错误检查 .

3 回答

  • 12

    除此之外,我至少还要补充一点:

    SpeechRecognizer 对于免提用户界面更好,因为您的应用程序实际上可以响应"No matches"等错误情况并可能重新启动 . 当您使用 Intent 时,应用程序会发出蜂鸣声并显示一个用户必须按才能继续的对话框 .

    我的总结如下:

    SpeechRecognizer

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

    • 应用程序可以在语音识别发生时执行其他操作

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

    • 可以更好地处理错误

    • 可以访问低级语音内容,如原始音频或RMS . 分析音频或使用响度发出某种闪烁的灯光来指示应用正在收听

    意图

    • 为用户提供一致且易于使用的UI

    • 易于编程

  • 1

    UI的主要区别在于 . SpeechRecognizer 没有,所以你负责创建一个 .
    我用来写一个原型,我有接收器用于收听耳机按钮,然后激活语音识别以听取一些命令 . 屏幕未激活,因此我不得不使用 SpeechRecognizer (我的UI是一些预先录制的声音和文本到语音) .

    第二个区别是 SpeechRecognizer 具有持续聆听的能力 . 意图版本将在一段时间后始终结束 . 例如 SpeechRecognizer 由语音识别"keyboard"使用,因此您可以指定SMS .
    在这种情况下,您将仅收到部分结果(在正常模式下 SpeechRecognizer 仅给出最终结果) .

  • 2

    其他答案未提及的一件事是:如果设备上安装了多个语音识别器,则用户之间的切换会有所不同,具体取决于是使用了"Intent"还是 SpeechRecognizer .

    • 如果是"Intent",则会弹出标准的“活动选择”对话框 . 用户可以选择要使用的识别器,并可选择将其全局设置为默认识别器,以避免将来出现对话 .

    • 如果是 SpeechRecognizer ,用户可以在全局设置中设置和配置默认识别器(ICS上的 Language and input -> Voice recognizer ) .

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

相关问题