【ChipIntelli 系列】6-合成语言模型(asr 和 dnn文件夹)和多网络(多语种)切换
①、合成语言模型(dnn)的步骤
打开 ChipIntelli 的AI开发平台,找到组件开发的语言模型开发。

在页面中编辑语料

然后下载文件

共有两个文件夹:
CmdWordStructure、GfstCmd
请按如下步骤拷贝两个文件夹下的文件融合进到SDK中:
1、拷贝 (融合)
CmdWordStructure 文件夹下的[60000]{cmd_info}.xls 到 CI130X_SDK\projects\offline_asr_sample\firmware\user_file\cmd_info文件夹下;2、拷贝
GfstCmd\[0]*.dat 文件到SDK的 CI130X_SDK\projects\offline_asr_sample\firmware\asr文件夹下;3、(如果是双网络或者多网络)拷贝
GfstWake\[1]*.dat 文件到SDK的 CI130X_SDK\projects\offline_asr_sample\firmware\asr文件夹下。(单网络不需要)此外,需要注意的是,
[60000]{cmd_info}.xls 中的播报音是默认的,用户需要自己修改
网络的功能:

②、多网络(多语种)切换基础——切换模型函数
cmd_info_change_cur_model_group
预定义的宏
// 多唤醒词网络切换
// 多唤醒网络切换使能 0:不使能;1:使能
#define MULTI_WAKE_UP_NET_SWITCH 0
// 切换唤醒词ID
#define SWITCH_WAKEWORD_ID 0
// 唤醒词网络总数
#define WAKE_UP_NET_TOTAL 0
// 切换播报提示id与唤醒网络序号的偏移量
#define PLAY_ID_OFFSET_SWITCH 0
函数void change_asr_wakeup_word(void)
/**
* @brief 切换唤醒模型,这个函数是sys msg任务调用,其他任务需要切换模型需要发送切换模型消息
* 通过sys msg任务调用
*/
void change_asr_wakeup_word(void)
{
#if USE_SEPARATE_WAKEUP_EN
if(MULTI_WAKE_UP_NET_SWITCH)
{
cmd_info_change_cur_model_group(sys_manage_data.wakeup_net);
}
else
{
cmd_info_change_cur_model_group(1);
}
ignore_asr_msg++;
sys_msg_t send_msg;
send_msg.msg_type = SYS_MSG_TYPE_CMD_INFO;
send_msg.msg_data.cmd_info_data.cmd_info_status = MSG_CMD_INFO_STATUS_ENABLE_PROCESS_ASR;
send_msg_to_sys_task(&send_msg, NULL);
#endif
}
函数:void change_asr_normal_word(void)
/**
* @brief 切换正常模型,这个函数是sys msg任务调用,其他任务需要切换模型需要发送切换模型消息
* 通过sys msg任务调用
*
*/
void change_asr_normal_word(void)
{
//.....
#if USE_SEPARATE_WAKEUP_EN
cmd_info_change_cur_model_group(0);
ignore_asr_msg++;
sys_msg_t send_msg;
send_msg.msg_type = SYS_MSG_TYPE_CMD_INFO;
send_msg.msg_data.cmd_info_data.cmd_info_status = MSG_CMD_INFO_STATUS_ENABLE_PROCESS_ASR;
send_msg_to_sys_task(&send_msg, NULL);
#endif
//.....
}
函数:void set_wakeup_net(uint8_t wakeup_net)
/**
* @arg:唤醒网络(本质是唤醒的组别)
* @brief:切换唤醒网络组别和全局变量设置,并将其写入FLASH中
*
*/
void set_wakeup_net(uint8_t wakeup_net)
{
if ((wakeup_net >= 1 && wakeup_net <= WAKE_UP_NET_TOTAL) && sys_manage_data.wakeup_net != wakeup_net)
{
cmd_info_change_cur_model_group(wakeup_net);
sys_manage_data.wakeup_net = wakeup_net;
cinv_item_write(NVDATA_ID_USER_WAKEUP_NET, sizeof(sys_manage_data.wakeup_net), &sys_manage_data.wakeup_net);
}
}

浙公网安备 33010602011771号