跳转至

AOV功能说明


1. AOV功能介绍

本文是对AOV演示程序说明的内容补充,更加详细地介绍AOV功能。

如上图所示。Always On Video (AOV) 全天候视频监控方案专为户外监控场景设计,能够在低功耗条件下实现持续的智能监控,具体支持如下功能:

  1. 功能场景:实现低功耗全天候视频监控,在电池供电环境下长期运行

  2. 视频流处理:sensor→vif→isp→scl→venc→文件存储,支持H.264/H.265编码

  3. 智能检测:集成AI目标检测功能,支持人形、车辆等多目标识别

  4. 自适应帧率:根据检测结果在1 FPS(低功耗)和15 FPS(事件录制)间智能切换

  5. 多传感器支持:支持单/双传感器配置

  6. 补光控制:支持硬件光敏、软件光敏和Fast AE三种补光策略

  7. 音频支持:可选音频输入功能,在事件触发时录制音频


2. 参数说明

这里对于AOV Demo的所有可用参数作介绍:

2.1. 基本参数

  • index: 指定传感器索引,默认值:0

    index 1  # 3840x2160@21fps
    index 2  # 2016x1512@30fps
    index 3  # 1920x1080@30fps
    index 4  # 3264x2448@30fps
    index 6  # 3840x2160@30fps
    
  • dual_sensor: 启用双传感器模式,默认值:单传感器

    dual_sensor
    
  • model: 指定AI检测模型路径,默认值:/config/dla/spdy48.img

    model ./spdy48.img
    

2.2. 编码和存储参数

  • dump: 指定视频文件存储路径,默认值:当前目录

    dump /mnt/sdcard/video
    
  • store: 指定内存中缓存的视频帧数量,默认值:10帧

    store 10    # 缓存10帧后写入文件
    
  • time: 设置程序运行时间(秒),默认值:0(不限制)

    time 3600    # 运行1小时后退出
    

2.3. 图像质量参数

  • iqbin_b: 指定场景的IQ文件路径,默认值:无

    iqbin_b ./bright_api.bin
    

    iqbin默认打包至板端/config/iqfile路径。也可从sdk的/project/board/iford/iqfile/imx681路径下手动拷贝至板端。

    此处iqbin选择应与选择的index号对应,对应关系如下:

    index 1  # imx681_8m_comake_1201_30fps.bin
    index 2  # imx681_3m_comake_1201_30fps.bin
    index 3  # imx681_3m_comake_1201_30fps.bin
    index 4  # imx681_8m_comake_1201_30fps.bin
    index 6  # imx681_8m_comake_1201_30fps.bin
    

2.4. 补光控制参数

Note

该功能需要相应的驱动和硬件配合,在D2开发板上无法直接使用,需要自行配置,配置可见下文补光策略介绍部分。

  • aux_conv: 指定补光策略,默认值:不启用
    aux_conv 0    # 硬件光敏传感器
    aux_conv 1    # 软件光敏算法
    aux_conv 2    # Fast AE(需要传感器支持)
    

2.5. 系统配置参数

  • realtime: 启用VIF-ISP实时绑定模式,默认值:非实时
    realtime
    

2.6. 音频参数

Note

该功能暂不支持。

  • -ai: 启用音频输入

    -ai /mnt/sdcard/audio
    

    说明:用于使能audio的input,并指定录制的音频的存放路径。demo会在高帧率场景期间录制音频。


3. 工作模式说明

系统工作模式如下图所示:

工作流程

  1. 低帧率监控:以1 FPS持续监控,节省电量

  2. 智能检测:AI实时分析视频流,检测人形、车辆等目标

  3. 事件触发:检测到目标时自动切换到15 FPS高帧率

  4. 高清录制:事件期间录制高质量视频和音频

  5. 自动恢复:目标离开后,确认无目标后恢复低帧率

4. 硬件配置说明

当前demo中以下配置项虽然存在但实际使用有差异:

  • PIR传感器唤醒:板上没有PIR硬件,PIR目前是按键模拟。
  • 滤光片(IR-CUT)和补光LED:板上没有相应硬件,但有预留IR-CUT接口,相关操作目前没有效果,需自行配置,配置方法见下文。

