跳转至

离线命令词自学习使用说明

1 内容概述

本文档主要对CI14LP系列芯片的离线语音算法SDK中离线命令词自学习工程进行说明。内容包括离线命令词自学习的概念、场景、使用说明以及注意事项。

2 离线命令词自学习基本概念

在非联网状态,用户通过语音对话的方式,更改默认的命令词;该种更改方式满足终端用户的个性化自定义的需求,可以给客户带来更好的用户体验。

3 离线命令词自学习适用场景

本方案适用于各种语音控制相关的智能家电,家居等产品,实现用户离线自定义命令词。

4 离线命令词自学习工程说明

CI14LP_SDK_ASR_Offline SDK支持离线命令词自学习功能,对应工程为projects\offline_asr_sample。

注意

SDK默认配置未使能USE_CWSL宏,如需使用自学习功能,请在自己的工程配置中使能USE_CWSL(并搭配原厂自学习固件使用);若使用过程中遇到问题,请联系启英泰伦技术支持。

5 算法使能方式

CI14LP SDK 的离线命令词自学习功能由 CI-CWSL 模块提供(components\ci_cwsl\,接口见 cwsl_manage.h),不通过 makefile 变量使能。若需使用自学习功能,请在工程配置中使能 USE_CWSL 宏(并搭配原厂自学习固件使用);若工程默认未使能该算法,请参考原厂提供的算法组合配置示例或联系技术支持。

5.1 离线命令词自学习参数配置

CI14LP 的自学习参数在 cwsl_init_parameter_t 结构体中配置(定义见 components\ci_cwsl\cwsl_manage.h),可调整的参数如下(如无特殊需求,建议都使用原厂默认配置):

cwsl_init_parameter_t cwsl_init_parameter =
{
    .tpl_min_word_length = 2,   //自学习模板的最小字数,默认2个字,可设置2~5个字
    .wait_time = 200,           //等待时间,单位为毫秒,默认值为200
    .sg_reg_times = 1,          //学习时每个词需说几遍,默认1遍即可,可设置1、2、3遍
    .wakeup_threshold = 35,     //学习的唤醒词阈值门限,越小越灵敏,默认35
    .cmdword_threshold = 35,    //学习的命令词阈值门限,越小越灵敏,默认35
    .reg_2times_flow_v2 = 0,    //学习时说两遍逻辑,版本二流程,后续均和第一次比较,一致学习成功,不一致最多支持说3次
    .reg_vad_level = 0          //学习时vad灵敏度选取:0低灵敏度,减少噪音干扰,需人声较大;1高灵敏度,人声可小声一些
};

说明

自学习参数结构体各字段含义、使能/初始化流程及学习、删除等接口请以 components\ci_cwsl\cwsl_manage.h 实际声明为准;学习模板数量上限与工程模板缓存配置相关,具体可联系启英泰伦技术支持。

5.2 离线命令词自学习命令词学习播报音配置

配置reg_cmd_list结构体数组

reg_cmd_list 结构体数组在自学习示例工程的应用层文件中配置(CI14LP 的 offline_asr_sample 默认工程不包含该应用层文件,请以原厂提供的自学习示例工程为准),代码如下:

//左边一列表示的是要学习的命令词ID,右边一列表示需要播报的ID
const cwsl_reg_asr_struct_t reg_cmd_list[]=
{ //命令词ID       //学习提示播报音ID
    {2,             1001},
    {3,             1002},
    {4,             1003},
    {5,             1004},
    {6,             1005},
    {7,             1006},        
};

配置命令词列表

在CI14LP_SDK_ASR_Offline_V1.0.28\projects\offline_asr_sample\firmware\user_file\cmd_info下,打开[60000]{智能管家}V2.xlsx文件。

说明

下表中命令词一列目的是提示该条播报是哪个词,填写方式随意,无需按下表中格式填写。

