图像调试

更新时间:2023-08-09 09:25:02下载pdf

图像调试 是指通过改变 图像参数,达到对应 图像效果 的过程。

  • 图像参数是指能够控制图像处理的参数。
  • 图像效果是指图像观测者对图像质量的认可程度。
    • 简单的图像效果,可以通过涂鸦开放的接口调试,例如亮度、锐化、饱和度等。
    • 复杂的图像效果,需要使用芯片原厂提供的图像质量工具(IQ Tool)对底层参数进行调试,例如曝光收敛速度、特殊场景的噪声等。

适用场景

图像调试 主要适用场景如下:

  • 对主观图像效果不满意:如希望通过增加图像的饱和度使画面更加鲜艳。通过增加图像的锐化使画面纹理边缘更加锐利。通过增加图像的亮度使画面更加明亮等。

  • 对图像一些缺陷进行修复:如摄像机对着部分场景出现画面闪烁。摄像机对着部分场景出现偏色。摄像机对着部分场景出现噪声等。

功能描述

方式一:通过涂鸦接口调试(图像风格自定义)

tuyaos-ipc-$CHIPNAME 的根目录,使用 make app_menuconfig 指令可以打开图像风格自定义界面,修改保存之后,使用 make app_config 指令编译修改后的结果,生成配置文件。

图像调试

该调试方式支持以下功能:

  • 支持亮度的调试
  • 支持饱和度的调试
  • 支持锐度的调试
  • 支持对比度的调试
  • 支持日夜切换阈值的调试
  • 其他扩展

该调试方式目前适配了安凯 AK39EV330L 和富瀚 FH8636/FH8652 平台,其他芯片平台陆续增添中,具体可咨询您的涂鸦客户经理。

方式二:通过图像质量工具调试底层 ISP 参数(精细调试)

该调试方式支持以下功能:

  • AE、AWB 的调试
  • 动态范围的调试,包括 BLC、gamma、WDR、Dehaze 等
  • 信噪比的调试,包括 2DNR、Demosic、3DNR、Sharpen 等
  • 色彩的调试,包括 CCM 等
  • 其他一些调试模块,LSC、LDC、DPC 等

该调试方法所有芯片都支持,但是不同芯片的调试有较大差异,需要对照不同芯片平台的手册进行操作。

部分名词解释:

  • ISP 全称 Image Signal Processing,图像信号处理。
  • AE 全称 Auto Expose,自动曝光。
  • AWB 全称 Auto White Balance,自动白平衡。
  • BLC 全称 Black Level Correction,黑电平。
  • CCM 全称 Color Correction matrix,颜色矫正矩阵。
  • 3DNR 全称 3D noise reduce,三维数字降噪。
  • LSC 全称 Lens Shading Correction,镜头阴影矫正。

工作原理

图像参数的工作原理和实现方案如下:

  • 工作原理:IPC 设备运行时,最重要的图像文件就是 isp.binisp.bin 会在设备上电、设备日夜切换后重新载入,实现对应的图像效果。

    针对 isp.bin 文件而言,不同芯片平台的格式不同。例如安凯是 isp.conf,富瀚是 isp.hex,君正则是二次封装的 tag.bin

  • 实现方案:对 isp.bin 进行修改的方案,目的都是修改 isp.bin 达到理想效果。

    • 通过涂鸦接口调试,是对不同芯片的接口做统一封装,方便开放给您使用。

      对于通过涂鸦接口进行图像调试,需要修改配置文件并编译,查看对应的图像效果是否生效。

    • 芯片底层 ISP 参数调试,调试过程中的 ISP 修改会实时生效在设备中,所见即所得。这种方法需要一定的开发能力,有较高图像需求的客户可以使用该方法。

      • 通过芯片底层 ISP 参数调试后,通常需要将对应的 ISP 参数文件放入对应的文件夹内,替换掉之前的参数文件,编译后查看图像改动是否生效。
        以安凯平台为例,新的图像配置文件 isp.conf 替换到 software/TuyaOS/apps/tuyaos-ipc-ak3918ev330-xxxxx/resource/isp 路径下,保留该路径下原本的 .conf 文件名称。
      • 如果修改了传感驱动文件,在 software/TuyaOS/vendor/anyka3918ev300s/tuyaos/components/linux-anyka3918ev300s/drivers/modules 路径下,在该路径下添加或替换驱动。

图像开发

基本概念

