跳转至

CI130X 算法SDK开发流程


1. 概述

CI130X_SDK_ALG_PRO_2.1.X版本主要包含了以下算法功能:

算法名称 算法说明
VPR 声纹注册功能
WMAN_VPR 男女声纹检测功能
SED_CRY 哭声检测功能
SED_SNORE 鼾声检测功能
DENOISE_NN 深度降噪功能
DOA 声源定位功能
AEC 回声消除
DERVERB 降混响

注意

声纹注册、男女声纹检测、哭声鼾声检测算法,涉及收费,未烧录量产密码,固件每五分钟会复位一次,如有量产需求,请联系启英泰伦商务。

算法功能组合:

开启算法 说明
ASR 只开识别,不开任何算法
ASR+深度降噪 同时开启识别加深度降噪功能
ASR+声源定位 同时开启识别加DOA功能
ASR+声纹 同时开启识别加声纹功能
ASR+男女声纹 同时开启识别加男女声纹功能
ASR+深度降噪+AEC 同时开启识别、深度降噪、AEC功能
ASR+深度降噪+降混响 同时开启识别、深度降噪、降混响功能
哭声检测 哭声检测不支持识别和其他算法功能
鼾声检测 鼾声检测不支持识别和其他算法功能

注意

除了上表算法组合功能,不支持其他组合,请勿随意组合算法功能,否则会出现sdk编译异常或者运行故障。

模型ID定义:

使用不同的前端算法模型,模型ID编号不同。

模型ID 模型类型
60001 声纹模型
60002 哭声检测模型
60003 NN降噪模型
60004 DOA模型
60005 鼾声检测模型
60006 通话降噪模型
60007 TTS模型
60008 男女声纹模型

2. 算法SDK使用说明

以声纹注册算法为例说明开启对应功能需要的步骤。

开启算法:

在projects\offline_asr_alg_pro_sample\project_file/makefile文件中对CI_ALG_TYPE进行修改,CI_ALG_TYPE := $(USE_VPR)。

图3-1 dnn模型

dnn文件夹更换声学模型与算法模型:

在projects\offline_asr_alg_pro_sample\firmware\dnn文件中,更换与makefile文件里CI_ALG_TYPE对应的算法模型,

图3-1 dnn模型

可在external\model\vpr(声纹注册)文件夹中,复制拷贝已有的算法模型。

图3-3 打包升级工具

注意

  1. 深度降噪算法有特定模型。
  2. 哭声鼾声检测算法不支持语音识别,dnn声学模型可用[0]reserve.bin代替。
  3. 其他具备识别功能的,选择对应的pro模型。

2.1. 声纹注册算法

声纹注册功能当前推荐最多注册4个人,人数越多会影响注册效果,如需注册更多人数,需确认效果达到使用要求。

1. 打开makefile文件,对CI_ALG_TYPE修改为CI_ALG_TYPE := $(USE_VPR)

2. 该算法参数宏说明,在projects\offline_asr_alg_pro_sample\src\user_config.h文件中

#if     USE_VPR
#define VP_USE_FRM_LEN                  1200      //声纹计算的窗长,单位为ms, 建议范围1200-1500,值越大消耗内存越多(每增加100,内存增加8KB)
#define VP_CMPT_SKIP_NUM                0         //-不可修改
#define VP_THR_FOR_MATCH                (0.52f)   //声纹阈值-建议范围(0.48-0.68),值越大,灵敏度越低,误识越低,识别率下降,需要更严格的匹配注册的模版
#define VP_THR_FOR_SAME_MATCH           (0.50f)   //同一用户,判断是否重复所用声纹阈值-不可修改
#define VP_SLIDE_TIME_PER_CMPT          3         //声纹每次计算,滑窗-不可修改
#define VP_REC_TIMES                    3         //声纹注册时重复录入次数 -注册时的次数
#define MAX_VP_TEMPLATE_NUM             3         //声纹识别功能允许的最大模版(用户)数,最大4个 重要说明:每个模版单次约占0.8KB NV空间,三次2.4KB

