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

../../_images/isp_0.jpg

下载完成后,双击打开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,界面如下:

../../_images/isp_1.jpg

界面操作暂时不进行讲解,还需要先部署板卡环境。

6.3.2. 板卡端

将ISP21_ISP30压缩包里面的Linux目录下的文件传到板卡,

../../_images/isp_2.jpg

传到板卡后,给文件添加执行权限:

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,将会显示初始配置界面,如下图:

../../_images/isp_3.jpg
  • 需要PC端和板卡端,使用有线、无线等方式连接到同一个网络环境,或者使用USB RNDIS网卡组成局域网。

  • 板卡需要运行前面讲解的rkaiq_tool_server

选择平台、填写板卡IP,然后进行连接,连接成功会弹出提示已连接,点击OK进行确认,新界面如下:

../../_images/isp_4.jpg

6.4.2. 新建Sensor配置并生成基础IQ文件

点击菜单栏”File” - “New”按钮,打开a生成IQ文件页面:

../../_images/isp_5.jpg

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

../../_images/isp_6.jpg

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

../../_images/isp_7.jpg

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

../../_images/isp_8.jpg

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

../../_images/isp_9.jpg

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

../../_images/isp_10.jpg

选中该Sensor,点击”Generate IQ File”按钮,生成IQ文件。

6.4.3. 加载/保存iqfile文件

点击菜单栏”File” - “Open…”按钮,选择加载刚刚新建的IQ参数文件:

../../_images/isp_11.jpg

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

../../_images/isp_12.jpg ../../_images/isp_13.jpg

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

../../_images/isp_14.jpg

6.4.4. 导入或修改Sensor Infomation参数

加载一份IQ参数文件后,点击菜单栏”Tuning” - “Edit Sensor Information”按钮,打开Sensor Info配置界面:

../../_images/isp_15.jpg

Sensor Info配置界面如下:

../../_images/isp_16.jpg

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

../../_images/isp_17.jpg

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

../../_images/isp_18.jpg

点击“OK”按钮,导入配置参数,再关闭”Sensor Information”界面即可;

当SensorList列表中找不到当前项目调试的Sensor型号时,用户可以在直接在Sensor Information界面中参考Sensor手册来配置相应的参数;

6.5. 使用Capture Tool采集Raw图

6.5.1. 抓取Raw图

点击菜单栏”Tools” - “RK Capture Tool”按钮,打开抓图工具:

../../_images/isp_19.jpg

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

../../_images/isp_20.jpg

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

../../_images/isp_21.jpg

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

../../_images/isp_22.jpg

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

../../_images/isp_23.jpg

下方显示了该raw图对应的直方图信息、最大/最小/均值亮度、全局白平衡增益等;

Raw图默认存放在./raw_capture/模块名/下:

../../_images/isp_24.jpg

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图;

../../_images/isp_25.jpg

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

../../_images/isp_26.jpg

6.7.3. BLC标定方法

打开Calibration Tool,点击界面左上角的Edit Options按钮,打开配置界面:

../../_images/isp_27.jpg

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

../../_images/isp_28.jpg

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

../../_images/isp_29.jpg

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

../../_images/isp_30.jpg

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

../../_images/isp_31.jpg

加载iqfile文件:

../../_images/isp_32.jpg

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

../../_images/isp_33.jpg

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

../../_images/isp_34.jpg

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为例:

../../_images/isp_35.jpg

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

../../_images/isp_36.jpg

可见,rockchip,camera-module-name指定了”HS5885-BNSM1018-V01”,那么调用3A服务的时候就会加载ov8858_HS5885-BNSM1018-V01_default.json

因此,需要修改iqfile文件,可以重命名并替换原来指定的文件,或者修改设备树重新指定为自己设置名字的iqfile文件。