图像组件 的命名是 tkl_media_CHIPNAME,一般位于 /vendor/CHIPNAME/tuyaos/tuyaos_adapter/src/tkl_media_CHIPNAME,是图像相关功能的配置入口。

图像组件 包括多个常用的 ISP 功能接口,如 ISP 参数初始化、彩转灰、画面翻转、抗闪烁、日夜切换照度值计算、图像自定义配置生效等。

适用场景

在设备运行过程中,图像组件主要完成两件事情:

  • IPC 上电启动时,进行 isp_init,并载入图像参数。
  • IPC 运行过程中,用户通过 app 修改设备的日夜状态、抗闪烁状态、画面翻转状态等,图像组件进行对应接口配置。

一般情况下,您无需修改图像组件,只需要根据自己的产品需求,调用下述接口即可。

接口描述

图像组件初始化函数

/***********************************************************
* 函数:tkl_vi_isp_init
* 功能:isp 初始化函数
* 参数:IN TKL_VI_CHN_E chn 设备号
         IN TKL_ISP_PARAM_INFO_T *pisp_info ISP 可配置参数结构体,包括 ADN/WDR/AWB/denoise 等模块
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_init(TKL_VI_CHN_E chn, TKL_ISP_PARAM_INFO_T *pisp_info)

载入图像参数

/***********************************************************
* 函数:tkl_vi_isp_load_isp_file
* 功能:载入各个平台的图像参数,通常为 bin 或者 ini 文件
* 参数:IN TKL_ISP_DN_MODE_E irmode,当前日夜模式,0-AUTO 模式,1-白天,2-夜晚。入参 auto 会强制转白天,不支持 auto
*
* 返回值:<0 失败,=0 成功
  ***********************************************************/
OPERATE_RET tkl_vi_isp_load_isp_file(TKL_ISP_DN_MODE_E irmode)

载入图像风格自定义配置

/***********************************************************
* 函数:tkl_vi_isp_load_user_isp_param
*    功能:载入用户自定义的图像配置,例如画面风格、白平衡/WDR/去噪参数。
    此函数配置的图像配置都是静态配置,不需要在 IPC 运行过程中实时计算。
* 参数:IN TKL_VI_CHN_E chn 设备号
         IN TKL_ISP_PARAM_INFO_T *pisp_info,init 过程需要使用的 isp 所有可配置参数的索引结构。
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_load_user_isp_param(TKL_VI_CHN_E chn, INT32_T irmode)
  • tkl_vi_isp_load_isp_file 会默认调用 tkl_vi_isp_load_user_isp_param 接口,因此您无需单独调用 tkl_vi_isp_load_user_isp_param 接口。

画面翻转配置

/***********************************************************
* 函数:tkl_vi_isp_get_mirror_flip
* 功能:获取当前画面翻转状态
* 参数:IN TKL_VI_CHN_E chn 设备通道号
         OUT TKL_VI_MIRROR_FLIP_E *direction,0-默认状态,1-mirror, 2-flip, 3-mirror 和 flip
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_get_mirror_flip(TKL_VI_CHN_E chn, TKL_VI_MIRROR_FLIP_E *direction)

/***********************************************************
* 函数:tkl_vi_isp_set_mirror_flip
* 功能:设置画面翻转
* 参数:IN TKL_VI_CHN_E chn 设备号
         IN TKL_VI_MIRROR_FLIP_E direction,0-默认状态,1-mirror, 2-flip, 3-mirror 和 flip
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_set_mirror_flip(TKL_VI_CHN_E chn, TKL_VI_MIRROR_FLIP_E direction)

抗闪烁配置

/***********************************************************
* 函数:tkl_vi_isp_get_antiflicker
* 功能:获取当前抗频闪状态
* 参数:IN TKL_VI_CHN_E chn 设备号
         OUT TKL_ISP_FLICKER_TYPE_E *eAntiFlicker, 0-关闭,1-50hz,2-60hz,3-自动抗闪模式
*
* 返回值:<0 失败,=0/1/2 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_get_antiflicker(TKL_VI_CHN_E chn, TKL_ISP_FLICKER_TYPE_E *eAntiFlicker)

/***********************************************************
* 函数:tkl_vi_isp_set_antiflicker
* 功能:设置当前抗频闪配置
* 参数:IN TKL_VI_CHN_E chn 设备号
         IN TKL_ISP_FLICKER_TYPE_E eAntiFlicker,0-关闭,1-50hz,2-60hz,3-自动抗闪模式
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_set_antiflicker(TKL_VI_CHN_E chn, TKL_ISP_FLICKER_TYPE_E eAntiFlicker)

彩转灰接口

/***********************************************************
* 函数:tkl_vi_isp_set_color_to_gray
* 功能:设置画面彩转灰、灰转彩
* 参数:IN TKL_VI_CHN_E chn 设备号
         IN int grey_flag,当前画面的黑白模式,0-白天全彩,1-夜晚黑白,不支持其他值
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_set_color_to_gray(TKL_VI_CHN_E chn, int grey_flag)

日夜切换照度值计算

/***********************************************************
* 函数:tkl_vi_dnswitch_get_illumin
* 功能:获取日夜切换算法的照度值计算结果,给日夜切换组件使用。
* 参数:IN TKL_VI_CHN_E chn 设备号
         IN TKL_ISP_DN_MODE_E irmode,当前日夜模式,0-AUTO 模式,1-白天,2-夜晚。入参 auto 会强制转白天,不支持 auto
         OUT INT32_T *illumin_result,日夜切换算法的计算结果,默认是整数,夜视强反光场景会返回 result=1 并伴有串口提示。
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_dnswitch_get_illumin(TKL_VI_CHN_E chn, TKL_ISP_DN_MODE_E irmode, INT32_T *illumin_result)

显示 ISP 版本号

/***********************************************************
* 函数:tkl_vi_isp_show_fw_version
* 功能:显示当前设备的 isp 参数版本号,每次上电启动时串口输出。
* 参数:ISP_FW_VERSION,宏定义,当前设备的 ISP 参数版本号
         ISP_SENSOR_NAME,宏定义,当前设备的 sensor 名称
*
* 返回值:<0 失败,=0 成功
***********************************************************/
OPERATE_RET tkl_vi_isp_show_fw_version(PCHAR_T version, PCHAR_T name)

