6. ISP调试¶
6.1. 前言¶
本章节旨在让用户基于鲁班猫板卡快速开始摄像头ISP调试,由于瑞芯微官方文档写得十分详细,本章节只讲解部署部分,具体调试请看瑞芯微官方文档。
官方文档通过资料网盘进行下载,位置为:资料网盘/6-开发软件/ISP21_ISP30.zip
ISP21_ISP30/Doc/Rockchip_IQ_Tools_Guide_CN_v2.0.8.pdf
详细介绍了环境部署、RKISP Tuner工具使用方法、各种标定流程和说明等。
注意
野火对ISP调试提供有限技术支持,除本章节提到的内容以及能确保用户能正常部署环境、连接瑞芯微RKISP Tuner工具外,不提供额外的支持,如果遇到问题请查阅瑞芯微官方文档,自行研究。
6.1.1. ISP调试需要准备的工具¶
ISP调试需要准备的工具如下:
带MIPI CSI接口的板卡(LubanCat-RK356x系列板卡都有)
MIPI摄像头(LubanCat-RK356x系列板卡目前支持野火ov8858、IMX415)
毛玻璃、均光片(LSC标定需要)
x-rite 24色卡(AWB标定、CCM标定需要)
灯箱(包含D75、D65、D50、TL84、CWF、A、HZ) (LSC标定、AWB标定、NR标定需要)
灰度渐变卡(NR标定需要)
棋盘格标定板(FEC/LDCH标定需要)
需要的工具很多,特别是灯箱, 价格在几千到上万 ,又因为AWB白平衡是必须调试的项目,必须使用灯箱, 因此建议没有灯箱的用户还请打消ISP调试的念头。
6.2. RKISP2.x Tuner¶
6.2.1. 概述¶
RKISP2.x Tuner(以下简称Tuner)提供了一套便于用户调试ISP参数的工具,用户可以在Tuner中 对所有ISP模块开展标定(Calibration)、调试(Tuning)等工作。用户可以使用Tuner提供的抓图工具 (Capture Tool)来拍摄Raw图;在标定工具(Calibration Tool)中完成基础模块的标定工作; 在Tuner中连接设备,在线进行ISP参数调试
6.2.2. 适用平台¶
芯片名称 |
系统平台 |
ISP版本 |
RK356x |
Linux/Android |
ISP21 |
RK3588 |
Linux/Android |
ISP30 |
6.3. 环境部署¶
需要PC端和板卡端,使用有线、无线等方式连接到同一个网络环境,或者使用USB RNDIS网卡组成局域网。
6.3.1. PC电脑端¶
计算机环境要求:运行Tuner的计算机必须安装Windows 7的x64版本或以上版本的64位Windows操作系统。
6.3.1.1. 安装MCR_R2016a¶
运行Tuner之前需预先安装MCR_R2016a(9.0.1)的64位版本(仅支持此版本)
可以通过资料网盘进行下载,位置为:资料网盘/6-开发软件/MCR_R2016a_win64_installer.exe
也可以通过官网下载,下载地址:https://ww2.mathworks.cn/products/compiler/matlab-runtime

下载完成后,双击打开MCR_R2016a_win64_installer.exe,然后进行安装即可,注意避免安装的路径和工程的路径中出现中文字符。
6.3.1.2. 安装RKISP_Tuner¶
通过资料网盘进行下载,位置为:资料网盘/6-开发软件/ISP21_ISP30.zip
下载完成后直接解压,目录结构如下:
1 2 3 4 5 | ISP21_ISP30
├── Android (安卓下的软件和工具)
├── Doc (说明文档)
├── linux (Linux下的软件和工具)
└── RKISP_Tuner_v2.3.4_Release.rar (RKISP_Tuner软件压缩包)
|
将RKISP_Tuner_v2.3.4_Release.rar直接解压即可,无需安装,但要注意避免安装的路径和工程的路径中出现中文字符。
解压完成后,双击打开RKISP2x_Tuner_v2.exe,界面如下:

