更新时间:2023-08-09 09:25:02下载pdf
本文介绍 IPC(IP Camera)设备的日夜切换函数的调用和内部处理流程。
日夜切换用于切换 IPC 设备的 白天模式 和 夜间模式,区别在于 IR-CUT (infrared cut)器件的开启和关闭。
当设备位于白天模式时:设备关闭红外灯,镜头的 IR-CUT 器件切换为禁止透过红外光模式。此时,透过可见光、过滤掉红外光,视频显示彩色画面。
当设备位于夜间模式时:设备开启红外灯,镜头的 IR-CUT 器件切换为全透光模式。此时,透过可见光、透过红外光,视频显示黑白画面。
组件通过调用底层接口获取光敏传感器(硬光敏)或 ISP 计算画面亮度(软光敏)的方式,获取当前环境亮度,通过内部逻辑判断当前日夜状态,并通过发送消息通知其他组件对红外灯、IR-CUT 和 DSP 模式等进行控制,实现与设备环境匹配的日夜切换功能。
关联组件
tkl_media
:用于获取软光敏亮度值。实现载入日夜对应图像效果,控制帧率和彩色/黑白模式切换等app_sys_msg
:用于发送日夜切换控制消息app_user_event
:用于接收和执行日夜切换控制消息app_sys_ad
:用于获取硬件光敏值(可选)TY_SYS_DN_ATTR_S
,指定场景触发判断时间间隔、切换临界场景连续触发次数等,设置获取底层外设参数回调从对应设备获取光敏亮度值。ty_sys_dn_switch_init
。typedef struct TY_SYS_DN_ATTR_
{
unsigned int u32lock_time; ///< 1 分钟连续 5 次切换上锁时长,0 则不上锁
unsigned int u32trigger_interval; ///< 场景触发判断时间间隔(s),不为 0
unsigned int u32trigger_times; ///< 切换临界场景连续触发次数,不为 0
int s32day2night_threshold; ///< 白天切换阈值
int s32night2day_threshold; ///< 夜晚切换阈值
int whiteled_patch1; ///< 白光灯补偿
int whiteled_patch2; ///< 白光灯补偿
TKL_ISP_DN_MODE_E e32init_mode; ///< 初始模式(默认白天)
TY_GET_PERIPHERAL_PARAM_CB get_peripheral_param_cb; ///< 获取底层外设参数(必要)
} TY_SYS_DN_ATTR_S;
初始化日夜切换功能,启动日夜切换线程。输入参数必须提供 get_peripheral_param_cb
,设置初始模式,u32trigger_interval
、u32trigger_times
不能为 0
。
/**
* @brief
*
* @param dn_attr
* @return int
*/
int ty_sys_dn_switch_init(TY_SYS_DN_ATTR_S *dn_attr);
/**
* @brief 使能日夜切换
*
* @param on_off 0-off 1-on
*/
void ty_sys_dn_set_enable(bool on_off);
/**
* @brief 获取日夜开关状态
*
* @param on_off 0-off 1-on
*/
void ty_sys_dn_get_enable(bool *on_off);
/**
* @brief
*
* @param mode day and night mode
*/
void ty_sys_dn_set_config_mode(TKL_ISP_DN_MODE_E mode);
/**
* @brief
*
* @param mode
*/
void ty_sys_dn_get_config_mode(TKL_ISP_DN_MODE_E *mode);
/**
* @brief
*
* @return int
*/
int ty_sys_dn_get_cur_mode(void);
/**
* @brief 获取当前日夜切换模式
*
* @param mode
*/
void ty_sys_dn_get_cur_mode_config(TKL_ISP_DN_MODE_E *mode);
/**
* @brief 日夜切换全彩模式初始化
*
* @param dn_attr
* @param color_mode_init
* @return int
*/
int ty_sys_dn_color_mode_init(TY_SYS_DN_ATTR_S *dn_attr, int color_mode_init);
/**
* @brief 设置 siren 开关接口
*
* @param status
* @return int
*/
int ty_sys_siren_switch(int status);
/**
* @brief 设置切换点阈值
*
* @param s32day2night_threshold 白天切夜视阈值
* @param s32night2day_threshold 夜视切白天阈值
* @return void
*/
void ty_user_dn_threshold_set(int s32day2night_threshold, int s32night2day_threshold);
/**
* @brief 设置白光灯亮灯的事件和白光灯亮灯时长
*
* @param human_flag 人形事件
* @param flight_warn_on_off 子设备报警检测开关事件
* @param whiteled_time 白光灯亮灯时长
* @return int
*/
void ty_user_dn_light(int human_flag, int flight_warn_on_off, int whiteled_time);
确认 IR-CUT 物料的极性是否配错了,白天配成了白片,导致红外光也入射到传感器表面。
一般是日夜切换阈值不合适,需要修改日夜切换阈值,修改建议如下:
当 IPC 附近有镜面物体时,会有较多红外光从镜面物体反射回镜头,导致日夜切换算法的原始数据出现偏差,算法认为当前需要将 IPC 停留在夜视。
此时建议优先考虑挪开镜面物体或者更换 IPC 摆放位置,其次再考虑尝试修改日夜切换的阈值。
跟上一个常见问题的原因类似,当 IPC 附近有镜面物体时,会有较多红外光从镜面物体反射回镜头,导致日夜切换算法的原始数据出现偏差,算法计算结果会在白天或夜视之间变化。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