我正在寻找在Xamarin应用中实施语音命令的最佳方法。
以下是我的要求:
- 我不需要通过语音启动我的应用。相反,我的用户将通过触摸启动应用程序(因此,当应用程序未运行时,我的应用程序不需要语音识别)
- 我的应用是客户端/服务器应用,它将始终有效(后端将在azure上运行)
- 我的应用程序主要用于汽车(因此请考虑环境噪音)
- 我的应用程序可以使用多种语言,例如意大利语,西班牙语,法语和英语
- 我的应用应该使用xamarin(最终mvvmcross或类似的)
进行开发
- 在我的应用中,会有两种语音命令:
- 从短名单中选择一个项目:应用程序将显示项目列表,例如"苹果,猕猴桃,香蕉和草莓"并且用户将不得不说出其中一个词。
- 更改当前视图。通常,这些语音命令将类似于"取消","确认","更多"和这样的东西
用户,应用和服务器之间的典型交互应为:
- 用户说当前视图/活动/页面中的一个可用命令
- 在这里假设用户完全知道他/她可以使用哪些命令,现在无论他/她如何知道这些命令(他/她只是知道它们)
- 用户可以在命令前添加一些特殊单词,例如"嘿' appname '"",以获得类似"的命令。嘿' appname',确认"
- 注意:"嘿' appname '"部分语音命令的唯一目的是允许应用程序知道命令何时开始。应用程序可以始终处于侦听模式,但必须避免将音频流连续发送到服务器以识别命令
- 最好的情况是app是否会在本地识别这些命令,而不涉及远程服务器,因为语音命令是预定义的并且在每个视图中是众所周知的。无论如何,应用程序可以将音频波发送到将返回字符串的服务器(在此示例中,返回的文本将是"确认",因为音频是"嘿' appname ',确认")
- app将映射使用可用命令识别的文本,并将调用正确的命令
- 用户将收到应用的反馈。反馈可能是:
- 语音反馈(文字转语音)
- 视觉反馈(屏幕上显示的内容)
- 以上
醇>
我一直在寻找azure-cognitive-services,但在这种情况下,据我所知,没有办法在本地识别命令的开始(一切都在服务器端通过REST api或客户端)。因此,用户必须在每个语音命令之前按下按钮,我需要避免这种交互。
由于应用程序正在运行,我的用户将他/她的手放在方向盘上,并且每次显示时他/她都不能触摸。不是吗?
此外,我一直在寻找cortana-skills-kit和botframework,但是:
- 似乎Cortana Skills仅提供英文版
- 实际上,我不需要让Cortana参与启动我的应用
醇>
我没有这些主题的经验,所以,希望我的问题很清楚,一般来说,这对其他新手用户也很有用。
*更新1 *
使用语音命令定义(VCD)文件进行语音识别非常接近我所需要的,因为:
- 它有一种通过命令名称快捷方式
激活命令的方法
- 它适用于前景(以及背景,即使在我的情况下我也不需要背景)
不幸的是,此服务仅适用于Windows,因为它使用本地API。也许正确的方法可以基于以下考虑因素:
- 每个平台都会公开本地语音识别API(Cortana,Siri,Google Now)
- Xamarin公开了Siri和Google Now apis,并通过C#
提供
- 创建 facade 组件以通过公共接口公开三种不同的本地语音api将非常有用
我想知道是否还有其他解决办法。 Cortana作为个人助理,可在Windows,iOS和Android上使用。由于Cortana既可以使用本地api,也可以使用远程服务(Cortana Skills),Cortana是正确的方法吗? Cortana是否支持多种语言(或者至少支持路线图)?
所以,这里只是一些想法。如果您有其他想法或建议,请在此处添加。感谢