更新时间:2023-08-09 09:25:02下载pdf
音频检测主要分为分贝检测和哭声检测。
分贝检测:是指采集音频帧使用软件算法计算音频的分贝。
哭声检测:是指分析音频帧数据,判断是否有婴儿啼哭,实现看护功能。
采集 200 毫秒的音频数据,传递到检测算法。
计算音频帧所有振幅的平均值,得到分贝值。
业务层实时读取结果。建议 40~200 毫秒内读取一次,判断结果与阈值的大小,若超出阈值,触发声音报警。
每一帧音频帧传递到哭声检测队列中。
哭声检测线程,实时检测音频帧,并更新检测结果。如果检测到哭声,更新结果,并且检测线程休眠 1 秒,防止结果丢失。
业务层实时读取结果。建议 40~500 毫秒内读取一次。若值为 1
,则表示检测到哭声。
typedef enum {
...
TKL_MEDIA_DETECT_TYPE_BABY_CRY, // 婴儿哭声,baby cry
TKL_MEDIA_DETECT_TYPE_DB, // 声音分贝,audio decibel
...
} TKL_MEDIA_DETECT_TYPE_E;
typedef struct {
INT32_T val;
CHAR_T res[8];
} TKL_AUDIO_DETECT_RESULT_T; // DETECT result
IPC 设备,暂时只支持 1 路 AI,card
传 0
即可。
/**
* @brief audio input detect start
*
* @param[in] card: card number
* @param[in] type: detect type
*
* @return OPRT_OK on success. Others on error, please refer to tkl_error_code.h
*/
OPERATE_RET tkl_ai_detect_start(INT32_T card, TKL_MEDIA_DETECT_TYPE_E type);
/**
* @brief audio detect get result
*
* @param[in] card: card number
* @param[in] type: detect type
* @param[out] presult: audio detect result
*
* @return OPRT_OK on success. Others on error, please refer to tkl_error_code.h
*/
OPERATE_RET tkl_ai_detect_get_result(INT32_T card, TKL_MEDIA_DETECT_TYPE_E type, TKL_AUDIO_DETECT_RESULT_T *presult);
/**
* @brief audio input detect stop
*
* @param[in] card: card number
* @param[in] type: detect type
*
* @return OPRT_OK on success. Others on error, please refer to tkl_error_code.h
*/
OPERATE_RET tkl_ai_detect_stop(INT32_T card, TKL_MEDIA_DETECT_TYPE_E type);
// 分贝检测:
ret = tkl_ai_detect_start(0, TKL_MEDIA_DETECT_TYPE_DB);
...
ret = tkl_ai_detect_get_result(0, TKL_MEDIA_DETECT_TYPE_DB, &db_value);
...
// 判断分贝是否超出阈值,db_value.val 为分贝值
if (db_value.val >= phdl->sensitivity) {
phdl->db_flag = 1;
} else {
phdl->db_flag = 0;
}
...
ret = tkl_ai_detect_stop(0, TKL_MEDIA_DETECT_TYPE_DB);
// 哭声检测:
ret = tkl_ai_detect_start(0, TKL_MEDIA_DETECT_TYPE_BABY_CRY);
...
ret = tkl_ai_detect_get_result(0, TKL_MEDIA_DETECT_TYPE_BABY_CRY, (VOID*)&result);
if (result.val == 1) { //发现有婴儿哭声
TYDEBUG("find baby cry\n");
...
}
...
ret = tkl_ai_detect_stop(0, TKL_MEDIA_DETECT_TYPE_BABY_CRY);
不获取检测结果时,请调用 API 停止检测,节省性能。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