SED算法使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0.0
  • Initial release
  • 05/09/2023
    1.1.0
  • add vad function
  • 12/14/2023

    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;
          char modelPath[SED_MAX_FILE_PATH_LEN];
      }AudioSedInit_t;
      
    • 成员

      成员名称 描述
      sampleRate 语音采样率
      bitWidth 语音采样位宽
      ipuMaxSize 最大IPU模型大小
      modelPath 检测模型地址
    • 注意事项

      • 采样位宽只支持16bit, 采样率只支持16kHz,通道只支持单通道。SED_MAX_FILE_PATH_LEN大小为256
    • 相关数据类型及接口

      IaaSed_Init

    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}
    • 相关数据类型及接口

      IaaSed_SetConfig

    3.4. AudioSedMode_e

    • 说明

      定义SED算法检测模式。

    • 定义

      typedef enum{
          IAA_SENSTITVE_MODE = 0,
          IAA_ROBUST_MODE
      }AudioSedMode_e;
      
    • 成员

      成员名称 描述
      IAA_SENSTITVE_MODE 灵敏模式,对声音事件较为灵敏
      IAA_ROBUST_MODE 稳定模式,声音事件检测结果稳定,开启时会对结果进行平滑
    • 相关数据类型及接口

      IaaSed_SetConfig

    3.5. 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检测阈值不支持