跳转至

AWB Online Calibration 快速入门

1. 概述与作用

本样例演示 Hi3516CV610 上 ISP AWB(自动白平衡)在线标定流程,隶属于 ISP 调校域,解决量产 sensor 个体白平衡增益偏差,通过灯箱下读取 lightbox gain 并与 golden sample 增益按 alpha 混合,输出该模组的修正 rgain/bgain,供产线或研发写入 sensor 配置。

专业名词与缩写:

  • AWB — Auto White Balance,自动白平衡,调整 R/G/B 增益使白色真实还原
  • AWB Calibration — 白平衡标定,计算当前 sensor 的 rgain/bgain
  • Golden Sample — 金样,标定基准 sensor
  • Lightbox Gain — 灯箱环境下测得的 AWB 增益,通过 ss_mpi_isp_get_lightbox_gain 获取
  • AE — Auto Exposure,自动曝光,标定前需 AE 稳定
  • Antiflicker — 抗闪烁,固定 50Hz/60Hz 防止灯光闪烁
  • Alpha blending — 增益混合,gain = (sample_gain*(1024-alpha) + golden_gain*alpha) >> 10,alpha 范围 [0,1024]

注意

本文默认sensor为HY006-3814-0011,如需适配新sensor,请参考《Sensor 调试指南》和《Sensor适配说明》

2. 执行准备

在编译本样例之前,请参照Hi3516CV610环境搭建指南和快速上手指南完成编译环境的搭建。

2.1 编译

进入样例目录执行 make 即可完成编译:

cd samples/mpp/awb_online_calibration && make

编译成功之后,在当前目录下会生成一个sample_awb_calibration的可执行文件,可以放社区支持的开发板上运行。

2.2 加载 KO

ko加载脚本位于 output/mpp/ko/load_ko,有两个脚本,load3516cv610_20s和load3516cv610_20s_debug。区别为load3516cv610_20s_debug脚本会打开 logmpp_show=1(日志记录)、proc_show=1(proc信息打印),并将 mem_process_isolation 置为 0(不启用进程间mmz隔离)。

由于当前版本不支持进程间mmz隔离,因此需要在load3516cv610_20s脚本中将 mem_process_isolation 置为 0或者使用load3516cv610_20s_debug脚本,此处以load3516cv610_20s_debug脚本为例,20s内存大小为128MB,默认分配为 32MB OS、96MB MMZ,加载命令为:

./load3516cv610_20s_debug -i

可以通过-h命令查看具体用法:

./load3516cv610_20s_debug -h
Usage:  ./load3516cv610_20s_debug [-option] [-sensor0~1] 
options:
    -i                       insert modules
    -r                       remove modules
    -a                       remove modules first, then insert modules
    -sensor0~1 sensor_name   config sensor type    [default: hy006_3814_0011]
    -mmz_start               config MMZ start addr [default: 0x42000000]
    -mmz_size                config MMZ mem size [unit: M, default: 96M]
    -ir_auto                 config ir_auto enable [default: 0]
    -profile                 config sys_profile [default: 0]
    -h                       help information
Available sensors:hy006_3814_0011 bt1120/bt656/bt601
for example: ./load3516cv610_20s_debug -i -sensor0 hy006_3814_0011 -sensor1 hy006_3814_0011 -mmz_start 0x42000000 -mmz_size 96M -ir_auto 1

如果需要调整os和mmz的大小,需要参考《内存布局调整指南》对内存大小进行调整。

如果是使用社区默认提供的镜像,这些ko已经打包到文件系统中,烧录到单板上后位于/ko目录下,在系统启动后会自动加载这些ko。

2.3 运行时依赖

在运行样例前,需要提前准备:

  • 硬件:灯箱(D65/TL84/A 等标准光源)与 sensor 模组,光源不标准或镜头未对准会导致 gain 偏离参考值。

  • 指定运行时依赖的so库路径

MPP样例依赖的so库位于soc/libs/musl下,需要将该目录下的so库拷贝到开发板上(或将这些so库所在的目录挂载到开发板上),并指定运行时依赖库的环境变量,假设这些so库位于/mnt/libs/,执行如下命令:

```shell
export LD_LIBRARY_PATH=/mnt/libs/:$LD_LIBRARY_PATH
```

