演习以上模型的样本则来源于bug历史截图和mock的正向数据样本。

3.模型重演习——提高模型识别准确率

初始模型在演习时样本有限,但随着app一直更新迭代,图片检测样本数量的逐渐增多,会涌现某些新页面被缺点分类,要办理这类误报问题,亟需加入模型重演习。

显然靠人肉启动模型重演习并更换旧模型本钱太高,以是在前端实现了个勾选图片去重演习的入口,通过Jenkins定时任务,读取所有重演习图片并实行重演习脚本,并把旧模型更换成新天生的即可。
经由几轮自动迭代后模型识别准确率有大幅提升。

4.图片处理——提升结果的人工甄别效率

4.1分外截图

AI在闲鱼测试实践若何应用AI技能经由进程图片找bug

有些截图可能是存在大面积空缺,但从业务角度上来说这类图片是精确的,比如搜索中间页。
此类若不处理,每次都会被识别为非常图片上报,摧残浪费蹂躏大家check的韶光,若放入模型进行重演习又有导致模型不收敛的风险。
为理解决这类图片,掩护了一个图库,对模型识别为非常的图片,会与图库中的图片进行比拟,如果与图库中任意一张相似度超过设定阈值,即认为该图片可被忽略不用上报。

4.2图片去重

目前遍历截图任务为了担保页面上所有元素都取到,单次遍历任务会至少访问同一个页面两次;同时遍历时,为了方便页面高下文剖析,会对点击元素用红框标记。
这带来了一个问题:待识别图片集中,同一个页面会有多张重复截图、且同一页面上可能会在不同的地方有红框标记。
人工考验大量重复图片识别结果难免视觉疲倦,以是展示去重后的结果可以大大提升人工甄别效率,减少本钱。

4.2.1办理办法

图片数量大,且不愿定这次遍历截图了多少不同页面时,可以利用层次聚类算法办理这个问题。
本文采取的是自底向上的聚类方法,即先将每一张截图分别算作一个簇,然后找出间隔最小的两个簇进行合并,不断重复到预期簇或者知足其他终止条件。

4.2.2实现[2]

1)打算图片之间的间隔

先将图片转换成wh3维向量,把向量间的欧式间隔作为图片之间的间隔,图片越相似,间隔越小。

def get_pic_array(url,w,h): file = cStringIO.StringIO(urllib2.urlopen(url).read()) img = Image.open(file) # PIL打开图片 img=img.resize((w, h)) try: r, g, b, k = img.split() # rgb通道分离,兼容4通道情形 except ValueError: r, g, b = img.split() # 得到长度为(wh)的一维数组 r_arr = np.array(r).reshape(w h) g_arr = np.array(g).reshape(w h) b_arr = np.array(b).reshape(w h) #将RGB三个一维数组(wh)拼接成一个一维数组(wh3) image_arr = np.concatenate((r_arr, g_arr, b_arr)) return image_arr

一次app遍历得到的n张图片要完成聚类,先单张图片按照上述处理后,再整体拼接成 n(wh3)的矩阵,做为样本集。

2)打算簇之间间隔的方法

single:两个簇中间隔最近的两个样本的间隔作为这簇间的间隔

complete:两个簇中间隔最远的两个样本的间隔作为这簇间的间隔

average:两个簇间样本两两间隔的均匀值决定,办理个别非常样本对结果对影响,但打算量比较大

ward:离差平方和,打算公式较繁芜,要想理解详细打算公式和其他打算方法见打算簇之间间隔的方法。

通过考试测验后创造ward效果比较好,以是终极选用ward作为打算簇之间间隔的方法。

Z = linkage(X, 'ward')

实行上述语句后,聚类完成。

3)临界间隔选择

该值直接影响聚类的效果,临界间隔过小,会导致某些相似图片不能聚拢到一类,临界间隔过大,又会导致不是同一个页面的图片聚在一起,以是如何选一个得当的间隔非常主要。

实验创造,如果图片被页面非常模型识别为非常图片时,每每这类图片之间的相似性越高,为了不缺点聚类不同的非常页面,分别对识别为非常和正常的图片进行聚类,并且非常类的临界间隔会设置更小一点。

5.总结与展望

目前该工具对整体页面非常的识别效果较好,文本非常的识别准确率也在丰富样本的过程中不断提升。

接下来我们汇合成LabelImg工具,用TensorFlow搭建SSD模型来识别控件非常的图片,此外元素/笔墨布局错乱等问题页面识别、页面操作预期结果识别也在不断考试测验中。
利用图片处理和缺点识别技能,作为质量担保的一种方法,我们会持续探索下去。

作者:闲鱼技能-金喏