5. 技术特性

5.1. 基础概念

5.1.1. AE (Auto Exposure) 自动曝光

AE是自动曝光控制的缩写,是相机图像处理的核心功能之一。它根据环境光照条件自动调整相机的曝光参数(光圈、快门、增益等),以确保获得亮度适宜的图像。

5.1.2. Fast AE 快速自动曝光

Fast AE是传感器提供的一种增强功能,能够在低帧率场景下快速响应环境光变化。当环境光照发生剧烈变化时,传统AE收敛较慢,可能导致画面过暗或过亮,而Fast AE能够显著缩短收敛时间,提升画质。

5.1.3. ISP (Image Signal Processor) 图像信号处理器

ISP是专门用于图像处理的硬件单元,负责从传感器接收原始图像数据,并进行一系列处理如降噪、白平衡、色彩校正、锐化等,最终输出高质量的视频流。

5.2. 补光策略

系统提供三种补光方案以适应不同环境:

5.2.1. 软件光敏

通过查询ISP AE收敛状态,在环境光变化时自动切换到高帧率辅助收敛,确保画面效果。

工作机制

  1. 查询ISP AE收敛状态 (bIsStable)

  2. 当检测到AE未收敛时,切换到高帧率模式

  3. 持续监控直到AE重新收敛

  4. 根据环境变化控制补光灯开关

5.2.2. 硬件光敏

使用硬件光敏传感器检测环境光照,根据lux值直接控制补光灯开关和曝光参数。

工作机制

  1. 读取硬件光敏传感器的lux值

  2. 与上一次lux值比较,检测光照变化

  3. 根据lux值确定环境光状态

  4. 控制补光灯开关和曝光参数

5.2.3. Fast AE

利用传感器Fast AE功能,在低帧率场景下快速响应环境光变化,特别适合支持该特性的传感器。

程序配置

// 在ST_Common_AovPipeInit中配置
MI_U32 u32StreamOutCnt = 10;    // Fast AE完成后输出帧数
MI_U32 u32DropCnt = 5;         // 丢弃帧数
MI_U32 u32RunThreshold = 3;    // 启动阈值

ST_Common_FastAE_InitIspConvParam(u32StreamOutCnt, u32DropCnt, u32RunThreshold);

5.3. 程序中的补光控制

5.3.1. 补光策略选择

通过 aux_conv 参数选择补光策略:

aux_conv 0    # 硬件光敏
aux_conv 1    # 软件光敏
aux_conv 2    # Fast AE

5.3.2. 补光控制函数

程序中的关键补光控制函数:

  • ST_Common_AovFastAE_Run() - 执行Fast AE

  • ST_Common_AovISPAdjust_HWLightSensor() - 硬件光敏调整

  • ST_Common_AovSWLightSensorProcess() - 软件光敏处理

5.3.3. 亮度切换处理

当检测到环境亮度变化时:

  1. 加载对应的IQ配置文件

  2. 控制补光灯开关

  3. 重新配置ISP参数

  4. 等待AE收敛完成

5.3.4. 补光控制配置实现

D2开发板上默认不配置光敏、滤光片、LED的驱动,但是所有的接口都已预留,可以自行配置增加使用。

光敏配置实现

  • 设备节点: /dev/light_sensor

  • 实现函数: SS_Light_Senosr_Get_LightSensor_Value() (sdk/verify/common/ss_light_sensor/ss_light_sensor_api.c)

  • 实现方式: 通过 ioctl 系统调用,使用 IOCTL_LIGHT_SENSOR_CONTROL_GET_LUX 命令获取lux值

  • 错误处理: 返回 ERR_HW_GETLUX_FAILED 或 ERR_HW_GETLUX_NOUPDATE 表示读取失败