如果是使用社区默认提供的镜像,这些so库已经打包到文件系统中,烧录到单板上后位于/usr/lib目录下,该目录是系统默认搜索目录,不需要执行export LD_LIBRARY_PATH命令去指定。

  • 启动MPP服务

当前MPP媒体模块处于用户态,通过一个独立进程提供相关接口的调用服务,该进程位于samples/mpp/sdk_server下,执行如下命令即可生成sdk_server可执行文件:

```shell
cd samples/mpp/sdk_server && make
```

在单板上执行./sdk_server &即可启动MPP服务。

  1. sdk_server同样依赖soc/libs/musl下的so库,因此也需要参照上述export LD_LIBRARY_PATH指定路径;
  2. 如果是使用社区默认提供的镜像,sdk_server进程已经打包到文件系统中,烧录到单板上后位于/usr/bin目录下,并在系统启动时会自动启动sdk_server。
  • 样例运行时候需要的资源文件

无文件依赖。

2.4 运行样例

调用语法:./sample_awb_calibration <mode> [golden_rgain] [golden_bgain] [alpha],可以执行./sample_awb_calibration -h查看用法。

image-20260810102258627

3. 支持的 Case 列表

调用语法:./sample_awb_calibration <mode> [golden_rgain] [golden_bgain] [alpha]

样例流程:启动 VI+VENC 预览 → 等用户回车 → 设置 antiflicker 50Hz → 等待 AE 稳定(20 帧内 5 帧稳定)→ 读取 lightbox gain → 计算/混合 → 打印结果 → 等回车退出。 交互菜单:

  • 启动后控制台 input anything to continue....,按回车进入标定阶段。
  • 标定完成打印结果后再次等待回车退出。

3.1 case 0

计算 sample gain(仅读取灯箱 AWB 增益,无混合)。

调用命令

./sample_awb_calibration 0

软件配置流程

  1. 初始化vio模块,参考函数sample_vio_sys_init。
  2. 启动vi模块,参考函数sample_vio_start_vi。
  3. vi绑定venc,参考函数sample_comm_vi_bind_venc。
  4. 等待ae状态稳定,参考函数awb_calib_check_ae_status。
  5. 标定AWB静态系数,参考函数awb_calib_get_corr_gain,参考接口ss_mpi_isp_get_lightbox_gain。
  6. 获取标定结果,参考接口ot_isp_awb_calibration_gain。
  7. 去初始化vi模块,参考函数sample_awb_cali_stop_prev。

数据流

image-20260821105058627

控制台输出日志

正常序列:

ISP is now running normally
set antiflicker enable and the value of frequency to 50_hz
input anything to continue....
calculate sample gain
    avg_rgain = X, avg_bgain = Y

AE 未稳定时打印 AE IS NOT STABLE,PLEASE WAIT,ISP 异常打印 ISP is not running normally!please check it。

正确性判断

  1. avg_rgain/avg_bgain 应在 sensor 标定范围内(通常 ≈ 1024 ± 几 %)。
  2. AE 稳定后再读取 lightbox gain,否则结果不可靠;若持续 AE IS NOT STABLE,检查光源与曝光配置。
  3. 控制台无 0x... 错误码,最终正常退出。

3.2 case 1

用 golden sample 混合修正 sample gain。

调用命令

./sample_awb_calibration 1 <golden_rgain> <golden_bgain> <alpha>

golden_rgain/golden_bgain取值范围[0,4095],alpha取值范围[0,1024]

软件配置流程

同 case 0。

数据流

同 case 0。

控制台输出日志

正常序列:

ISP is now running normally
set antiflicker enable and the value of frequency to 50_hz
input anything to continue....
adjust sample gain    
    avg_rgain = X, avg_bgain = Y

AE 未稳定时打印 AE IS NOT STABLE,PLEASE WAIT,ISP 异常打印 ISP is not running normally!please check it。

正确性判断

  1. avg_rgain/avg_bgain 应在 sensor 标定范围内(通常 ≈ 1024 ± 几 %)。
  2. alpha=1024 时结果应等于 golden_rgain/golden_bgain;alpha=0 时应等于 sample gain。
  3. AE 稳定后再读取 lightbox gain,否则结果不可靠;若持续 AE IS NOT STABLE,检查光源与曝光配置。
  4. 控制台无 0x... 错误码,最终正常退出。