#define MAX_VP_REG_TIME                 10        //注册声纹时最大超时等待时间(秒)
#define NVDATA_ID_VP_NUMBER             0xA0000001      //存储模板数量NV基地址 -不可修改
#define NVDATA_ID_VP_INFO               0xA0000002      //存储模板ID NV基地址,每个用户模版数是重复录入次数-不可修改
                                                        //输出给用户的id就是(地址-0xA0000002/VP_REC_TIMES 
#define NVDATA_ID_VP_MODE               0xA0000003      //存储模板NV基地址 -不可修改
#if (MAX_VP_TEMPLATE_NUM > 4)
#error "The vpr template num max 4\n"
#endif
#endif

3. 该算法相关应用函数,在components\VPR\voice_print_recognition.c文件中

声纹注册:调用接口:vpr_start_regist

/**
 * @brief 开始注册声纹模板
 * @return 0:启动声纹注册成功; -1:启动声纹注册失败。
 */
int vpr_start_regist();

声纹识别:注册之后,识别到命令词之后,调用 vpr_run_one_recognition,进行识别

/**
 * @brief 执行一次声纹识别
 * @return 0:没有错误; 非0:错误号。
 */
int vpr_run_one_recognition();

删除声纹:调用 vpr_clear 删除指定声纹模板,调用 vpr_clear 删除所有模板

/**
 * @brief 删除指定的声纹模板
 * @return 0:没有错误; -1:指定的模板号非有效模板(未注册或者已被删除)。
 */
int vpr_delete();

/**
 * @brief 删除所有声纹模板
 * @return 0:没有错误; 非0:错误号。
 */
int vpr_clear();

4. projects\offline_asr_alg_pro_sample\firmware\dnn文件夹中,声纹注册算法请选择[60001]VPR_model_v00xx.bin算法模型

注意

  1. 声纹注册算法,涉及收费,需烧录license,具备license的芯片正常运行,无license的芯片每五分钟会进行复位,如有量产需求,请联系启英泰伦商务。
  2. 固件打包时,如果NV data分区空间过小,影响模板数据存储,导致无法正常识别已注册的声纹。

2.2 男女声纹检测算法

男女声纹检测算法主要采用深度学习方法对说话人声进行判定是男声或女声以此来执行不同的操作。

1. 打开makefile文件,对CI_ALG_TYPE修改为CI_ALG_TYPE := $(USE_WMAN_VPR)

2. 该算法参数宏说明,在projects\offline_asr_alg_pro_sample\src\user_config.h文件中

#if USE_WMAN_VPR
#define VP_USE_FRM_LEN                  1200                            //声纹计算的窗长,单位为ms,建议范围1200-1500,值越大消耗内存越多(每增加100,内存增加8KB)
#define VP_CMPT_SKIP_NUM                0
#define NVDATA_ID_VP_NUMBER             NVDATA_ID_VP_MOULD_INFO         //存储已添加了的模板数量-不可修改
#define VP_SLIDE_TIME_PER_CMPT          1                               //声纹每次计算,滑窗的次数-不可修改
#endif

3. 该算法相关应用函数,在components\VPR\voice_print_wman_recognition.c文件中

/**
 * @brief 执行一次声纹识别
 * @return 0:没有错误; 非0:错误号。
 */
int vpr_run_one_recognition()

4. projects\offline_asr_alg_pro_sample\firmware\dnn文件夹中,男女声纹检测算法请选择[60008]VGR_model_xxxx_vx算法模型

注意

  1. 男女声纹检测算法,涉及收费,需烧录license,具备license的芯片正常运行,无license的芯片每五分钟会进行复位,如有量产需求,请联系启英泰伦商务。

2.3 哭声与鼾声检测算法

哭声鼾声检测算法,不支持语音识别功能。

1. 打开makefile文件,对CI_ALG_TYPE进行修改,哭声算法修改成CI_ALG_TYPE := $(USE_SED_SNORE),鼾声算法修改成CI_ALG_TYPE := $(USE_SED_SNORE)

2. 该算法参数宏说明,在projects\offline_asr_alg_pro_sample\src\user_config.h文件中