滤光片(IR-cut)配置实现

  • 设备节点: /dev/light_misc

  • 实现函数: Dev_Light_Misc_Device_Set_Ircut() (sdk/verify/sample_code/libraries/light_misc_control/light_misc_control_user/light_misc_control_api.c)

  • 控制方式:

    E_SWITCH_STATE_ON: 开启IR-cut滤光片(白天模式)

    E_SWITCH_STATE_OFF: 关闭IR-cut滤光片(夜间模式)

    E_SWITCH_STATE_KEEP: 保持当前状态

  • 实现方式: 通过 ioctl 系统调用,使用 IOCTL_LIGHT_MISC_CONTROL_SET_IRCUT 命令

LED配置实现

  • 设备节点: /dev/light_misc

  • 实现函数: Dev_Light_Misc_Device_Set_Attr() (sdk/verify/sample_code/libraries/light_misc_control/light_misc_control_user/light_misc_control_api.c)

  • 控制模式:

    E_CONTROL_TYPE_LONG_TERM_ON: 长期开启

    E_CONTROL_TYPE_LONG_TERM_OFF: 长期关闭

    E_CONTROL_TYPE_MULTI_FRAME: 多帧模式

  • 实现方式: 通过 ioctl 系统调用,使用 IOCTL_LIGHT_MISC_CONTROL_SET_ATTR 命令

5.4. 帧率控制策略

  • 低帧率模式:1 FPS,功耗极低,适合长期监控
  • 高帧率模式:15 FPS,画质流畅,适合事件录制
  • 智能切换:基于AI检测结果自动切换,平衡功耗和画质

5.5. 存储管理

  • 文件分割:按帧率变化自动分割视频文件
  • 命名规则{序列号}_snr{传感器ID}_st{帧率}fps.es
  • 缓存机制:内存缓存多帧后批量写入,减少磁盘I/O
  • 完整性保证:使用fsync确保数据安全写入

其中序列号是会在每次帧率变化时增长,最终保存下来的文件可能是如下形式:

1_snr0_st_15fps.es
2_snr0_st_1fps.es
3_snr0_st_15fps.es
4_snr0_st_1fps.es
...

5.6. 外挂MCU以及SOC上下电方案

当SOC下电未完成,而此时恰好有事件触发导致SOC上电,可能会导致系统异常,相关说明和解决方案可参考外挂MCU以及SOC 上下电方案

6. API说明

