ISP 调试常见问题
如何抓取及分析ISP、VI节点
如下所示为vi节点,串口执行下述指令可以查看 VI 节点状态:cat /sys/kernel/debug/mpp/vi
VIN hardware feature list:
mcsi 2, ncsi 1, parser 2, isp 1, vipp 2, dma 2
CSI_VERSION: CSI300_600, ISP_VERSION: ISP603_100
CSI_CLK: 200000000, ISP_CLK: 0
*****************************************************
vi0:
gc1084_mipi => mipi0 => csi0 => isp0 => vipp0
input => hoff: 0, voff: 0, w: 1280, h: 720, fmt: GRBG10
output => width: 1280, height: 720, fmt: LBC_1X
interface: MIPI, isp_mode: NORMAL, hflip: 0, vflip: 0
prs_in => x: 1280, y: 720, hb: 2432, hs: 6451
bkuf => cnt: 4 size: 1429504 rest: 4, work_mode: online
frame => cnt: 306, lost_cnt: 7, error_cnt: 0
internal => avg: 34(ms), max: 34(ms), min: 33(ms)
CSI Bandwidth: 0
*****************************************************
vi4:
(efault) => mipi0 => csi0 => isp0 => vipp4
input => hoff: 0, voff: 0, w: 0, h: 0, fmt: NULL
output => width: 0, height: 0, fmt: NULL
interface: NULL, isp_mode: NORMAL, hflip: 0, vflip: 0
prs_in => x: 0, y: 0, hb: 0, hs: 0
bkuf => cnt: 0 size: 0 rest: 0, work_mode: online
frame => cnt: 0, lost_cnt: 0, error_cnt: 0
internal => avg: 0(ms), max: 0(ms), min: 0(ms)
CSI Bandwidth: 0
*****************************************************
VI 节点参数说明
参数 | 描述 |
---|---|
mcsi | MIPI通道号,0/1 |
ncsi | DVP通道号,0 |
parser | 图像数据解析通道号,0/1/2/3 |
isp | ISP通道号,0/1 |
vipp | VI通道号,0~12 |
input => hoff | 输入图像水平偏移 |
input => voff | 输入图像垂直偏移 |
input => w | 输入图像宽度 |
input => h | 输入图像高度 |
input => fmt | 输入图像格式,RAW:RGGB/BGGR/GRBG/GBRG,YUV: |
output => width | 输出图像宽度 |
output => height | 输出图像高度 |
output => fmt | 输出图像格式:RAW8/10/12,YUV420等,LBC_1/1.5/2/2.5X |
interface | 接口类型:PARALLEL/MIPI/BT656/SUBLVDS/HISPI |
isp_mode | ISP模式:NORMAL/DOL_WDR/CMD_WDR/SEHDR |
hflip | 输出图像水平(镜像)翻转:0/1 |
vflip | 输出图像垂直翻转:0/1 |
prs_in => x | parser输入数据宽度 |
prs_in => y | parser输入数据高度 |
prs_in => hb | 行消隐时间 |
prs_in => hs | 行同步时间 |
bkbuf => cnt | 图像buffer个数 |
bkbuf => size | 图像buffer大小 |
bkbuf => rest | 空闲图像buffer个数 |
bkbuf => work_mode | 图像编码模式:offline/online |
tdmbuf => cnt | TDM buffer个数 |
tdmbuf => size | TDM buffer大小 |
tdmbuf => cmp_ratio | TDM LBC 压缩系数 |
ispbuf => cnt | ISP 3DNR buffer个数 |
ispbuf => size | ISP 3DNR buffer大小 |
ispbuf => cmp_ratio | ISP 3DNR 压缩系数 |
frame => cnt | 图像帧计数 |
frame => lost_cnt | 图像丢帧计数 |
frame => error_cnt | 图像异常帧计数 |
internal => avg | 图像帧间隔平均值(ms) |
internal => max | 图像帧间隔最大值(ms) |
internal => min | 图像帧间隔最小值(ms) |
如下所示为isp节点,串口执行下述指令可以查看 isp 节点状态:cat /sys/kernel/debug/mpp/isp
cat /sys/kernel/debug/mpp/isp
*****************************************************
VIN hardware feature list:
CSI_VERSION: CSI300_600, ISP_VERSION: ISP603_100
CSI_CLK: 200000000, ISP_CLK: 0
vipp0, isp_dode: NORMAL
*****************************************************
ISP0 debug param list:
===> exp: 21600, gain: 17, lum_idx: 187, coms_temp: 48
===> color_temp: 5630, rgain: 468, bgain: 442
===> contrast: 256, sharp: 256, bright: 256
===> satur: 256, tdnf: 256, bdnf: 256, pltm: 0
*****************************************************
[ISP Colorspace]
====> REC709_FULL
[ISP Cfg Version Name]
====> gc2083_mipi_isp603_20241205_171656_final_rgb_suit
[ISP Libs Commit Version]
====> commit: b821ee6be69ccb9b847874aae1a3d8fb3fbb1e05
*****************************************************
ISP 节点参数说明
参数 | 描述 |
---|---|
exp | 当前环境曝光时间,其中16代表一行曝光 |
gain | 当前环境下的增益,其中16代表一倍增益 |
lum_idx | 当前环境下的曝光idx值 |
coms_temp | 当前环境下的设备温度,需要实现高温功能 |
color_temp | 当前环境下的awb统计的色温值 |
rgain | 当前环境下的awb r通道补偿 |
bgain | 当前环境下的awb b通道补偿 |
contrast | 对比度叠加强度,通过应用接口调用设置 |
sharp | 锐化叠加强度,通过应用接口调用设置 |
bright | 亮度叠加强度,通过应用接口调用设置 |
satur | 饱和度叠加强度,通过应用接口调用设置 |
tdnf | d3d去噪叠加强度,通过应用接口调用设置 |
bdnf | d2d去噪叠加强度,通过应用接口调用设置 |
pltm | pltm叠加强度,通过应用接口调用设置 |
ISP Colorspace | ISP色域空间 |
ISP Cfg Version Name | 当前使用的效果文件名 |
ISP Libs Commit Version | 当前的ISP库版本号 |
如何排查连接图像调试工具失败
先根据离线调试和在线调试介绍,确认awTuningApp的执行脚本、确认awTuningApp是从哪里拿到的、确认TigerISP连接界面填写的参数(sensorname、尺寸、帧率等)
在线调试的情况下,执行脚本为./awTuningApp 8848 1 &
, 离线调试的情况下,执行脚本为./awTuningApp 8848 0 &
awTuningApp必须从SDK对应路径获取:
V821
常电的awTuningApp
路径:\platform\allwinner\eyesee-mpp\middleware\sun300iw1\media\LIBRARY\libisp\tuning_app
V821
快启的awTuningApp
路径:\rtos\lichee\rtos-hal\hal\source\vin\vin_isp\isp_server\out
如果均已按照上述的规范来连接,还是连接不上,请确认调试工具填写的尺寸帧率等配置是否填写正确,有两种常见方法可以确认是否填写正确
- 执行awTuningApp后,进入设备端
tmp
路径,找到如下图所示文件夹isp1_1920_1080_20_0
其中isp1代表使用的ispid为1
1920代表宽,1080代表高
20代表帧率
0代表非WDR模式
- 抓取vi节点,通过打印的尺寸及帧率等即可确定,但这里打印的帧率不一定为vi初始化时使用的帧率,存在降帧影响导致帧率误差
如何使用或关闭降帧策略
降帧策略通常在低照度下生效,通过延长曝光时间来提升画面亮度和信噪比,下面简单介绍降帧策略的使用方法
Step1:确认 Sensor 的 VTS
寄存器
Step2:在 sensor_s_exp_gain
函数中检查当前设置的曝光时间是否超过当前帧率对应的 VTS
,如果超过则动态调整 VTS
来延长曝光时间,如果没有则不需要调整VTS
static int sensor_s_exp_gain(struct v4l2_subdev *sd, struct sensor_exp_gain *exp_gain)
{
struct sensor_info *info = to_state(sd);
int shutter, frame_length;
int exp_val, gain_val;
exp_val = exp_gain->exp_val;
gain_val = exp_gain->gain_val;
if (gain_val < 1 * 16)
gain_val = 16;
if (exp_val > 0xfffff)
exp_val = 0xfffff;
if (!sc3336_fps_change_flag) { // 检查是否在主动调节帧率,通过标志位或者锁互斥即可
shutter = exp_val >> 4; // SOC 曝光行(时间)是以16为1行,所以将上层传下来的曝光行除以16,换算当前实际曝光行
if (shutter > sc3336_sensor_vts - 8) { // 判断当前曝光时间是否大于当前帧率下的 VTS(“-8”只是偏移量,每个 Sensor 不一定)
frame_length = shutter + 8; // 如果大于当前帧率下的 VTS,那么意味着需要增加VTS 来达到降帧的目的,以此实现自动降帧
} else
frame_length = sc3336_sensor_vts; // 如果曝光时间未达到需要调整 VTS 来降帧的情况下,那么还是保持当前帧率需要 VTS 值即可
sensor_write(sd, 0x320f, (frame_length & 0xff));
sensor_write(sd, 0x320e, (frame_length >> 8));
}
sensor_s_exp(sd, exp_val);
sensor_s_gain(sd, gain_val);
sensor_dbg("sensor_set_gain exp = %d, %d Done!\n", gain_val, exp_val);
info->exp = exp_val;
info->gain = gain_val;
return 0;
}
Step3:调整 ISP
效果文件的最大曝光时间
ISP
效果文件中的 AE Table
用于设定当前效果的曝光表:
如图所示,Min Exp
代表最小曝光时间(倒数)—— 1/22000s,Max Exp
代表最大曝光时间(倒数)—— 1/20s,
Min Gain
代表最小增益、Max Gain
代表最大增益(均以 256 为一倍),光圈调节暂不支持,故需要设置为默认值为266;
AE
调整亮度的逻辑:第 0 档为起始档位,AE
会保持一倍增益的前提下,优先提高曝光时间来达到提升亮度的目的,曝光时间的可调范围为【1/22000s,1/20s】,如果曝光时间提高到 1/20s的状态还没有达到期望亮度,那么会开始向下顺延执行第 1 档的设定:维持曝光时间为 1/20s 的前提,开始提高增益的倍数,增益的可调范围【256,32768】(也就是 1x - 128x),以此类推,直到达到最大曝光时间和最大增益
如果当前帧率为 20fps,则需要限制最大曝光时间为 1/20s,那么意味着 ISP
给驱动设置的最大曝光时间则不会大于 1/20s(50ms),如果有自动降帧需求,那么可以将最大曝光时间设置大于1/20s;例如设置为 1/10s :意味着最大曝光时间从 50ms 调整到 100ms,驱动发现当前曝光时间大于当前 VTS
时,便会重新调整 VTS
来降帧延长曝光时间;
上述是通过调试工具调整曝光表,也可以通过直接修改对应 ISP
效果文件来实现自动降帧,打开效果文件并搜索 ae_table_preview
,参数和工具界面的参数是一一对应的
Step4:如果希望关闭自动降帧策略,可将效果文件的最大曝光时间改成帧率对应的曝光值,如最大帧率为20fps,那么最大曝光就是1/20s(50ms),此外也可以将驱动文件里面写VTS
寄存器的动作注释
如何解决工频干扰问题
交流电的瞬时功率周期性变化,导致没有滤波电路或滤波不好的照明设备发光强度也周期性变化。使用滚动快门的图像传感器,周期性变化的光强会在画面上呈现周期性的水平亮度差异,看起来就是周期性的条纹。世界主要有50Hz和60Hz两种交流电频率,对应亮度变化周期是1/100s和1/120s。要完全解决工频闪烁,就要令曝光时间是亮度变化周期的整数倍,通过调整ISP
可以优化工频干扰
以使用50Hz交流电为例说明。
Step1:ISP
效果参数使能AFS(Anti-Flicker)
模块并打开AE log
,EXP_TIME
是以微秒为单位的,exp_time
的值应该要等于或接近10000的整数倍。
Step2:若exp_time
的值明显小于10000,则通过提高AE target
可以提高exp_time
的值,令其接近10000us,修改方法可看第4.2章节详情
Step3:若不便提高AE
期望亮度,令帧率严格等于100/N(N为正整数),可以让条纹定住不动,感观上也好一点。
Step4:若exp_time
的值等于或接近10000的整数倍,仍有工频闪烁,就说明sensor驱动里面的pclk、vts、hts
至少其中一个值不准确,请检查sensor驱动配置并与原厂确认
Step5:若exp_time
的值大于10000,但不是10000的整数倍,则可以设置flicker_type=1
,令Anti-Flicker
强制处于50Hz模式,或设置flicker_type=0
,令Anti-Flicker
处于自动检测模式,并通过改变Ratio
的值让Anti-Flicker
工作在50Hz模式。
Step6:如果不希望通过调整效果文件,而是通过应用接口控制,可使用下述接口设置抗工频闪烁属性,模式列表如下
enum v4l2_power_line_frequency {
V4L2_CID_POWER_LINE_FREQUENCY_DISABLED = 0,
V4L2_CID_POWER_LINE_FREQUENCY_50HZ = 1,
V4L2_CID_POWER_LINE_FREQUENCY_60HZ = 2,
V4L2_CID_POWER_LINE_FREQUENCY_AUTO = 3,
};
如何解决拜耳格式导致的图像问题
Bayer矩阵是图像传感器上用于捕捉彩色图像的一种滤色阵列。它的核心思想是通过排列红(R)、绿(G)、蓝(B)三种颜色滤镜,使每个像素仅捕获一种颜色信息,再通过插值算法(Demosaic)还原全彩图像。
当sensor输出raw数据的拜尔矩阵与sensor驱动设置的不一致,进行demosaic算法时,插值算法会错误计算颜色,导致图像颜色完全错误,因此在点亮sensor时,请根据sensor实际输出的拜尔格式正确填写到sensor驱动中。
图像翻转如何适配拜尔格式
如果用户使用的翻转是sensor翻转,那么需要找原厂确认翻转以后sensor输出的拜尔格式是否变化,如有变化,请确认sensor驱动是否适配翻转后的拜尔格式。
一般sensor有自适应翻转功能,也就是在操作sensor翻转后,sensor保持输出的拜尔格式不会变化,这时候sensor驱动就不需要适配翻转后的拜耳格式,此功能请与原厂确认。
如何优化紫边问题
模块参数介绍
由于被摄物体反差较大,在高光与低光部位交界处出现的色斑的现象即为色差,常见为紫色,因此又叫紫边现象。此现象与透镜无法将各种波长的色光都聚焦在同一点有较大关系,ISP
有两个模块参与去紫边,分别是 GCA
和 LCA
,去除紫边建议先做全局色差矫正
GCA校准流程介绍
Step1:离线连接上调试工具,点击ISP Test
,在ByPass Setting
模块,点击All Operation
中的disable
,关闭所有ISP
模块,点击write
,使修改生效
Step2:点击Calibration
,再点击GCA
按钮,跳出GCA
标定界面
Step3:准备GCA
标定图,需要用到黑底的白圆点图,尺寸建议 A2/A1,如下图所示
Step4:手动设置曝光、增益至合适的倍数,拖动鼠标右键框选中央区域,选择 RGB
测算,G_MAX
数值应接近最大值。
Step5:完成 Sensor 曝光设置后,点击 Capture
按钮抓取 20 帧 Raw
数据,点击Calc
,工具将根据设定的参数计算出 R Param0 ~ B Param2
这 6 个参数,点击Apply
使参数生效。
主观调试方法
Step1:在 GCA
已标定好的前提下,物体边缘若还有紫边,可调试 LCA
参数。
Step2:LCA
调试时先将校正系数设置为最强(PF/GF Correction Ratio = 1024,PF/GF CLRC Ratio = 0,PF DECR Ratio = 15
)来分别调试偏绿/偏紫紫边的检测区域(Lum,Grad,CLR,PF Rshf,PF Blsp
)
Step3:在调试得到合适的检测区域后,可开始调试校正系数来平衡紫边去除程度及副作用(PF/GF Correction Ratio,PF/GF CLRC Ratio,PF DECR Ratio
以及两条曲线)
注意事项
- 设置 Sensor 曝光、增益时需要将
TestMode
设置为Manual Mode
Raw
图的尺寸、Bayer
格式确保选择正确(cat vi
节点查看相关的配置)- 抓取
Raw
图时,确保标定图占满整个画面,并且尽量拍到更多的白点
如何解决黑白全彩切换偏色
通常黑白全彩切换可能存在如下问题:
- 全彩切黑白或黑白切全彩时出现紫帧
- 黑白切全彩出现白平衡偏绿、紫帧等问题
需要优化上述问题,切换流程建议按照下述设置:
从彩色图像切换到黑白图像,一般建议先切换 ISP 效果(彩色->黑白),打开红外灯,再使能 IR-CUT,这样可以防止先使能 IR-CUT 后,摄像头会拍摄到红外光分量导致图像先变红再变黑白。
从黑白图像切换到彩色图像,一般建议先关闭红外灯(白天场景环境光较充足),关闭 IR-CUT,切换ISP 效果(黑白->彩色)
如何去除Sensor坏点
坏点主要产生原因与sensor相关,长时间高低温等极端环境工作、传感器受到外力撞击挤压或静电放电时可能直接破坏像素单元的电路结构、传感器生产过程中微小的工艺偏差等均有导致坏点的可能
ISP中的DPC模块可用于去除这类坏点,但需要根据具体sensor情况进行调试,具体操作方法如下:
Step1:先确认ISP效果参数中的DPC模块是否打开,若未打开,请打开
Step2:按照下述流程进行调试
调试分为检测和校正,以下调试建议在默认值参数的基础上进行。
检测:
-
现将校正参数NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO调至最小,保证调整检测参后,马上就能看出检测的实时效果。
-
调节SLOPE_TH参数,若图像动态坏点不明显(表现为稍亮),又希望将其去掉,将SLOPE_TH参数调小,以此来检测出更多的不明显坏点。若图像的动态坏点都比较明显,则可调大SLOPE_TH参数,防止误测出更多的纹理。
-
在上一步的基础上,配合HOT_RATIO参数去除亮坏点。将 HOT_RATIO参数调小,则能越容易检测出亮坏点,同时,越多的亮边缘纹理也将被误检;将 COLD_RATIO参数调小,COLD ABS TH调大(一般使用默认值即可,不需要整),则越容易检测出暗坏点来,同时,越多的暗边缘纹理也将被误检,需要权衡。
-
调整到合适的检测参数后,将校正参数NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO调至最大,接下进行调试校正参数。
校正:
- 由于校正参数被设置最大,虽然检测到了,但是依然没校正过来。因此,逐步减小校正参数NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO,会越来越多的坏点被校正。
- 若希望被检测出的坏点更多的被校正(去坏点),则将NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO参数继续调小,主要调NBHD_DIFF_RATIO参数,次调NEAREST_DIFF_RATIO。
- 若希望被检测出的坏点更多的保持原始值(纹理和边缘),则将NBHD_DIFF_RATIO和NEAREST_DIFF_RATIO参数调大。
如何读写Sensor寄存器配置
通过Sensor节点进行读写
Step1:cd /sys/devices/gc2053_mipi
(进入目标 sensor 节点目录)
Step2:echo 0x10 > addr_width; echo 0x8 > data_width
(输入目标 sensor 寄存器地址/数据位宽,请查阅 datasheet
获取)
Step3:echo 0 > read_flag
(read_flag
:读写控制节点,使能为1表示后续操作为读动作,使能为0表示后续操作为写动作)
Step4:echo 30350021 > cci_client
(“30350021”:0x3035【目标寄存器地址】,0x0021【将要写入的寄存器值】,在 read_flag = 1
情况下,写入值为无效状态)
Step5:cat read_value
(打印上一步操作的结果:寄存器值)
通过TigerISP工具进行读写
Step1:离线/在线连接上调试工具
Step2:打开读取寄存器界面,正确选择sensor寄存器的地址及数据位宽
Step3:操作为读取寄存器时,先在Address
这一列填入要读取的寄存器地址,点击Read
,在Data
这一列会显示读出来的寄存器数值
Step4:操作为读取寄存器时,先在Address
这一列填入要写入的寄存器地址,再在Data
这一列填入要写入的寄存器数值,点击Write
,即可写入进去
Step5:Write
以后可以再Read
一下,确认是否写入生效
注意事项
IIC
在系统和硬件上正常工作;- 上述命令需要在
Camera
正常工作状态下执行才会有效,如/sys/devices/sensor
节点是否存在,Camera
是否上电等等; - 上述命令只在
tina-linux
系统有效,rtos
系统暂不支持;
如何转换效果文件并合入应用生效
效果文件格式及转化方法
ISP
效果文件有三种格式:dat、h、bin
dat
文件用于效果调试,工具加载及保存只能使用dat
文件h
文件用于编译,使ISP
在运行起来时,能快速找到对应匹配的效果文件并加载生效到应用中bin
文件用于效果切换,客户可以将文件放入文件系统中,在应用起来时通过调用接口读取bin
文件,实现ISP
效果加载生效
下述为三种效果文件格式的转化方式
应用应该如何适配 ISP 效果文件并生效
头文件
Step1:拷贝效果.h
至 SDK
在工具中将.dat
文件转换为.h
文件,拷贝至 SDK
指定路径
- V821常电效果文件目录:
/platform/allwinner/eyesee-mpp/middleware/sun300iw1/media/LIBRARY/libisp/isp_cfg/SENSOR_H/gc4663
- V821快起效果文件目录:
/rtos/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/SENSOR_H
Step2:配置 isp_ini_parse.c
,include
添加上新增的ISP
效果文件
- V821常电效果文件目录:
/platform/allwinner/eyesee-mpp/middleware/sun300iw1/media/LIBRARY/libisp/isp_cfg/isp_ini_parse.c
- V821快起效果文件目录:
/rtos/lichee/rtos-hal/hal/source/vin/vin_isp/isp_server/isp_cfg/isp_ini_parse.c
Step3:配置效果文件对应的属性,这一步是确保效果文件能否加载正确的关键
① Sensor dev名称:这个是驱动里面注册的sensorname,通常单路就是gc4663_mipi,如果是双目的情况下,另一路通常注册为gc4663_mipi_2,如果不能确定,可以通过cat vi节点确认sensorname
② ISP 效果头文件名称:对应效果文件名
③ 分辨率宽度:当前vi节点sensor输出宽度,如果不能确定可以通过cat vi节点确认
④ 分辨率高度:当前vi节点sensor输出高度,如果不能确定可以通过cat vi节点确认
⑤ 帧率
⑥ 红外 IR 模式标志位:值为1则按照红外夜视黑白效果加载此效果文件
⑦ WDR 模式标志位:值为1则说明效果为 WDR 模式专用效果,使用 WDR 模式才需要配置
⑧ ISP 效果.h 末尾的 ISP 参数结构体“struct isp_cfg_pt gc4663_mipi_linear_isp_cfg”
如打开效果头文件后,这里结构体名字与isp_ini_parse.c对应不上,那么需要修改isp_ini_parse.c中的⑧为&gc4663_mipi_rgb_isp_cfg
Step4:应用上使用 AW_MPI_ISP_SwitchIspConfig接口切换效果配置
IspDev 为当前使用的 ISP 通道号
ModeFlag为切换模式,0代表线性模式彩色效果,1代表WDR 模式彩色效果,2代表线性模式红外黑白效果,3代表WDR 模式红外黑白效果
BIN 文件
Step1:将效果文件转换为bin格式并存放在文件系统指定路径下
Step2:应用上使用 AW_MPI_ISP_ReadIspCfgBin接口切换效果配置
如何基于彩色效果整理一份初版红外效果
从彩色模式参数同步到红外模式过程中,效果文件上有以下点需要修改确认
- CAC(LCA+GCA)模块需要关闭,避免红外模式下颜色误判断引起的异常
- WB模块需要关闭(AWB保持打开),避免色温异常判断引起画面的异常变化
- CCM模块建议关闭
- 对比度(GTM模块)需要适当增强,避免红外补光灯下容易出现的图像发“朦”
如何抓取Sensor RAW数据
遇到图像效果异常,而无法判定是主控导致还是sensor本身的问题,在面对这种情况下,抓取raw数据进行分析是最快捷直观的排查手段,V系列支持多种抓取raw数据的方式
sample_virvi抓取raw数据
介绍
Sample_virvi支持从vipp抓取raw数据,这个过程中vipp直接输出raw格式数据,不会经过isp的任何处理,只能抓取video0节点下的raw数据。但由于在跑sample_virv抓raw数据时,无法预览经过isp后的图像数据,因此针对一些非必现的场景问题下,此方案抓raw不推荐使用。
使用方法:
Step1:将sample_virvi放入卡中,图像尺寸帧率请按实际配置
Step2:修改sample_virvi.conf文件,修改如下配置pic_format_0 = “srggb10”,raw_store_count = 5
Step3:执行./sample_virvi -path ./sample_virvi &
Step4:在mnt/extsd目录下有raw图保存
TigerISP离线抓取raw数据
介绍
TigerISP是ISP调试工具,客户可以在APST上面进行下载。这里的离线指的是不跑sample出流或客户应用,通过运行TuningApp连接调试工具出流。本方法可以预览并判断到当前场景已复现到问题后,再进行raw数据抓取,但只能抓取video0节点下的raw数据,因此如果是双摄、三摄的情况下,需要手动配置设备树,将有问题的一路sensor配置到video0节点中。
使用方法
Step1:进入串口,手动运行tuningapp,指令如下:./Tuningapp 8848 0 &
Step2:打开TigerISP,填写sensor对应的尺寸帧率等配置,完成调试工具连接
Step3:导入现在使用的效果参数,并预览图像,检查是否复现到问题
Step4:复现到问题以后,通过log记录下当前使用的曝光增益
Step5:在调试工具中手动关闭isp所有模块
Step6:在手动曝光窗口下,将复现场景下记录的曝光增益写到sensor中
Step7:在capture界面下,将格式改为sensor输出的raw图格式(如BAYER-RGGB10),在点击右上角的capture按钮就可以完成raw图抓取
sample_smartIPC_demo抓取raw数据
介绍
sample_smartIPC_demo是基于IPC客户开发的示例demo,其中包含整个vin通路及rtsp功能,使用该sample可以实现通过wifi、adb、eth等方式的实时图像码流预览。通过sample_smartIPC_demo抓取raw数据,可以实现在实时预览经过ISP、VE处理后的码流的同时,将这一段raw数据保存到本地。
使用方法
Step1:m kernel_menuconfig,搜索并打开SUPPORT_ISP_TDM、TDM_OFFLINE_HANDLE_RAW
Step2:打开board.dts,将vin通路配置为离线模式
Step3:配置sample_smartIPC_demo.conf,其中main_isp_tdm_raw_process_type请根据实际sensor输出的raw图的格式进行选择,其余配置按照sensor输出尺寸及需求进行配置。
main_isp_tdm_raw_process_type = -1 #-1:disable, 0:dump 8bit, 1:dump 10bit, 2:dump 8bit for tools, 3:dump 10bit for tools, 4:send 8bit, 5:send 10bit
main_isp_tdm_raw_width = 1920
main_isp_tdm_raw_height = 1080
main_isp_tdm_raw_rxbuf_num = 5
main_isp_tdm_raw_process_frame_cnt_min = 0
main_isp_tdm_raw_process_frame_cnt_max = 5
main_isp_tdm_raw_file_path = "/mnt/extsd/tdm_raw.bin"
Step4:编译新固件并烧录
Step5:运行sample_smartIPC_demo进行raw数据抓取
TigerISP在线抓取raw数据
介绍
TigerISP是ISP调试工具,客户可以在APST上面进行下载。这里的在线指的是在跑sample或客户应用的时候,连接上调试工具,进行raw数据抓取,在一些低概率才能复现到的问题上,推荐使用此方法进行raw数据抓取
使用方法
Step1:参考sample_smartIPC_demo抓取raw数据步骤的前两点进行通路配置
Step2:编译新固件并烧录
Step3:进入串口,手动运行tuningapp,指令如下:./Tuningapp 8848 1 &
Step4:打开TigerISP,填写sensor对应的尺寸帧率等配置,完成调试工具连接
Step5:确认当前场景下已复现到问题
Step6:在capture界面下,将格式改为sensor输出的raw图格式(如BAYER-RGGB10),在点击右上角的capture按钮就可以完成raw图抓取
注意事项
- sample_smartIPC_demo抓取raw数据只支持V85x sdk1.2及以上版本、V821 SDK1.0及以上版本
- TigerISP在线抓取raw数据,只支持V821 SDK1.0及以上版本
如何通过ISP优化高温热噪
由于Sensor处于高温环境或长时间工作,本身积热严重形成热噪,噪声对图像效果产生比较大的影响,通过实时读取Sensor温度,适时调整ISP模块表现来优化画质表现。
ISP高温联动策略介绍
- Sensor驱动获取温度(标定拟合的温度曲线)
- 调试ISP高温联动模块
通过实时获取Sensor温度,联动 ISP Pipeline 的 Denoise、TDNF、BLC、Sharp、Saturation等模块来实时调整图像表现,例如高温下热噪严重,读取Sensor温度处于较高水平时,对应加强降噪模块的强度,减弱锐化模块的强度,使得图像不会因为热噪而变得十分异常。
如图所示,ISP高温策略通过获取Sensor温度进行联动,温度值归一化在【55℃, 120℃】范围内(意味着Sensor获取温度值后,需要将其归一化在这个范围内)。
如图所示,ISP高温联动模块的参数是各个模块强度(降噪、锐化、饱和度、BLC等)的补偿系数。
- 以256为默认值,小于256为衰减补偿,大于256为增强补偿。
- 如下表所示,BLC的补偿值系数默认值为0,补偿系数是在原有的BLC模块基础值上进行补偿偏移。
2D Black 2D暗部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
2D White 2D亮部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
3D Black 3D暗部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
3D Black 3D亮部降噪联动系数,数值越大降噪越强,取值范围【0,4095】,默认值:256
DTC Stren D3D DTC 强度联动系数,数值越大噪声越多,取值范围【0,256】,默认值:256
BLC_R 黑电平 R 分量偏移,取值范围【-4095,4095】,默认值:0
BLC_G 黑电平 G 分量偏移,取值范围【-4095,4095】,默认值:0
BLC_B 黑电平 B 分量偏移,取值范围【-4095,4095】,默认值:0
Sharp 锐化强度联动系数,数值越大锐化越强,取值范围【0,4095】,默认值:256
Satu_Low 低亮饱和度联动系数,数值越大低亮区域饱和度越强,取值范围【0,512】,默认值:256
Satu_Mid 中亮饱和度联动系数,数值越大中亮区域饱和度越强,取值范围【0,512】,默认值:256
Satu_High 高亮饱和度联动系数,数值越大高亮区域饱和度越强,取值范围【0,512】,默认值:256
高温热噪调试策略
高温热噪的现象通常比较好分辨,如图所示,整个画面闪动的噪声会十分严重(特别是四角),随着时间流逝,清晰度也逐渐变差,与此同时,图像的颜色也会出现一些偏差。
画面颜色偏差主要还是 Sensor BLC 在这个场景下有偏移导致,例如原本 BLC 只需要由平台扣除16,但受高温影响后实际需要扣除的BLC已经比16更大了。所以调试中需要观察每个温度档位下,图像中黑色的被摄物体是否有发红的表现,然后相应调整高温联动模块中的 BLC 参数和饱和度参数。
从上图中可以看到,受温度的影响,图像噪声十分严重,那么就可以根据温度档位,适当调整降噪强度补偿和锐化强度补偿(下图参数仅作为示例,参数设置以实际情况调试为准),让画面恢复到比较正常的表现。
下图为高温联动策略生效后的效果,即使是高温条件下,图像也能够调整回相对正常的状态。
PS:如果通过高温联动策略也未能调整好图像,那么只能考虑从机器的模具设计、Sensor 选型来避免此类问题。
如何排查灯光高亮边缘存在彩条
如出现此类异常问题,请按照步骤进行排查
Step1:离线连接调试工具,导入现有参数并确认能复现到问题,离线调试预览的是未过编码的图像,可以排除编码影响
Step2:依次关闭ISP相关模块,定位是否是ISP某个模块导致的偏色
Step3:关闭d3d后,发现彩条消失,能确定是sensor在高亮区彩噪偏大,经过d3d后彩噪被定住导致彩条
Step4:根据上述排查思路,通过降低d3d的降噪强度,使得d3d不要将低频彩噪定住,可优化彩条问题
如何调用接口使用AE ROI模式
针对门锁、IPC等客户,需要使用AE ROI模式,通过设置AE ROI参数,使得指定区域的曝光能够达到预期效果。
快启方案使用方法如下所示:
//使用方式
isp_ctrl_attr.isp_attr_cfg.cfg_id = RT_ISP_CTRL_AE_ROI_TARGET;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.enable = 1; //使能AE ROI
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.force_ae_target = forceAeTarget; //AE预期目标亮度,值越大则指定区域的曝光越大
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.x1 = x1;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.y1 = y1;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.x2 = x2;
isp_ctrl_attr.isp_attr_cfg.ae_roi_area.coor.y2 = y2;
ret = AWVideoInput_SetIspAttrCfg(id, &isp_ctrl_attr);
快启方案关于坐标设置请务必注意,统计窗口是将全图坐标归一化到[-1000,1000],因此坐标设定请按照下述坐标设置。
常电方案使用方法如下所示:
//常电方案使用接口 AW_S32 AW_MPI_ISP_AE_SetRoiArea(ISP_DEV IspDev, SIZE_S Res, RECT_S RoiRgn, AW_U16 ForceAeTarget, AW_U16 Enable)
//使用方法
Res.Width = 1920; // 设置图像分辨率
Res.Height = 1080;
RoiRgn.X = 0; // 设置ROI区域,其中(x,y)为ROI区域左上角坐标,(width,height)为ROI区域宽高
RoiRgn.Y = 0;
RoiRgn.Width = 640;
RoiRgn.Height = 480;
AW_U16 ForceAeTarget = 50;
ret = AW_MPI_ISP_AE_SetRoiArea(IspDev, Res, RoiRgn, ForceAeTarget, 1);
如何实现软光敏模式
软光敏的设计方案:通过软件上获取相关参数(亮度信息+红外光分量)来判断当前环境状态,且是否要切换场景,从而替代硬件光敏感知环境亮度
其主要实现接口如下:
AW_MPI_ISP_GetEnvLV
获取当前图像亮度等级(存在负值),此参数值可初步表征当前场景亮度,亮度越高参数值越高,亮度越低参数值越低AW_MPI_ISP_GetAwbGainIr
获取当前图像中红外光分量等级(awb_rgain_ir、awb_bgain_ir),两个参数值可以在红外夜视下初步表征当前图像中红外光分量的程度,数值越高,红外光分量程度越高AW_MPI_ISP_SwitchIspConfig
切换 ISP 效果AW_MPI_VENC_SetColor2Grey
设置编码通道颜色