跳转至

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:失败