【ChipIntelli 系列】6-合成语言模型(asr 和 dnn文件夹)和多网络(多语种)切换

①、合成语言模型(dnn)的步骤

打开 ChipIntelli 的AI开发平台,找到组件开发的语言模型开发。
image
在页面中编辑语料
image
然后下载文件
image
 
共有两个文件夹:CmdWordStructureGfstCmd
image
请按如下步骤拷贝两个文件夹下的文件融合进到SDK中:
1、拷贝 (融合)CmdWordStructure 文件夹下的[60000]{cmd_info}.xlsCI130X_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  中的播报音是默认的,用户需要自己修改
image
 
网络的功能:
image
 
 

②、多网络(多语种)切换基础——切换模型函数

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);
    }
}

 

posted @ 2025-09-23 21:21  FBshark  阅读(22)  评论(0)    收藏  举报