AIUI在没有离线识别的情况下,对例如上一首,下一首,暂停播放这些音乐控制命令,都会将音频上传到AIUI云端,云端在处理后将听写和语义的结果再下发到客户端。
AIUI开启离线命令词识别功能后,会在音频送到AIUI云端的同时送到本地的离线识别引擎进行识别。
esr['res_path']配置离线命令词模型通用资源。
esr['engine_type']控制离线结果的输出类型,取值有:
esr['pgs_enable']控制离线听写模式开启时是否有流式听写结果返回,取值有:
如上配置之后,SDK在识别时就会按照配置的离线语法进行离线命令词识别,并通过EVENT_RESULT返回离线结果,结果数据示例请参见离线结果一节的说明。
离线命令语法是使用FSA描述的语法。示例离线语法如下:
我们可以通过配置文件中esr下的preloads指明初始化时需要加载使用的离线命令词语法,同时离线语法文件中的槽也是可以更新的,如上面contact的slot,我需要更新成我们设备上对应的联系人,那我们可以在配置中为preloads资源增加如下的配置:
"esr":{"engine_type":"wfst_fsa","pgs_enable":"1","res_type":"assets","res_path":"esr/common.jet","preloads":[{"id":0,"res_type":"assets","res_path":"esr/contact.jet","update_slots":[{"slot":"contact","res_type":"assets","res_path":"esr/contact_update.jet"}]},]}contact_update.jet中内容是|分割扩展联系人列表,示例内容如下:
除了通过上面的静态的配置文件指明需要更新扩展的槽。我们还可以通过下面介绍的命令在程序运行时动态更新槽内容,以下操作都需要在AIUISDK的working状态下运行。
StringgrammarContent=FucUtil.readAssetsFile(this,"esr/contact.jet","utf-8");AIUIMessagebuildMessage=newAIUIMessage(AIUIConstant.CMD_BUILD_GRAMMAR,1,0,grammarContent,null);arg1字段指明编译语法的ID,后面更新语法槽时通过指定相同的语法ID来更新这个语法文件中槽;
arg2字段指明是否禁用语法编译自动加载下次识别生效,取值如下:
params字段指明编译的语法内容。
编译结果及下面操作都会通过EVENT_CMD_RETURN返回,示例处理如下:
arg2字段指明槽更新内容模式是否为追加,取值如下:
params字段指明槽更新的内容。
AIUIMessageloadMessage=newAIUIMessage(AIUIConstant.CMD_LOAD_GRAMMAR,1,0,"",null);arg1字段指明需要加载的语法ID,语法ID需要之前通过CMD_BUILD_GRAMMAR完成编译。
AIUIMessageloadMessage=newAIUIMessage(AIUIConstant.CMD_UNLOAD_GRAMMAR,1,0,"",null);arg1字段指明需要卸载的语法ID,语法ID需要之前通过CMD_BUILD_GRAMMAR或CMD_LOAD_GRAMMAR完成对应语法的加载。