SED算法使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0.0 | 05/09/2023 | |
1.1.0 | 12/14/2023 | |
1.1.1 | 01/23/2024 |
1. 概述¶
1.1. 算法说明¶
声音事件检测(Sound Event Detection, SED)是检测是否有对应声音事件的算法,目前支持小孩子哭声检测和咳嗽声检测。
model | 功能 | 类别 |
---|---|---|
sed/sed_tbs.img | babycry检测 | 0:negative 1:babycry |
sed/sed_tcs.img | cough检测 | 0:negative 1:cough |
sed/sed_tcbs.img | cough&babycry检测 | 0:negative 1:cough 2:babycry |
1.2. 注意¶
算法工作采样率为16kHz,输入长度为256个采样点(16ms)。
本算法使用16kHz采样率训练模型,测试时请播放采样率大于16kHz的音频。
2. API 参考¶
2.1. 功能模块API¶
API名称 | 功能 |
---|---|
IaaSed_GetBufferSize | 获取SED算法运行需要的内存大小 |
IaaSed_Init | 初始化SED算法 |
IaaSed_SetConfig | 设置SED算法参数 |
IaaSed_GetConfig | 打印SED算法参数 |
IaaSed_GetInputSamples | 获取SED算法输入的采样点数 |
IaaSed_LoadData | 加载算法运行数据 |
IaaSed_Run | SED算法处理 |
IaaSed_GetScore | 获取SED检测得分 |
IaaSed_Free | 释放SED算法资源 |
IaaSed_setCallbackFunc | 算法验证回调函数 |
2.2. IaaSed_GetBufferSize¶
-
功能
获取SED算法运行所需要的内存大小。
-
语法
int IaaSed_GetBufferSize(void);
-
形参
参数名称 描述 输入/输出 -
返回值
返回值为SED算法运行所需要的内存大小。
-
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
-
注意
该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。
-
举例
无。
2.3. IaaSed_Init¶
-
功能
初始化SED算法需要的内存。
-
语法
SED_HANDLE IaaSed_Init(AudioSedInit_t *sedInit);
-
形参
参数名称 描述 输入/输出 sedInit SED算法的初始化结构体指针 输入 -
返回值
返回值 结果 handle 成功 NULL 失败 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
-
注意
- SED算法仅支持16kHz采样率,16bit采样位宽。
-
举例
无。
2.4. IaaSed_SetConfig¶
-
功能
设置SED算法参数。
-
语法
int IaaSed_SetConfig(SED_HANDLE handle, AudioSedConfig_t* sedConfig);
-
形参
参数名称 描述 输入/输出 handle SED算法handle 输入 sedConfig SED算法参数设置结构体 输入 -
返回值
返回值 结果 0 成功 其他值 失败, 参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
2.5. IaaSed_GetConfig¶
-
功能
设置SED算法参数。
-
语法
int IaaSed_Run(SED_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle SED算法handle 输入 -
返回值
返回值 结果 0 成功 其他值 失败, 参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
2.6. IaaSed_GetInputSamples¶
-
功能
获取SED算法输入样本点长度。
-
语法
int IaaSed_GetInputSamples(SED_HANDLE handle,int* s32SampleLength);
-
形参
参数名称 描述 输入/输出 handle SED算法handle 输入 s32SampleLength 每个样本点长度 输出 -
返回值
返回值 结果 0 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
2.7. IaaSed_LoadData¶
-
功能
SED算法加载数据函数,IaaSed_LoadData函数不断获取数据,当数据达到可以检测阈值时返回1,否则返回0。
-
语法
int IaaSed_LoadData(SED_HANDLE handle, const short *data, int* detectFlag);
-
形参
参数名称 描述 输入/输出 handle 算法handle 输入 input 输入数据指针 输入 detectFlag 数据是否准备好的标记,1表示准备就绪 输出 -
返回值
返回值 结果 0 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
2.8. IaaSed_Run¶
-
功能
SED算法处理函数。
-
语法
int IaaSed_Run(SED_HANDLE handle, int* eventIndex);
-
形参
参数名称 描述 输入/输出 handle 算法handle 输入 eventIndex 事件发生类别,根据输入的模型不同,类别含义不同 输出 -
返回值
返回值 结果 0 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
-
举例
参考Demo code
2.9. IaaSed_GetScore¶
-
功能
获取SED检测得分
-
语法
int IaaSed_GetScore(SED_HANDLE handle, float *eventScore, int *eventNum);
-
形参
参数名称 描述 输入/输出 handle SED算法handle 输入 eventScore SED算法检测得分 输出 eventNum SED算法检测事件数目 输出 -
返回值
返回值 结果 0 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
2.10. IaaSed_Free¶
-
功能
释放SED算法的资源。
-
语法
int IaaSed_Free(SED_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle SED算法handle 输入 -
返回值
返回值 结果 0 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
-
注意
- 必须先调用IaaSed_Free,再释放供SED算法所使用的内存。
2.11. IaaSed_setCallbackFunc¶
-
功能
SED算法验证回调函数(暂不支持)。
-
语法
int IaaSed_setCallbackFunc(int(*log)(const char *szFmt, ...), int(*envSet)(char *key, char *par), int(*envGetString)(char *var, char *buf, unsigned int size), int(*envSave)(void), int(*readUuid)(unsigned long long *u64Uuid));
-
依赖
-
头文件: AudioSedProcess.h
-
库文件: libSED_LINUX.so/ libSED_LINUX.a
-
3. SED 数据类型¶
3.1. SED模块相关数据类型定义¶
数据类型 | 定义 |
---|---|
AudioSedInit_t | SED算法初始化数据结构体类型 |
AudioSedConfig_t | SED算法参数设置结构体类型 |
AudioSedMode_e | SED算法检测模式 |
SED_HANDLE | SED算法句柄类型 |
3.2. AudioSedInit_t¶
-
说明
定义SED算法的配置参数结构体。
-
定义
typedef struct{ int sampleRate; int bitWidth; int ipuMaxSize; int hadCreateDevice; char modelPath[SED_MAX_FILE_PATH_LEN]; }AudioSedInit_t;
-
成员
成员名称 描述 sampleRate 语音采样率 bitWidth 语音采样位宽 hadCreateDevice 是否创建过IPU device, 如果为1,则SED算法内部不会调用MI_IPU_CreateDevice ipuMaxSize 最大IPU模型大小,如果设为0,IPU模型大小为modelPath对应的模型大小;否则为ipuMaxSize大小; hadCreateDevice为1时,此参数无效 modelPath 检测模型地址 -
注意事项
- 采样位宽只支持16bit, 采样率只支持16kHz,通道只支持单通道。SED_MAX_FILE_PATH_LEN大小为256
-
相关数据类型及接口
3.3. AudioSedConfig_t¶
-
说明
定义SED算法参数结构体。
-
定义
typedef struct{ int smoothLength; float vadThreshold; AudioSedMode_e detectMode; float eventThreshold[SED_MAX_EVENT_NUM]; }AudioSedConfig_t;
-
成员
成员名称 描述 eventThreshold 声音事件检测阈值,取值范围[0,1] vadThreshold 声音事件检测VAD阈值,取值范围[-80, 0] detectMode 声音事件检测模式 smoothLength 当检测模式为IAA_ROBUST_MODE时的平滑长度 -
注意:
- SED_MAX_EVENT_NUM数值为2,如果加载的是sed_tbs.img,则只需设置第一个阈值即可{0.5,0},如果是sed_tcbs.img则设置{0.5,0.5}
-
相关数据类型及接口
3.4. AudioSedMode_e¶
-
说明
定义SED算法检测模式。
-
定义
typedef enum{ IAA_SENSTITVE_MODE = 0, IAA_ROBUST_MODE }AudioSedMode_e;
-
成员
成员名称 描述 IAA_SENSTITVE_MODE 灵敏模式,对声音事件较为灵敏 IAA_ROBUST_MODE 稳定模式,声音事件检测结果稳定,开启时会对结果进行平滑 -
相关数据类型及接口
3.5. SED_HANDLE¶
-
说明
定义SED算法的句柄类型。
-
定义
typedef void* SED_HANDLE;
-
成员
成员名称 描述 -
注意事项
无。
-
相关数据类型及接口
4. 错误码¶
SED API 错误码如表下所示:
错误码 | 宏定义 | 描述 |
---|---|---|
0x00000000 | ALGO_SED_RET_SUCCESS | SED运行成功 |
0x80000401 | ALGO_SED_RET_INVALID_LICENSE | LICENSE无效 |
0x80000402 | ALGO_SED_RET_INVALID_HANDLE | HANDLE无效 |
0x80000403 | ALGO_SED_RET_INVALID_SAMPLERATE | 采样率不支持 |
0x80000404 | ALGO_SED_RET_INVALID_BITWIDTH | 采样位数不支持 |
0x80000405 | ALGO_SED_RET_INVALID_MODEL | 模型不支持 |
0x80000406 | ALGO_SED_RET_INVALID_DETECT_MODE | 检测模式不支持 |
0x80000407 | ALGO_SED_RET_INVALID_THRESHOLD | 检测阈值不支持 |
0x80000408 | ALGO_SED_RET_INVALID_IPU_MAX_SIZE | IPU模型大小不支持 |
0x80000409 | ALGO_SED_RET_INVALID_VAD_THRESHOLD | VAD检测阈值不支持 |