#if USE_SED_CRY || USE_SED_SNORE
#if 0
#define USE_SED                         1         //事件检测:1-开启/0-关闭      //不可修改
#define SED_DETECTED_GPIO_BASE          PA        //哭声检测用的GPIO配置-根据板级自行配置
#define SED_DETECTED_GPIO               PA5
#define SED_DETECTED_GPIO_PIN           pin_5
#define SED_DETECTED_DEFAULT_VAL        1         //默认输出电平
#endif
#define NO_ASR_FLOW                     1         //不可修改
#if     USE_SED_CRY
#define THRESHOLD_CRY                   0.55f     //可根据具体需求修改,范围为(0~1)float类型-建议范围(0.5-0.6f),值越大,灵敏度越低
#define TIMES_CRY                       3         //可根据具体需求修改,最大5次(算法计算几次给结果)
#elif   USE_SED_SNORE
#define THRESHOLD_SNORE                 0.53f     //可根据具体需求修改,范围为(0~1)float类型-建议范围(0.5-0.6f),值越大,灵敏度越低
#define TIMES_SNORE                     3         //可根据具体需求修改,最大5次(算法计算几次给结果)
#endif
#define UART_PROTOCOL_VER               1         //语音模块协议版本号:1,一代协议。2,二代协议,255,平台生成协议-不可修改

#if TIMES_CRY > 5
#error "The times should be less than or equal to 5\n"
#endif        
#endif

3. 该算法相关应用函数,在projects\offline_asr_alg_pro_sample\src\sed_app_host.c文件中

/**
 * @brief 声音检测,打印当前检测值,值越高说明该音频是目标音频的概率就越高
 */
void sed_rslt_cb();

/**
 * @brief 检测到声音输出函数
 */
void sed_rslt_out(void)

4. projects\offline_asr_alg_pro_sample\firmware\dnn文件夹中,哭声检测算法请选择[60002]sed_cryx_mxx.bin算法模型,鼾声检测算法请选择[60005]sed_snorex_mxx.bin算法模型

注意

  1. 哭声与鼾声检测算法,涉及收费,需烧录license,具备license的芯片正常运行,无license的芯片每五分钟会进行复位,如有量产需求,请联系启英泰伦商务。
  2. 哭声鼾声检测算法不支持语音识别,dnn声学模型可用[0]reserve.bin代替。

2.4 深度降噪算法

深度降噪算法针对不同的应用领域需要使用不同的模型,当前版本默认提供了烟机和窗帘的降噪模型。

1. 打开makefile文件,对CI_ALG_TYPE修改为CI_ALG_TYPE := $(USE_DENOISE_NN)

2. projects\offline_asr_alg_pro_sample\firmware\dnn文件夹中,深度降噪算法请选择[60003]nn_denoise_xx.bin算法模型

2.5 声源定位算法

doa算法为双mic算法,当前版本支持0-180度检测范围,分辨率为10°,推荐麦间距为4cm。

1. 打开makefile文件,对CI_ALG_TYPE修改为CI_ALG_TYPE := $(USE_AI_DOA)

2. 该算法参数宏说明,在projects\offline_asr_alg_pro_sample\src\user_config.h文件中

#if USE_AI_DOA
#define AI_DOA_OUT_TYPE                 3         //doa输出类型:1-唤醒词输出角度  2-命令词输出角度 3-唤醒次和命令词都输出角度
#endif
3. 该算法相关应用函数,在projects\offline_asr_alg_pro_sample\src\doa_app_handle.c文件中

/**
 * @brief 角度信息输出
 */
void ci_doa_get_cb(int audio_state, int doa_angle)

4. projects\offline_asr_alg_pro_sample\firmware\dnn文件夹中,声源定位算法请选择[60004]nn_dual_mic_doa_vxxxx.bin算法模型

注意

  1. 当前CI130X_SDK_ALG_PRO_2.1.X版本声源定位算法,支持多种不同方式输出角度信息,可通过AI_DOA_OUT_TYPE宏来设置。