命令词 命令词ID 命令词语义ID 置信度 唤醒词 组合词 期望词 不期望词 特殊词计数 播报音类型 播报音1ID 播报音2ID
[1001]请说打开空调的学习指令[103]恭喜你[2001]打开空调学习成功 1001 0x00 39 NO NO NO NO 0 自定义 1001 103+2001
[1002]请说关闭空调的学习指令[103]恭喜你[2002]关闭空调学习成功 1002 0x00 39 NO NO NO NO 0 自定义 1002 103+2002
[1003]请说增大风速的学习指令[103]恭喜你[2003]增大风速学习成功 1003 0x00 39 NO NO NO NO 0 自定义 1003 103+2003
[1004]请说减小风速的学习指令[103]恭喜你[2004]减小风速学习成功 1004 0x00 39 NO NO NO NO 0 自定义 1004 103+2004
[1005]请说升高一度的学习指令[103]恭喜你[2005]升高一度学习成功 1005 0x00 39 NO NO NO NO 0 自定义 1005 103+2005
[1006]请说降低一度的学习指令[103]恭喜你[2006]降低一度学习成功 1006 0x00 39 NO NO NO NO 0 自定义 1006 103+2006

增加对应的播报音

添加到CI14LP_SDK_ASR_Offline_V1.0.28\projects\offline_asr_sample\firmware\voice\src文件夹下。

5.3 离线命令词自学习默认命令词

目前命令词自学习的demo针对唤醒词/命令词做了一套标准流程。如果用户需要使用命令词自学习功能,需要更新语言模型(ASR)、命令词表格和播报音。具体方法如下:

语言模型(ASR)新增命令词列表:

学习唤醒词

学习命令词

重新学习

退出学习

我要删除

删除唤醒词

删除命令词

退出删除

全部删除

说明

语言模型(ASR)目前只支持中文模型(其中低误识模型除外)。

命令词表格增加的命令词:

学习唤醒词 200 0x00 39 NO NO NO NO 0 自定义 200
学习命令词 201 0x00 39 NO NO NO NO 0 自定义 201
重新学习 202 0x00 41 NO NO NO NO 0 自定义 200 201
退出学习 203 0x00 41 NO NO NO NO 0 自定义 203
我要删除 204 0x00 41 NO NO NO NO 0 自定义 204
删除唤醒词 205 0x00 39 NO NO NO NO 0 自定义 205
删除命令词 206 0x00 39 NO NO NO NO 0 自定义 206
退出删除 207 0x00 41 NO NO NO NO 0 自定义 207
全部删除 208 0x00 41 NO NO NO NO 0 自定义 208

如果对命令词列表中**命令词ID**进行修改,还需要同步修改自学习示例工程中应用层的 cicwsl_func_index 枚举(CI14LP 的 offline_asr_sample 默认工程不包含该应用层文件,请以原厂提供的自学习示例工程为准),枚举如下:

typedef enum
{
    CWSL_REGISTRATION_WAKE          = 200,      ///< 命令词:学习唤醒词
    CWSL_REGISTRATION_CMD           = 201,      ///< 命令词:学习命令词
    CWSL_REGISTER_AGAIN             = 202,      ///< 命令词:重新学习
    CWSL_EXIT_REGISTRATION          = 203,      ///< 命令词:退出学习
    CWSL_DELETE_FUNC                = 204,      ///< 命令词:我要删除
    CWSL_DELETE_WAKE                = 205,      ///< 命令词:删除唤醒词
    CWSL_DELETE_CMD                 = 206,      ///< 命令词:删除命令词
    CWSL_EXIT_DELETE                = 207,      ///< 命令词:退出删除模式
    CWSL_DELETE_ALL                 = 208,      ///< 命令词:全部删除

    CWSL_DATA_ENTERY_SUCCESSFUL     = 209,      ///< 播报:学习成功
    CWSL_DATA_ENTERY_FAILED         = 210,      ///< 播报:学习失败
    CWSL_REGISTRATION_SUCCESSFUL    = 211,      ///< 播报:学习成功
    CWSL_TEMPLATE_FULL              = 212,      ///< 播报:学习模板超过上限
    CWSL_SPEAK_AGAIN                = 1007,     ///< 播报:请再说一次>
    CWSL_TOO_SHORT                  = 1008,     ///< 播报:语音长度不够,请再说一次>

    CWSL_DELETE_SUCCESSFUL          = 213,      ///< 播报:删除成功
    CWSL_DELETE_FAILED              = 214,      ///< 播报:删除失败
    CWSL_DELETING                   = 215,      ///< 播报:删除中
    CWSL_DONT_FIND_WORD             = 216,      ///< 播报:找不到删除的词
    CWSL_REGISTRATION_ALL           = 217,      ///< 播报:学习完成
    CWSL_REG_FAILED                 = 218,      ///< 播报:学习失败
}cicwsl_func_index;