界面操作暂时不进行讲解,还需要先部署板卡环境。
6.3.2. 板卡端¶
将ISP21_ISP30压缩包里面的Linux目录下的文件传到板卡,

传到板卡后,给文件添加执行权限:
1 | sudo chmod 777 rkaiq_tool_server-aarch64-2023-6-20-112532 librkmedia.so
|
因为系统默认通过rkaiq_3A服务来自动调整摄像头图像,所以输出的图像是经过调优的,因此需要ISP调试时,需要关闭3A服务:
1 2 3 4 5 6 7 8 9 | #关闭3A服务服务并重启板卡
sudo systemctl stop rkaiq_3A.service
sudo systemctl disable rkaiq_3A.service
sudo reboot
#如果需要开启3A服务服务
sudo systemctl start rkaiq_3A.service
sudo systemctl enable rkaiq_3A.service
sudo reboot
|
关闭3A服务并重启后,运行rkaiq_tool_server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #运行rkaiq_tool_server
sudo ./rkaiq_tool_server-aarch64-2023-6-20-112532
#信息输出如下
[aiqtool][main]:#### 2023-6-20 10:39:44 ####
[aiqtool][main]:iqfile cmd_parser.get /oem/etc/iqfiles
[aiqtool][main]:g_mode cmd_parser.get -1
[aiqtool][main]:g_width cmd_parser.get 1920
[aiqtool][main]:g_height cmd_parser.get 1080
[aiqtool][main]:g_device_id cmd_parser.get 0
[aiqtool][GetMediaInfo]:access /dev/media0
[aiqtool][GetIspSubDevs]:isp media index 0, media info array id 0
[aiqtool][GetIspSubDevs]:model(rkisp0): isp_info(0): isp-subdev entity name: /dev/v4l-subdev0
[aiqtool][GetLensSubDevs]:isp media index 0, media info array id 0
[aiqtool][DumpMediaInfo]:DumpMediaInfo:
[aiqtool][DumpMediaInfo]: sensor_name : m00_b_ov8858 1-0036
[aiqtool][DumpMediaInfo]:#### isp:
[aiqtool][DumpMediaInfo]: model_idx : 0
[aiqtool][DumpMediaInfo]: linked_sensor : 1
[aiqtool][DumpMediaInfo]: media_dev_path : /dev/media0
[aiqtool][DumpMediaInfo]: isp_dev_path : /dev/v4l-subdev0
[aiqtool][DumpMediaInfo]: csi_dev_path : /dev/v4l-subdev1
[aiqtool][DumpMediaInfo]: mpfbc_dev_path :
[aiqtool][DumpMediaInfo]: main_path : /dev/video0
[aiqtool][DumpMediaInfo]: self_path : /dev/video1
[aiqtool][DumpMediaInfo]: fbc_path :
[aiqtool][DumpMediaInfo]: rawwr0_path : /dev/video2
[aiqtool][DumpMediaInfo]: rawwr1_path :
[aiqtool][DumpMediaInfo]: rawwr2_path : /dev/video3
[aiqtool][DumpMediaInfo]: rawwr3_path : /dev/video4
[aiqtool][DumpMediaInfo]: dma_path :
[aiqtool][DumpMediaInfo]: rawrd0_m_path : /dev/video5
[aiqtool][DumpMediaInfo]: rawrd1_l_path :
[aiqtool][DumpMediaInfo]: rawrd2_s_path : /dev/video6
[aiqtool][DumpMediaInfo]: stats_path : /dev/video7
[aiqtool][DumpMediaInfo]: input_params_path : /dev/video8
[aiqtool][DumpMediaInfo]: mipi_luma_path :
[aiqtool][DumpMediaInfo]: mipi_dphy_rx_path :
[aiqtool][main]:================== -1 =====================
[aiqtool][Setup]:Linux,Create domain socket success.
[aiqtool][Setup]:connect domain server failed. Error
[aiqtool][main]:#### ToolServer connect AIQ failed ####
[aiqtool][main]:eth1 IP Address 192.168.103.146
[aiqtool][Process]:TCPServer::Process
[aiqtool][Accepted]:TCPServer::Accepted
|
rkaiq_tool_server会自动获取media_dev_path、main_path、self_path等接口,最后输出板卡可访问的IP,在RKISP_Tuner工具中通过IP连接板卡。
这里简单描述一下rkaiq_tool_server的参数功能和配置方法:
-d: sensor选择,设备中存在多个sensor需要进行调试时,可以使用0/1/2等设备号来选择使用哪一颗sensor,默认值为0
-s: 指定YUV采集用的video节点,默认值会自动搜索iqtool采集节点,也可以手动配置为mainPath或selfPath
-r: RTSP推流功能开关,0为关闭,1为开启,默认值为0,开启后可以在CaptureTool中使用Start RTSP功能
-i: IQ文件读取路径,若路径有改动,应同步修改此处的路径,-r参数为0时可以忽略
-w/-h: 配置RTSP视频流预览输出分辨率,该分辨率会基于ISP输出尺寸进行缩放以满足要求,默认值为1920/1080
-n: 配置在线采集连续Raw使用的缓存数, 默认值为4, 需要采集大量连续Raw图时建议加大该参数的配置
-f: 配置离线帧功能的发送帧率, 默认值为10帧
6.4. RKISP_Tuner工具使用¶
6.4.1. 选择平台&配置网络地址¶
双击打开RKISP_Tuner_v2.3.4_Release目录中的RKISP2x_Tuner_v2.exe,将会显示初始配置界面,如下图:

