代码之家  ›  专栏  ›  技术社区  ›  hcarver

语音识别在安卓系统中的应用比较:通过意向还是线程?

  •  15
  • hcarver  · 技术社区  · 13 年前

    介绍

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

    这个 第一 路是一条 Intent ,如在这个问题中: Intent example .全新 Activity 被推到堆栈的顶部,该堆栈倾听用户的声音,听到一些语音,尝试转录(通常通过云),然后通过 onActivityResult 呼叫

    这个 第二 是通过获得 SpeechRecognizer ,就像这里的代码一样: SpeechRecognizer example 在这里,看起来演讲是在其他线程上录制和转录的,然后回调会给我带来结果。这就完成了 不离开我的 活动

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

    到目前为止我得到了什么

    使用 意图 以下为:

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

    但是

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

    使用 语音识别器 以下为:

    • 允许我保留对应用程序中UI的控制
    • 给了我额外的可能性( documentation )

    但是

    • 被限制为从主线程调用
    • 更多的控制需要更多的错误检查。
    3 回复  |  直到 8 年前
        1
  •  13
  •   gregm    13 年前

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

    SpeechRecognizer 更适合免提用户界面,因为你的应用程序实际上可以响应“无匹配”等错误条件,并可能重新启动自己。当您使用 Intent ,应用程序会发出嘟嘟声并显示一个对话框,用户必须按下该对话框才能继续。

    我的总结如下:

    语音识别器

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

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

    • 在后台或从 服务

    • 可以更好地处理错误

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

    意图

    • 为用户提供一致且易于使用的用户界面
    • 易于编程
        2
  •  2
  •   Marek R    13 年前

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

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

        3
  •  1
  •   Kaarel    13 年前

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

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

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