需要增加播报音:

image-cwls

5.4 离线命令词自学习使用步骤

5.4.1 学习功能

学习功能可设置一次学习和两次学习,功能逻辑如下。

一次学习:

唤醒词学习:系统唤醒状态下,用户通过念命令词“学习唤醒词”进入学习模式。根据播报语音提示,念一次自定义的唤醒词完成学习。学习完成后,语音播报“学习成功”。

命令词学习:系统唤醒状态下,用户通过念命令词“学习命令词”进入学习模式。根据播报语音提示,念一次自定义的命令词完成学习,系统会继续学习下一个命令词,直到学习完成。如果中途退出学习状态,下次再学习会接着上次退出时的位置继续学习。

两次学习:

唤醒词学习:系统唤醒状态下,用户通过念命令词“学习唤醒词”进入学习模式。根据播报语音提示,念第一遍自定义的唤醒词,学习成功后念第二遍,会和第一遍进行比对,如果相同则学习成功。如果不同会提示学习失败并重新学习该词。

命令词学习:系统唤醒状态下,用户通过念命令词“学习命令词”进入学习模式。根据播报语音提示,念第一遍自定义的命令词,学习成功后念第二遍,会和第一遍进行比对,如果相同则学习成功。如果不同会提示学习失败并重新学习该词。

5.4.2 重新学习功能

一次学习:

当上一个词学习的不对或者被周围干扰人声误学习时,可以念命令词“重新学习”,系统会播报语音提示,重新学习上一个词。

两次学习:

当学习的第二遍与第一遍不同时,系统会自动重新学习该词,无需语音控制。

5.4.3 退出学习功能

进入学习模式后,用户可以念命令词“退出学习”,即可退出学习模式。

5.4.4 删除功能

用户通过念命令词“我要删除”进入删除模式,此时支持三种方式进行删除。方式一:全部删除,用户念该命令词时,会删除注册的所有唤醒词和命令词。方式二:删除唤醒词,用户念该命令词时,会删除注册的所有唤醒词。方式三:删除命令词,用户念该命令词时,会删除注册的所有命令词。

5.4.5 退出删除功能

进入删除模式时,用户可以念命令词“退出删除”退出删除模式。

5.5 离线命令词自学习注意事项

学习必须在安静环境下、正常语速、声音洪亮、距离1米内。

学习的词字数为2到5个。

学习模板最大支持16个。

语言模型(ASR)目前只支持中文模型(其中低误识模型除外),且模型节点数建议5000以下(例如下图开机打印中arcs 3584即节点数)

image-cwls

6 离线命令词自学习Q&A

Q1:如何进入学习模式?

A1:唤醒后(标准demo的唤醒词为“智能管家”),念命令词“学习唤醒词”或者“学习命令词”就可以进入学习模式。

Q2:如何退出学习模式?

A2:退出方式有两种,第一种用户主动退出,唤醒后,进入学习模式后,通过念命令词”退出学习“可以退出注册模式。第二种:每次学习成功后,系统自动退出学习模式,进入识别模式。

Q3:如果进入学习模式,念语音无任何反馈,怎么处理?

A3:原因一:可能是声音太小了,学习时提高了VAD的阈值,解决方式:保持和设备的距离在0.5米内,声音洪亮进行学习。原因二:系统退出唤醒状态了,解决方式:唤醒后重新进入学习模式就可解决。