背景介绍
关键词
ISP(Image Signal Processor) IPC图像质量 图像质量算法测试 自动化测试
摘 要
本文主要介绍一种测试IPC图像质量的测试方法,测试方法的思路基于用户的使用场景,以及算法的适应,自动化测试图像质量的方法;按照自然的方法进行测试,记录下ISP算法的参数变化以及对应的图像质量,根据这些数据来改善图像质量。
1 当前测试方法不足
IPC图像质量测试现状已经有了一套非常规范的测试方法,在不同的灯光下测试色彩还原能力,测试宽动态等,有专业的测试软件,例如Imatest等,可以基于这些方法和工具进行设备之间的对比测试,给出全面的图像质量的评价。
但是这样的测试有几个地方没有考虑到:
- 不能进行自动化测试,需要人工搭建测试环境,进行人工采集测试结果并分析,测试效率较低。
- 脱离了设备实际应用场景,只是模拟了典型场景,离真实环境还有一段距离。
- 只是单点的测试ISP的算法,没有测试到算法的适应性以及算法中间的过渡。
- 没有记录算法中间的变化过程。不能纵向记录ISP算法的参数变化,即按照时间的顺序记录算法调整的变化。
2 测试方法介绍
基于上述测试方法的不足之处,我们能否有一个测试方法,放置设备在一个固定的地点,记录下IPC设备全天图像变化的情况,观察设备随着时间变化图像质量的变化,可以以24小时为周期测试,记录24小时的图像变化,然后判断IPC图像质量的效果。根据这个思路,方法有两个:
- 按照时间间隔定期抓取图片
- 根据ISP参数的变化抓取图片
因为我们需要测试ISP图像质量,所以根据ISP参数的变化来抓取图片比较合理。
结合产品的特性,可以按照下面的测试方法进行测试:
实时获取影响ISP算法参数的值(例如:YUV数值,快门,增益,iris),作为基准数据;一秒钟后,获取值,并与基准数据做比较,如果有变化,则调用ISP算法接口,截取一帧的数据转换为JEPG格式保存,并记录下当前的YUV数据值;保存当前的YUV数据位基准参数。重新获取YUV值,与基准参数比较,如果有变化,抓取图片,保存基准参数。
如此循环,可以记录ISP算法的变化和图像质量情况,可以根据算法的变化曲线进行优化算法等。
测试流程图如下:
3 测试方法的优缺点分析
- 优点:
- 实现图像质量测试自动化,做到全天候测试,数据收集更加丰富
- 可以实现多台设备同时测试,测试效率更高
- 测试场景与客户真实使用场景一致,更加真实
- 可以记录ISP参数全天以及更长时间的变化,为优化算法提供基本数据
- 测试成本低,不增加新的设备和仪器,利用现有资源测试
- 测试方法简单,结果观察方便
- 不涉及到图形界面操作,测试可靠性较好
- 缺点
- 因测试原理为视频数据抽帧转为图片格式,中间有转换损失(如果直接调用前端抓拍接口,则不存在此问题)
- 无法直接判断测试结果,需要人工判断(如果有图片质量评比工具就可以自动判断了)
- 必须由开发人员对代码做一些修改或者调整
- 测试依赖环境的自然变化,测试验证场景单一
- 在实际测试中发现,每天测试生成的图片非常多,查阅测试结果需要一定的时间。(这个可以根据参数的阈值来调节,但是阈值设置需要验证)
4 开发支持准备
需要在软件添加两个接口,并注册到OSP模块,用来测试使用
一是:获取YUV值参数信息
获取ISP算法的参数,3A等参数信息。
二是:从数据流中保存一帧数据,转换为图片并保存
测试接口的功能类似于相机的拍照功能,根据参数触发图像数据抓拍
5 测试方法实现
根据测试方法描述,测试实现较为快速高效的实现是使用脚本来进行控制。需要使用FTP,Telnet功能。
脚本功能分析,根据上述测试思路,实现自动化测试,选取Python脚本来实现。需要实现的模块有:
编号 |
模块名称 |
模块功能 |
1 |
YUV数据获取模块 |
telnet到设备,执行名称,获取YUV数据 |
2 |
YUV数据提取模块 |
从返回的数据中提取出YUV数据数值 |
3 |
抓取图片模块 |
执行抓取图片命令,获得当前参数下的图片 |
4 |
FTP下载图片模块 |
用ftp方法把图片从设备保存到本地目录 |
5 |
输出测试报告模块 |
根据YUV数据,图片,以及时间输出html格式测试报告 |
6 测试方法应用
前面章节介绍了传统测试方法的缺点,也介绍了此测试方法的优势。但是此测试方法不能替代原有的专业的ISP图像质量测试方法,但是可以作为快速验证、回归测试以及对比测试的方法。
快速验证:现在每天都有版本出来,靠传统方法难以快速验证,利用此方法可以做到验证每天版本的ISP图像质量。
回归测试:在ISP算法调整后,回归测试算法调整效果。ISP算法调整后,用此测试方法验证算法的基本情况以及适应性。
对比测试:同时测试两台设备的效果对比,快捷方便。
7 自动化图片质量打分
#sudo pip install PIL def pil_image_similarity(filepath1, filepath2): from PIL import Image import math import operator image1 = Image.open(filepath1) image2 = Image.open(filepath2) # image1 = get_thumbnail(img1) # image2 = get_thumbnail(img2) h1 = image1.histogram() h2 = image2.histogram() rms = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1) ) return rms
此段代码使用了:monkey https://testerhome.com/topics/202