需要PC端和板卡端,使用有线、无线等方式连接到同一个网络环境,或者使用USB RNDIS网卡组成局域网。
板卡需要运行前面讲解的rkaiq_tool_server
选择平台、填写板卡IP,然后进行连接,连接成功会弹出提示已连接,点击OK进行确认,新界面如下:

6.4.2. 新建Sensor配置并生成基础IQ文件¶
点击菜单栏”File” - “New”按钮,打开a生成IQ文件页面:

查看select sensor选项,如果已经 存在 需要调试的型号,可直接进行选择, ov8858是已经支持了的,所以选项中会有这个型号。

如果 没有存在 需要调试的型号,则点击select sensor选项右侧的New选项,新建Sensor配置:

Sensor配置填写完成后,点击”File” - “Export To Sensor List”按钮:

填写保存的Sensor型号,点击”OK”按钮,保存Sensor配置:

关闭配置页面,在生成IQ文件页面的Sensor列表中即可看到新的Sensor型号:

选中该Sensor,点击”Generate IQ File”按钮,生成IQ文件。
6.4.3. 加载/保存iqfile文件¶
点击菜单栏”File” - “Open…”按钮,选择加载刚刚新建的IQ参数文件:

加载IQ参数文件后弹出以下窗口直接点击OK进行确认:


点击菜单栏”File” - “Save As…”,可以对IQ参数文件进行保存:

6.4.4. 导入或修改Sensor Infomation参数¶
加载一份IQ参数文件后,点击菜单栏”Tuning” - “Edit Sensor Information”按钮,打开Sensor Info配置界面:

Sensor Info配置界面如下:

点击菜单”File” - “Import From Sensor List”按钮,打开导入界面:

选择想要导入的Sensor配置,如下图:

点击“OK”按钮,导入配置参数,再关闭”Sensor Information”界面即可;
当SensorList列表中找不到当前项目调试的Sensor型号时,用户可以在直接在Sensor Information界面中参考Sensor手册来配置相应的参数;
6.5. 使用Capture Tool采集Raw图¶
6.5.1. 抓取Raw图¶
点击菜单栏”Tools” - “RK Capture Tool”按钮,打开抓图工具:

