Android中的离线语音识别(JellyBean)

Google似乎已经为Google第三方应用提供了离线语音识别function。 它正在被名为Utter的应用程序使用。

有没有人看到如何使用这个离线语音录制做简单的语音命令的任何实现? 你只是使用普通的SpeechRecognizer API,它会自动工作吗?

Google确实悄悄地启用了该search更新中的离线识别function,但在SpeechRecognizer类中还没有可用的API或其他参数。 {见这篇文章底部的编辑}function是没有额外的编码,但用户的设备将需要正确configuration,它开始工作,这就是问题所在,我会想象为什么很多开发人员假设他们“错过了什么”。

此外,由于硬件限制,Google限制了某些Jelly Bean设备使用离线识别。 这些适用的设备没有logging,事实上没有任何文件logging,所以为用户configurationfunction已经certificate是一个试验和错误(对他们来说)的问题。 它适用于一些马上 – 对于那些没有,这是我提供的“指南”。

  1. 确保默认的Android语音识别器设置为Google而不是Samsung / Vlingo
  2. 从Google Voicesearch设置中卸载您已经安装的所有离线识别文件
  3. 转到您的Android应用程序设置,查看是否可以卸载Googlesearch和Google语音search应用程序的更新。
  4. 如果您无法完成上述操作,请转到Play商店,看看您是否有此选项。
  5. 重新启动(如果你达到了2,3或4)
  6. 从Play商店更新Googlesearch和Google语音search(如果您达到3或4,或者无论如何都有更新)。
  7. 重新启动(如果你达到6)
  8. 安装英国离线语言文件
  9. 重启
  10. 用完! 与连接
  11. 切换到飞行模式,试试看
  12. 一旦它正在工作,其他语言(如英语)的离线识别也应该开始工作。

编辑:暂时改变设备的区域设置为英国英国也似乎kickstart这一些工作。

有些用户表示,在开始工作之前,他们仍然需要重新启动很多次,但他们最终都会到达目的地,而且往往令人费解的是,触发器的关键在GooglesearchAPK中 ,因此不属于公有领域或AOSP的一部分。

根据我所能确定的,Google在决定是否使用离线或在线识别之前testing连接的可用性。 如果连接最初可用,但在响应之前丢失,则Google将提供连接错误,但不会退回到脱机状态。 另外请注意,如果networking合成语音请求已经完成,如果失败,则没有错误提供 – 您将得到安静。

Googlesearch更新在Google即时中没有启用其他function,事实上,如果您尝试在没有互联网连接的情况下使用它,则会出错。 我提到这一点,因为我想知道这个能力是否会像现在这样悄悄地被撤回,因此不应该依赖于生产。

如果您打算开始使用SpeechRecognizer类,请注意,有一个相关的主要错误 ,它需要您自己的实现来处理。

如果不能专门请求离线= true ,则无法操作数据连接就无法控制此function。 垃圾。 你会得到数百个用户的电子邮件,问你为什么你没有启用这么简单的东西!

编辑:由于API级别23一个新的参数已被添加EXTRA_PREFER_OFFLINE谷歌识别服务似乎坚持。

希望以上的帮助。

我想改进指南,回答https://stackoverflow.com/a/17674655/2987828发送给它的用户,与图像。; 这句话“对于那些没有的人来说,这是我提供给他们的”指南“。 我想改善。

用户应该点击这些图像中以蓝色突出显示的四个button:

转到您的Android应用程序设置,选择语言和输入,编辑Google Voice输入的设置,选择“下载离线语音识别”在“全部”选项卡中选择您的语言。

然后用户可以select任何所需的语言。 下载完成后,他应该断开与networking的连接,然后点击键盘上的“麦克风”button。

它为我工作(机器人4.1.2),然后语言识别的工作,没有重新启动。 我现在可以指示terminal模拟器的shell! 在华硕的Padfone 2上,它的在线速度是在线的两倍。

这些图像是根据cc by-sa 3.0进行许可的,需要归属地stackoverflow.com/a/21329845/2987828; 因此,您可以随着这个属性添加这些图像。

(这是所有图像和文本在stackoverflow.com的标准政策)

Android上的简单而灵活的离线识别function由开源语音识别工具包CMUSphinx实现。 它纯粹离线工作,快速和可configuration它可以连续收听关键字,例如。

你可以在这里find最新的代码和教程 。

总之,我没有执行,只是解释。

Google没有将离线语音识别function提供给第三方应用程序。 离线识别只能通过键盘访问。 Ben Randall(utter!的开发者)在Android Police的一篇文章中解释了他的解决方法:

我已经实现了我自己的键盘,并且使用不可见的编辑文本字段和透明的活动来切换Google Voice键入和用户默认键盘之间的input。 肮脏的黑客!

这是做到这一点的唯一方法,因为离线语音input只能由IME或系统应用程序 (这是我的root hack) 触发 。 其他types的识别API …没有触发它,只是因为服务器错误而失败。 …在这个解决方法上我浪费了很多工作! 但至less我已经准备好实施了…

从完全! 声称是第一个非IME应用程序在果冻豆利用脱机语音识别

我通过离线使用onPartialResults和在线使用onResults,成功实现了带离线function的语音服务。

我正在处理这个问题,我注意到你需要为你的语言安装脱机软件包。 我的语言设置是“Español(Estados Unidos)”,但是没有该语言的离线包,所以当我closures所有networking连接时,我收到来自RecognizerIntent的警报,说无法访问Google,然后将语言更改为“英语(美国)”(因为我已经有离线包),并推出了RecognizerIntent它刚刚制定出来。

键:语言设置==离线语音识别器包

通过直接下载文件并手动安装在正确的位置,显然可以手动安装离线语音识别。 我想这只是一种绕过Google硬件需求的方法。 不过,我个人并不需要重新启动,只需要更换英国,然后再回来就可以了。