在Unity项目中接入思必驰语音SDK,实现类似“语音助手”的功能

AR/VR语音识别智能语音交互

源码获取

本文档适用范围,(按需选择,选择开源,一起为社区贡献)。


思必驰提供了安卓SDK,基于此实现Unity调用安卓SDK的原生接口。

在Unity项目中接入思必驰语音SDK,实现了简单的语音助手Demo。

此文档为工程配套文档。


一、获取思必驰SDK的Token

这里采用动态注册的方式(注册仅为一种鉴权方式,无论哪种鉴权方式,都不会影响语音识别、语音合成、语音唤醒的功能)。

若是要使用其它注册方式,请参考官方文档。https://cloud.aispeech.com/docs/product_authorization

1. 创建产品

picture.image

  • 右上角添加,“基础技术接入”

picture.image

  • 选择单项技术,勾选所需的“语音识别|语音合成|语音唤醒”相关单项

picture.image

2. 申请Token

思必驰SDK提供了动态注册的授权方式,这里需要申请所需的Token

  • 进入授权管理

picture.image

  • 点击申请APIKEY,输入(你要开发的安卓程序的包名)packagename和(你要开发的安卓程序打包签名时用到的keystore文件)keystore的SHA256值。

picture.image

  • 点击确定,得到APIKEY(记录下红框中的内容,后续备用)

3. 补充:包名获取

原生开发方式获取

获取build.gradle文件中的ApplicationId作为PackageName;如果没有设置ApplicationId,请以AndroidManifest.xml配置文件的package 属性为准。

Unity开发获取

安卓平台下

在ProjectSettings中设置PackageName

picture.image

4. 补充:生成keystore文件

生成keystore文件

参考文档:https://eqgis.blog.csdn.net/article/details/148040233 对于Unity开发者,建议直接在Unity中创建

picture.image

5. 补充:获取SHA256值

注意:JDK需配置环境变量

  • 检查是否将JDK配置环境变量,输入“keytool”,以下情况为正常。

picture.image

  • 输入命令:keytool -v -list -keystore keystore文件路径

debug.keystore:命令为:keytool -list -v -keystore debug.keystore

自定义的 keystore:命令为:keytool -list -v -keystore apk的keystore

  • 查看SHA256,复制内容。在之前的申请APIKEY的地方时使用

picture.image

二、Unity配置

注意:这里需使用我提供的工程Demo(或是导入我提供的unitypackage)

1. 配置Token

  • 打开EQGIS->Settings,填写思必驰的相关Token信息

picture.image

  • 保存修改

2. 创建“Assistant”

  • 在场景中创建对象

示例工程中的SampleScene中默认创建,无需额外创建。这里记录仅是作参考

picture.image

  • 检视对象

默认已在对象挂载脚本并绑定

picture.image

三、语音唤醒

1. 修改唤醒词

唤醒词要求为拼音。

在以下代码位置替换唤醒词即可

picture.image

四、语音合成

TTS功能(文本转语音)

1. 预设文本转语音

关键步骤:

  • 替换textContent
  • 启动ttsEngine 代码示例:
entity.ttsEngine.textContent = entity.RandomResponse(entity.wakeupResponses);
entity.status = VoiceAssistantStatus.SPEEKING;
entity.ttsEngine.StartEngine();

补充说明:你可以找到SbcTtsEngine.cs中StartEngine的引用位置。自定义语音反馈,亦或是通过Unity的AudioClip播放预设音频也可以实现语音反馈。

picture.image

五、语音识别

ASR功能(语音转文本)

1. 修改本地语音识别的预设文本

当前采用本地识别,则需要预先根据XBNF语法,设置文件。 当前安卓原生部分引入的SDK配置的XBNF文件在Assets目录下。

打包后的安卓aar文件,在Unity的Eqgis/Plugins/Android目录下

picture.image

打开aar(当做一个zip文件打开就行) picture.image

  • 查看local_asr.xbnf(替换文本内容),需保持替换前后文件同名。

picture.image

补充:若是你无法通过上述方式替换成功,请将xbnf文件提供给源码作者,重新编译aar。

此外需要注意的是:

picture.image

2. 识别到语音内容

默认逻辑:唤醒词唤醒->助手答复后->(启动语音识别监听)语音识别

你可以参考以下代码位置的实现修改逻辑

  • 在第一次TTS(文本转语音)后,(认定为助手答复)启动语音识别监听。

picture.image

  • 当识别到语音内容时,触发Recognize事件

Unity开发者,在此处处理识别到的语音文本

picture.image

3. 允许超时的次数设置

ASR识别超时重试,若是超时。可以执行“请再说一遍”(预设文本可在源码中修改)

picture.image

六、指令任务

在识别到语音内容后,我们得到一个String。通过字符串匹配,我们可实现简单的指令任务。

1. VoiceCommandManager

  • 场景中创建一个游戏对象,挂载VoiceCommandManager脚本
  • 在ASR识别回调的Recognize(String)事件中,回调出的String就是监听到用户说的话。
  • 调用挂载VoiceCommandManager组件的Rec(string)方法

这里实现了根据指令修改Cube颜色的字符串匹配示例,可做参考。

picture.image

七、运行说明

1. 运行平台

项目采用安卓原生的aar,仅可运行在安卓设备上。

2. 运行日志

接口预留了日志打印方法。Unity项目中配置条件编译。“DEBUG_LOG” 参考EqLog.cs

#if DEBUG_LOG
        private static string logFilePath = Application.persistentDataPath + "/runtime.log";
#endif

文件日志保存在安卓根目录/Android/data/你的包名/files/runtime.log文件中。示例如下:

picture.image

3. 缓存文件

  • 思必驰通过Token动态注册(鉴权)时,第一次会联网鉴权,生成缓存文件。后续动态注册会根据缓存文件鉴权。(因此无需再联网)
  • 鉴权成功后,语音识别引擎启动时,会根据xbnf文件编译bin文件,保存在缓存文件夹中。(因此第一次启动语音识别引擎时,耗时会受到xbnf文件大小影响)
0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
DevOps 在字节移动研发中的探索和实践
在日益复杂的APP工程架构下,如何保证APP能高效开发,保障团队效能和工程质量?本次将结合字节内部应用的事件案例,介绍DevOps团队对移动研发效能建设的探索和思考。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论