背景介绍

ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正、噪声去除、坏点去除、内插、白平衡、自动曝光控制等,依赖于ISP才能在不同的光学条件下都能较好的还原现场细节,ISP技术在很大程度上决定了摄像机的成像质量。
 
ISP这个主要用在视频监控设备、相机等。测试方法和场景适用于:IPC设备,手机相机等。

关键词

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  自动化图片质量打分

测试脚本选用python实现,可以利用opencv库,对于抓取的图片生成图片的直方图,然后对于这些直方图数据进行对比,比较这些图片的相似度。同时也可以设置一些基准图片,抓取的图片与这些基准图片进行对比,给出一个打分。
直方图数据比较脚本。
 
#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

8  图像质量人工测试

 

自动化测试脚本每天可以抓取大量的图片,这些图片可以直接浏览,主观评价这些图片的质量,并且可以看到每天不同时段的图片质量的变化,以及isp算法的适应性,调整是否合理等。

特别是日夜模式切换时图片质量的变化;光线情况快速变化时,ISP算法的适应性等。


 

ISP图像质量自动化测试方法的更多相关文章

  1. 总结Selenium自动化测试方法(一)自动化测试基础

    总结Selenium自动化测试方法 一.自动化测试基础 1.什么样的项目适合自动化测试 ①任务测试明确,不会频繁变动 ②每日构建后的测试验证 ③比较频繁的回归测试 ④软件系统界面稳定.变动少 ⑤需要在 ...

  2. ISP图像质量调节介绍

    ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正.噪声去除.坏点去除.内插.白平衡.自己主动曝光控制等.依赖于IS ...

  3. app专项测试自动化测试方法思路与实现

    秉着个人意愿打算把python+rf接口自动进行彻底结束再做些其它方面的输出~但事与愿违,但领导目前注重先把专项测试方面完成,借此,先暂停python+rf(主要是与Jenkins集成+导入DB+微信 ...

  4. WiFi无线连接真机进行Appium自动化测试方法

    有时需要测试APP 产品的耗电问题,但用自动化又面临了一个USB接电脑供电的问题,从而导致计算出来的功耗与手动跑,存在有很大的误差,因此可使用wifi无线连接到手机进行自动化测试,解决功耗问题. 前提 ...

  5. 总结Selenium自动化测试方法(六)常见的异常错误处理

    六.常见的异常错误处理 NoSuchElementException: Message: Unable to locate element: {"method":"xpa ...

  6. 总结Selenium自动化测试方法(五)自动化测试框架

    五.自动化测试框架 1.单元测试框架unittest class loginTests(unittest.TestCase): ①开始的初始化部分 @classmethod def setUpClas ...

  7. 总结Selenium自动化测试方法(四)WebDriver常用的操作

    四.WebDriver常用的操作 1.控制浏览器操作 #控制浏览器的大小 self.driver.set_window_size(480,800) #控制浏览器返回 self.driver.back( ...

  8. 总结Selenium自动化测试方法(三)WebDriver定位元素方法

    三.WebDriver定位元素 推荐使用的webdriver是firefox,因为他的firebug更能可以帮助定位页面元素使用 # create a new Firefox session cls. ...

  9. 总结Selenium自动化测试方法(二)测试环境搭建

    (接上期内容) 二.测试环境搭建 1.安装python 现在python3.0比python2.0多了一些改进的功能(详见http://zhidao.baidu.com/link?url=3sT1g7 ...

随机推荐

  1. 写jQuery插件时,一种更好的合并参数的方法

    看到很多人写jQuery插件时居然这样合并参数: this.defaults = { 'color': 'red', 'fontSize': '12px', 'textDecoration':'non ...

  2. Python学习(三) 输出任意格式的字符串以及字符串的切片

    在Python中想要输出一句话,如下 a='hello world' print a //打印出的是hello world print 'hello \n world' //打印出的是 //hello ...

  3. 论JS的重要性

    最近有学习了JavaScript,学习的过程中发现js对于前端工程师来说可以是最终要的一部分. 个人认为js就是一门语言,如果把前端比作一个人的身体,那么html就是一个人的结构,css就是这个人长的 ...

  4. python----特性003

    python特性003:计算特性 #!/usr/local/bin/python3.5 class MyNumber(object): def __init__(self,number): self. ...

  5. css清除浮动解决方案

    清除浮动包括清除子元素的浮动和清除上级元素的浮动,其中清除上级元素的浮动,只需设置clear为both就可以了,而清除子元素的浮动则可以用空标签法.clearfix方法或overflow方法.因清除上 ...

  6. 浅谈HashMap的实现原理

    1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...

  7. Java 学习 第五篇;面向对象

    1:基本数据类型的拆装: 基本变量类型 通过 new WrapperClass(primitive) 创建包装类对象: 包装类的对象 通过 WrapperInstance.XXXValue() 获取包 ...

  8. Effective Java实作类别 - 就是爱Java

    定义好了Interface之后,现在我们开始来实作类别:Role,建立一个class,implements Role,将3个属性及clone()实作出来,单纯的getter与setter,可以利用ID ...

  9. 九、 合成(Composite)模式 --结构模式(Structural Pattern)

    合成模式:有时又叫做部分-整体模式(Part-Whole).合成模式将对象组织到树结构中,可以用来描述整体与部分的关系.合成模式可以使客户端将单纯元素与复合元素同等看待. 合成模式分为安全式和透明式 ...

  10. ffmpeg参数解释 <第三篇>

    例子:ffmpeg -y -i "1.avi" -title "Test" -vcodec xvid -s 368x208 -r 29.97 -b 1500 - ...