确认设备IP地址填写到正确,点击”Device Status”按钮,若Tuner与rkaiq_tool_server连接正常则会显示”Device is Ready”

用户应在Sensor下拉框中的选择该项目需要Tuning的Sensor:

选择正确的分辨率、光源和模块名,便于后续使用时区分,配置增益、曝光时间和拍摄张数等参数;

点击Start Manual Capture按钮,拍摄到的raw图会在右侧的Raw Preview & Statistics界面中显示:

下方显示了该raw图对应的直方图信息、最大/最小/均值亮度、全局白平衡增益等;
Raw图默认存放在./raw_capture/模块名/下:

6.6. 标定流程说明¶
各模块的标定工作主要可以分为三个部分:
拍摄标定图:根据各模块的需求,用合适的曝光拍摄标定板或场景的raw图;
计算标定参数:导入raw图,计算标定参数,个别模块可以根据需要微调一些参数;
确认效果并保存参数:根据各模块的标准,判断标定参数是否正确;
6.7. BLC标定¶
因为Sensor本身存在暗电流,导致在没有外部光线照射的时候,也有一定的输出电压,最终Sensor的输出需要减去这个数值。 为了测量这个数值,预留了一些完全没有曝光的像素,通过读取这些像素值的大小, 可以实时得到 Optical Black Level,此时sensor的输出为:RAW = Sensor Input - Optical Black Level
另外,考虑到sensor输出时的信噪比,一般Sensor输出时又会垫上一个基底Pedestal,此时的输出为: RAW = Sensor Input - Optical Black Level + Pedestal
由于不同sensor的功能配置不同,对于ISP的BLC模块来说,只需要在全黑的情况下采集出RAW数据即可得到最终的BLC校正值。 这里的校正值主要受到增益和温度影响,因此需要在不同ISO下分别进行标定。 由于BLC是一个偏移量,其他模块在标定时都需要扣除该偏移量,否则无法得到正确的标定参数。
6.7.1. BLC标定Raw图拍摄要求¶
拍摄时遮黑镜头,确保没有任何光线进入;
拍摄需要遍历Gain=1x、2x、4x、8x、16x…Max(若驱动最大Gain支持到40x,则Max=32);
曝光时间并不影响BLC标定,可以统一10ms;
6.7.2. BLC标定Raw图拍摄方法¶
打开RK Capture Tool,连接设备,光源名选择unknow(无光),模块名称选择BLC;
将设备或模组置于无光环境下,并使用黑布、镜头盖等将镜头盖紧;
在Manual Exposure页面中勾选Step和2^n,根据Gain Range配置Gain Begin=1.0 和Gain End=Max ,ExpTime=0.010 ;
点击Start Manual Capture 会按照2的N次方步长拍摄Raw图;

拍摄到的Raw图会显示在右侧,通过切换下拉框选择要查看的图像:

6.7.3. BLC标定方法¶
打开Calibration Tool,点击界面左上角的Edit Options按钮,打开配置界面:

输入raw图的尺寸、位宽和bayer顺序,然后点击ok确认:

选择BLC标签页,点击下方的Load Raw Files按钮,选择存放Raw图的文件夹:

Raw图默认存放在./raw_capture/模块名/下,以上是BLC模式,因此保存在RKISP_Tuner_v2.3.4_Release/raw_capture/BLC

导入的Raw图会显示在右侧的列表中:

加载iqfile文件:

点击Calibrate按钮,开始标定计算:

标定得到的各通道暗电流值随ISO变化的曲线会显示在上方的坐标轴中,标定得到的BLC值会显示在表格中,点击Save保存参数:

6.7.4. 注意事项:¶
若设备本身有电源灯、状态等指示灯,应注意是否会有漏光;
错误的BLC值会影响后续所有模块的标定结果,请务必确保该BLC结果正确后再进行后续模块的标定工作;
6.8. 其他标定¶
后续标定步骤都需要使用灯箱进行操作, 没有灯箱则无法进行标定 ,并且瑞芯微官方文档每一个步骤都写得十分十分十分详细,只要认真看一下文档就能看得懂,本章节就没必要再重复了,还请查阅瑞芯微官方文档进行操作。
6.9. 瑞芯微官方文档¶
官方文档通过资料网盘进行下载,位置为:资料网盘/6-开发软件/ISP21_ISP30.zip,位于压缩包位置为:
ISP21_ISP30/Doc/Rockchip_IQ_Tools_Guide_CN_v2.0.8.pdf
详细介绍了环境部署、RKISP Tuner工具使用方法、各种标定流程和说明等。
其他文档:
ISP21_ISP30/Doc/ISP2X/Rockchip_Color_Optimization_Guide_ISP2x_CN_v1.2.5.pdf
ISP21_ISP30/Doc/ISP2X/Rockchip_Color_Optimization_Guide_ISP21_CN_v2.0.1.pdf
介绍在描述色彩相关模块的调试,主要给使用RkAiq模块进行图像色彩调优的工程师提供帮助。
ISP21_ISP30/Doc/ISP2X/Rockchip_Development_Guide_ISP21_CN_v2.1.0.pdf
介绍在描述RkAiq(Rk Auto Image Quality)模块的作用,整体工作流程,及相关的API接口。主要给使用RkAiq模块进行ISP功能开发的工程师提供帮助。
ISP21_ISP30/Doc/ISP2X/Rockchip_Driver_Guide_VI_CN_v1.0.8.pdf
介绍在描述RKISP(Rockchip Image Signal Processing)模块的作用,整体工作流程,及相关的API接口。主要给驱动工程师调试Camera提供帮助。
ISP21_ISP30/Doc/ISP2X/Rockchip_IQ_Tools_Guide_ISP2x_CN_v2.0.3.pdf
介绍RKISP2 Tuner的使用方法以及ISP调试流程。主要帮助使用RKISP2 Tuner进行IQ调试的工程师快速上手以及提供参考。
ISP21_ISP30/Doc/ISP2X/Rockchip_Tuning_Guide_ISP21_CN_v2.1.0.pdf
旨在指导用户进行图像调优的文档。
ISP21_ISP30/Doc/Camera/Rockchip_Developer_Guide_Linux4.4_Camera_CN.pdf
介绍Rockchip系列芯片的ISP、CIF的驱动结构,以及在此基础上如何编写/移植Sensor驱动、上层调试方法、应用程序开发接口、3A集成等。
ISP21_ISP30/Doc/Camera/Rockchip_Trouble_Shooting_Linux4.4_Camera_CN.pdf
记录RKISP及Camera 在调试过程中常见的一些问题与排查思路。
6.10. 部署iqfile文件¶
板卡iqfile文件存放在/etc/iqfiles/目录下,以ov8858为例:
1 2 3 4 5 6 7 8 | #查看是目录下的ov8858 iqfile文件
ls /etc/iqfiles/*8858*
#信息输出如下
/etc/iqfiles/ov8858_HS5885-BNSM1018-V01_default.json
/etc/iqfiles/ov8858_HS8858-EB1008-V02_JX0843.json
/etc/iqfiles/ov8858_SLD-S10-M258-V1_DL820B-D.json
/etc/iqfiles/ov8858_XHG-RKX11B-V10_default.json
|
可见,存在4份iqfile文件,那么实际使用的是哪份iqfile文件?
实际使用的iqfile文件通过设备树的 rockchip,camera-module-name 进行指定,以鲁班猫2的dts为例:

主dts引用了rk3568-lubancat-csi2.dtsi,继续查看:

可见,rockchip,camera-module-name指定了”HS5885-BNSM1018-V01”,那么调用3A服务的时候就会加载ov8858_HS5885-BNSM1018-V01_default.json
因此,需要修改iqfile文件,可以重命名并替换原来指定的文件,或者修改设备树重新指定为自己设置名字的iqfile文件。