6.1. ST_Common_AovGetDefaultAttr

  • 功能

    获取aov句柄的默认属性

  • 语法

    MI_S32 ST_Common_AovPipeGetDefaultAttr(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.2. ST_Common_AovSetSuspendTime

  • 功能

    设置系统的休眠时长,单位为秒,范围为[1s~2^32s)

  • 语法

    MI_S32 ST_Common_AovSetSuspendTime(MI_U32 u32SuspendSec);
    
  • 形参

    参数名称 描述 输入/输出
    u32SuspendSec 休眠的时长 输入
  • 返回值

    0:成功

    非0:失败

6.3. ST_Common_AovEnterSuspend

  • 功能

    系统进入休眠状态

  • 语法

    MI_S32 ST_Common_AovEnterSuspend(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.4. ST_Common_AovEnterLowPowerMode

  • 功能

    系统进入低电量模式,设备断电

  • 语法

    MI_S32 ST_Common_AovEnterLowPowerMode(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.5. ST_Common_AovEnterNormalPowerMode

  • 功能

    系统重启并进入正常电量模式

  • 语法

    MI_S32 ST_Common_AovEnterNormalPowerMode();
    
  • 形参

  • 返回值

    0:成功

    非0:失败

6.6. ST_Common_AovSetLowFps

  • 功能

    切换到低帧率

  • 语法

    MI_S32 ST_Common_AovSetLowFps(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入
  • 返回值

    0:成功

    非0:失败

6.7. ST_Common_AovSetHighFps

  • 功能

    切换到高帧率

  • 语法

    MI_S32 ST_Common_AovSetHighFps(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入
  • 返回值

    0:成功

    非0:失败

6.8. ST_Common_AovRemoteStatusCheck

  • 功能

    判断远端的连接状态

    此接口需要客户自定义实现

  • 语法

    ST_RemoteStatus_e ST_Common_AovRemoteStatusCheck(MI_U8 *pu8SimulateCmd);
    
  • 形参

    参数名称 描述 输入
    pu8SimulateCmd 使用字符来模拟远端的连接状态 输入
  • 返回值

    描述
    E_ST_REMOTE_CONNECTTING 和远端连接中
    E_ST_REMOTE_DISCONNECT 和远端已经断开连接

6.9. ST_Common_AovWakeupCheck

  • 功能

    检测设备被唤醒的方式

  • 语法

    ST_WakeupType_e ST_Common_AovWakeupCheck(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入
    pstAovHandle 根据pstAovHandle->stAutoTestParam.bAutoTest是否使能测试模式 输入
  • 返回值

    描述
    E_ST_WAKEUP_TIMER 定时器唤醒,对应rtc_alarm;如MCU取代RTC,对应MCU timer唤醒
    E_ST_WAKEUP_PIR PIR唤醒,对应rtc_io1;如MCU取代RTC,对应MCU PIR事件
    E_ST_WAKEUP_PREVIEW 用户预览唤醒,对应rtc_io0;如MCU取代RTC,对应MCU用户预览事件

6.10. ST_Common_AovOSCheck

  • 功能

    检测当前OS

  • 语法

    ST_OSType_e       ST_Common_AovOSCheck();
    
  • 形参

  • 返回值

    E_ST_OS_PURELINUX pure linux系统
    E_ST_OS_DUALOS dualos

6.11. ST_Common_AovBatteryLevelCheck

  • 功能

    检测设备的电量状态

    此接口需要客户自定义实现

  • 语法

    ST_BatteryLevel_e ST_Common_AovBatteryLevelCheck(MI_U8 *pu8SimulateCmd);
    
  • 形参

    参数名称 描述 输入/输出
    pu8SimulateCmd 使用字符来模拟电池的电量等级 输入
  • 返回值

    E_ST_BATTERYLEVEL_NORMAL 正常电量
    E_ST_BATTERYLEVEL_LOW 低电量

6.12. ST_Common_AovStreamCreate

  • 功能

    创建stream句柄,其本质上是一个stream list

  • 语法

    MI_S32 ST_Common_AovStreamCreate(ST_Common_AovStreamHandle_t *pstStreamHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstStreamHandle stream句柄 输出
  • 返回值

    0:成功

    非0:失败

6.13. ST_Common_AovStreamProduce

  • 功能

    提供stream,编码完成后添加到stream list

  • 语法

    MI_S32 ST_Common_AovStreamProduce(ST_Common_AovHandle_t *pstAovHandle, ST_Common_AovStreamHandle_t *pstStreamHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
    pstStreamHandle stream句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.14. ST_Common_AovStreamConsume

  • 功能

    将stream list消耗空,可选择写SD卡、发送数据到云端

  • 语法

    MI_S32 ST_Common_AovStreamConsume(ST_Common_AovHandle_t *pstAovHandle, ST_Common_AovStreamHandle_t *pstStreamHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
    pstStreamHandle stream句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.15. ST_Common_AovDetect

  • 功能

    IPU识别,依据检测结果更改状态值,并进行后处理(贴人形框)

  • 语法

    MI_S32 ST_Common_AovDetect(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.16. ST_Common_AovPipeInit

  • 功能

    初始化aov pipe

  • 语法

    MI_S32 ST_Common_AovPipeInit(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.17. ST_Common_AovPipeStart

  • 功能

    开始aov pipe

  • 语法

    MI_S32 ST_Common_AovPipeStart(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.18. ST_Common_AovPipeStop

  • 功能

    停止aov pipe

  • 语法

    MI_S32 ST_Common_AovPipeStop(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.19. ST_Common_AovPipeDeInit

  • 功能

    反初始化aov pipe

  • 语法

    MI_S32 ST_Common_AovPipeDeInit(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败

6.20. ST_Common_AovDoAudio

  • 功能

    音频输入输出

  • 语法

    MI_S32 ST_Common_AovDoAudio(ST_Common_AovHandle_t *pstAovHandle);
    
  • 形参

    参数名称 描述 输入/输出
    pstAovHandle aov句柄 输入/输出
  • 返回值

    0:成功

    非0:失败