K230 VICAP SENSOR 参数分区参考
1. 概述
1.1 概述
ISP对sensor输出的信号进行实时处理的过程中,调优参数和标定参数对ISP处理方式以及图像的复原、增强有着关键的作用。在SDK中默认使用标定xml、auto json、manual json文件作为VICAP运行时导入的调优参数和标定参数配置。在快速启动模式下,默认参数导入方式耗时较高,因此提供了参数分区导入配置参数的方案。
本文档主要描述了制作参数分区及VICAP使用该分区的方法。
2. 制作流程参考
2.1 流程图
制作流程图如下:
图2-1 参数分区制作流程图
制作步骤如下:
2.2 制作步骤
2.2.1 转换头文件
以senosr:IMX335,分辨率:2592x1944为例
拷贝参数文件到转换头文件的目录
cp k230_sdk/src/big/mpp/userapps/src/sensor/config/imx335-2592x1944.xml k230_sdk/src/big/mpp/userapps/src/vicap/src/isp/sdk/t_frameworks/t_database_c/calibration_data/
cp k230_sdk/src/big/mpp/userapps/src/sensor/config/imx335-2592x1944_auto.json k230_sdk/src/big/mpp/userapps/src/vicap/src/isp/sdk/t_frameworks/t_database_c/calibration_data/
cp k230_sdk/src/big/mpp/userapps/src/sensor/config/imx335-2592x1944_manual.json k230_sdk/src/big/mpp/userapps/src/vicap/src/isp/sdk/t_frameworks/t_database_c/calibration_data/
跳转至转换操作目录(工具源码及脚本存放目录)
cd k230_sdk/src/big/mpp/userapps/src/vicap/src/isp/sdk/t_frameworks/t_database_c/calibration_data/
执行转换头文件工具 parse_convert.py ,将拷贝的三个配置文件解析并转换为一个参数头文件(转换工具建议使用python3.x)
python parse_convert.py -s imx335 -x imx335-2592x1944.xml -a imx335-2592x1944_auto.json -m imx335-2592x1944_manual.json > imx335_2592x1944_param_data.h
#ifndef __IMX335_CALIBRATION_H__
#define __IMX335_CALIBRATION_H__
#include "isp_database.h"
#include "k_autoconf_comm.h"
static const TUNING_PARAM_T database_tuning_param =
{
/* calib data */
...
/* auto data */
...
/* manual data */
...
/* dewarp data */
...
/* version_info */
}
#endif
转换后将得到如上的结构 体,共五个部分:
calib data、auto data、manual data分别由外部指定的配置文件解析生成
dewarp data需要根据实际配置替换在结构体中,参考dewarp参数配置
version info为转变换工具自动生成,描述sensor name以及创建日期
2.2.2 转换二进制文件
二进制文件由header、配置参数、padding、dewarp参数四个文件拼接而成,考虑到参数分区的实际分配大小,建议最多添加三组配置文件
2.2.2.1 header制作
修改 gen_database_param_bin_calib_header.c 中的FILENAME_00、FILENAME_01、FILENAME_02的定义,示例如下:
#define FILENAME_00 "imx335-2592x1944"
#define FILENAME_01 "ov9732-1280x720"
#define FILENAME_02 "ov9286-1280x720"
格式要求为驱动中对应的sensor名称-宽x高,如imx335-2592x1944的配置在驱动中对应的sensor name为imx335且分辨率为2592x1944,则修改FILENAME_0X为”imx335-2592x1944”,该定义将作为使用参数分区时的校验头,如果校验头不匹配,则会默认使用配置文件加载的方式进行读取,并在log中打印相应的警告提示,且校验头定义的名称唯一,不能重复。
可添加三组校验头,一旦顺序固定,则参数分区的顺序也需要与校验头同步,同步方法参考后文二进制文件制作。
修改定义后将该源码编译为可执行程序并执行,得到header: sensor_cfg_calib_header.bin
gcc -o main_header gen_database_param_bin_calib_header.c
./main_header
# 得到sensor_cfg_calib_header.bin
2.2.2.2 配置参数二进制文件制作
修改 gen_database_param_bin.c 中的 DATABASE_SELECT定义,通过外部编译时传入不同参数制作不同的配置二进制文件,示例如下:
#if DATABASE_SELECT == 0
#include "imx335_2592x1944_param_data.h"
#elif DATABASE_SELECT == 1
#include "ov9732_param_data.h"
#elif DATABASE_SELECT == 2
#include "ov9286_param_data.h"
// will append new header file to convert bin, you can make DATABASE_SELECT++, build need add flag "-DDATABASE_SELECT=?, ?:0, 1, 2..."
#endif
DATABASE_SELECT的编号决定了不同sensor配置参数的排列顺序,此顺序需要与header的顺序进行同步。示例中imx335_2592x1944_param_data.h、ov9732_param_data.h、ov9286_param_data.h由三组xml json生成。
编译源码并执行
DATABASE_CURRENT_DIR=$PWD
DATABASE_CFLAGS="-I$DATABASE_CURRENT_DIR/../include \
-I$DATABASE_CURRENT_DIR/../../t_common_c/include/ \
-I$DATABASE_CURRENT_DIR/../../t_json_c/include/ \
-I$DATABASE_CURRENT_DIR/../../t_mxml_c/mxml-3.3.1/ \
-I$DATABASE_CURRENT_DIR/../../../../../../../../../include/comm"
gcc -o main_01 gen_database_param_bin.c $DATABASE_CFLAGS -DDATABASE_SELECT=0
gcc -o main_02 gen_database_param_bin.c $DATABASE_CFLAGS -DDATABASE_SELECT=1
gcc -o main_03 gen_database_param_bin.c $DATABASE_CFLAGS -DDATABASE_SELECT=2
$DATABASE_CURRENT_DIR/main_01 0
$DATABASE_CURRENT_DIR/main_02 1
$DATABASE_CURRENT_DIR/main_03 2
# 得到文件sensor_cfg_00.bin(imx335)、sensor_cfg_01.bin(ov9732)、sensor_cfg_02.bin(ov9286)
编译多个执行程序,并执行,执行时传入的0 1 2参数为生成的二进制文件名中的序号。