调试日志接口

/******************************************************************************
* 函数:tkl_vi_isp_get_param
* 功能:从平台接口获取 ISP pipeline 各个模块参数,用于图像问题分析,目前仅获取 AE 和 AWB 参数
* 参数:IN TKL_VI_CHN_E chn 设备号
         OUT TKL_ISP_LOG_INFO_T *pstISPParam isp 日志功能打开后,需要显示的参数
* 返回值:   <0 失败,=0 成功
******************************************************************************/
OPERATE_RET tkl_vi_isp_get_param(TKL_VI_CHN_E chn, TKL_ISP_LOG_INFO_T *pstISPParam)

注意事项

图像调试完成并编译成功后,需要再确认图像改动是否正常生效,并且要注意在不同场景下观察图像效果。

在单一场景下调试的参数不一定能适用所有环境,其他场景的画质可能会降低,要综合考虑。

常见问题

设备无法出图如何排查?

按如下步骤排查:

  1. 验证 I2C 接口是否正常通信。

    I2C 正常通信时,设备上电串口有" “xxxxx Probed success,subdev:xxxxxx” 打印。其中 sensor ID 为驱动中 sensor_probe_id_func 函数的返回值。如不能正确返回 sensor ID,按如下步骤。

  2. sensor I2C 地址的配置,查看 sensor 数据手册中 I2C 地址是否正确写入驱动文件。

  3. 硬件测量 I2C 是否有信号。

  4. sensor 复位情况,查看 sensor 数据手册中上电时序,驱动文件中上电时序是否正确。

  5. ISP 参数配置文件中 sensor ID 是否正确。

白天和夜视是几套配置文件?

安凯平台白天和夜视参数保存在一套配置文件 isp.conf 里,调试工具 SubFileId 处显示:

  • 0:day 为白天参数
  • 1:night 为夜视参数

富瀚、联咏等平台白天和夜视参数是两套,需要对应替换参数。

为什么画面会朦胧、不清楚?

  1. 首先确保设备的传感器和镜头干净。
  2. 然后将镜头手动调焦至最清晰。
  3. 如果还是需要调试,建议增加锐化和对比度,可以适当调试 WDR 和 Dehaze 模块。

为什么图像会出现偏红、偏绿现象?

出现偏色问题的原因有很多:

  1. 首先检查镜头是否有过更换,IRcut 是否正常切换,定位偏红问题。
  2. 如果镜头有过更换,则需要重新标定 AWB 参数。
  3. 如果发生了偏绿现象,需要排查黑电平值是否正确。