Android中语音识别使用的比较:按意图还是线程?

Posted

技术标签:

【中文标题】Android中语音识别使用的比较:按意图还是线程?【英文标题】:Comparison of Speech Recognition use in Android: by Intent or on-thread? 【发布时间】:2012-08-08 11:11:38 【问题描述】:

简介

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

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

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

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

到目前为止我得到了什么

使用Intent

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

但是

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

使用SpeechRecognizer

让我保留对应用中 UI 的控制权 让我有更多的可能性回应 (documentation)

但是

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

【问题讨论】:

这很奇怪。为什么人们对这个问题投了反对票?为什么不给我一些反馈呢? 而且他们似乎也对这两个答案都投了反对票。爱在哪里? 我认为这两种方法都有启动缓慢的问题。应用程序希望启动语音识别与启动语音识别之间存在延迟。至少使用 Intent 方法,用户可以通过各种对话了解,使用语音识别器,您必须以其他方式告诉用户。 有没有启动不慢的替代方案? 不,除了慢启动,别无选择。更糟糕的是,开始时间是可变的。有时是快有时慢。你必须对 UI 做一些事情来提供帮助,或者谷歌可能会通过添加一些有用的哔哔声来解决它。 【参考方案1】:

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

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

我的总结如下:

语音识别器

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

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

可以在后台运行或从 服务

可以更好地处理错误

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

意图

用户界面一致且易于使用 易于编程

【讨论】:

一个比另一个更准确吗?还是 Intent 版本只是 SpeechRecognizer 的 UI? 准确率是一样的【参考方案2】:

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

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

【讨论】:

不正确。 SpeechRecognizer 和 Intent 都会在一定的可控周期后结束。使用 SpeechRecognizer 至少你可以重新启动它。 你们都错了。 ;) 这一切都取决于提供语音识别服务的应用程序。它可以随心所欲地运行。如果是SpeechRecognizer,调用者可以调用cancel,但不能控制录制时间。在 Intent 的情况下,控制权被移交给一个新的 Activity,只有当用户按下 BACK 时才能完成。【参考方案3】:

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

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

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

【讨论】:

以上是关于Android中语音识别使用的比较:按意图还是线程?的主要内容,如果未能解决你的问题,请参考以下文章

从语音识别意图记录/保存音频

调用语音识别应用程序的小部件

Android 语音中的关键字识别?

语音识别和声音与音乐的比较

讯飞科技自定义语音识别相关功能关键词

语音识别安卓应用