前言
也许我们使用过Uiautomator编写过自动化测试脚本,也许我们也使用过Monkey来测试过应用的稳定性。但在使用过程中总觉得有或多或小的问题,用Uiautomator写脚本,总觉得有时候控件没法识别;用Monkey来进行稳定性测试,总觉得没法复现问题……本文将使用一个新的角度(图像识别)来看待这类型的测试问题。增加一种图像识别的方法来补充Uiautomator与Monkey的限制。
本文仅作为“抛砖”篇把图像应用到测试这个思路引出来,希望能引出更多的“玉”能参与其中一起研究。
二、图像识别及算法介绍
也许图像识别对于我们来说也不怎么陌生,或多或少都有所接触,但能把图像识别直接应用到我们测试工作中的同学好像并不是特别多。图像识别这名词官方的说法是“利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术”。其实说白了,图像识别重要的是“识别”二字。对于测试来说就是通过“识别”让计算机辅助我们测试,让计算机代替我们进行测试。
以下将就如何去“识别”的问题,介绍笔者在使用图像识别作为辅助工具所采用到的一些算法与算子。
2.1 SIFT算法
SIFT算法的主要方法是提取图片中物体上的一些局部外观兴趣点的特征值与特征方向。这些兴趣点的特征值与特征方向与图片的大小以及旋转角度无关、而且对光线与微视角的改变容忍度相当高,而且SIFT算法对于部分物体遮蔽的侦测率相当高,而且在当前电脑硬件的速度下,辨识速度接近即时运算。
SIFT算法的主要特点是尺度不变,也就是图片放大缩小不影响匹配、图片旋转任意角度不影响匹配、图片亮度增减不影响匹配、拍摄视角高低不影响匹配。
2.1.1 SIFT算法计算过程
由于SIFT算法计算过程涉及的数学知识比较多,本文不是主要以讲解数学知识为目的,所以计算过程只是笔者简略理解后得出的几个关键步骤。以下均为网上参考的资料。
1)图片去噪:算法采用去噪的算法是高斯模糊,先对输入图片进行一次高斯模糊处理。
2)构建高斯金字塔:高斯金字塔是把原图片经过连续变化尺度参数得到的一个图片组。
3)构建高斯差分金字塔:刚获得的模糊化后的高斯金字塔的每一层相邻两张图进行差分运算构建出差分金字塔。
4)提取空间极值点:通过对差分金字塔进行极值点分析,得到每张图的空间极值点。
5)获取主梯度方向:主梯度方向是极值点变化最大的那个方向为极值点的主梯度变化方向。
经过上述几个步骤后便可得出一张图在几个不同尺度下的特征点以及特征方向。
下图为使用KingRoot主页面运算得到的特征点位置及特征方向。其中圆的半径大小为极值大小,半径指向方向为特征方向。
</