surf特征原理

2023-10-26

前言

也许我们使用过Uiautomator编写过自动化测试脚本,也许我们也使用过Monkey来测试过应用的稳定性。但在使用过程中总觉得有或多或小的问题,用Uiautomator写脚本,总觉得有时候控件没法识别;用Monkey来进行稳定性测试,总觉得没法复现问题……本文将使用一个新的角度(图像识别)来看待这类型的测试问题。增加一种图像识别的方法来补充Uiautomator与Monkey的限制。

本文仅作为“抛砖”篇把图像应用到测试这个思路引出来,希望能引出更多的“玉”能参与其中一起研究。

二、图像识别及算法介绍

也许图像识别对于我们来说也不怎么陌生,或多或少都有所接触,但能把图像识别直接应用到我们测试工作中的同学好像并不是特别多。图像识别这名词官方的说法是“利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术”。其实说白了,图像识别重要的是“识别”二字。对于测试来说就是通过“识别”让计算机辅助我们测试,让计算机代替我们进行测试。

以下将就如何去“识别”的问题,介绍笔者在使用图像识别作为辅助工具所采用到的一些算法与算子。

2.1 SIFT算法

SIFT算法的主要方法是提取图片中物体上的一些局部外观兴趣点的特征值与特征方向。这些兴趣点的特征值与特征方向与图片的大小以及旋转角度无关、而且对光线与微视角的改变容忍度相当高,而且SIFT算法对于部分物体遮蔽的侦测率相当高,而且在当前电脑硬件的速度下,辨识速度接近即时运算。

SIFT算法的主要特点是尺度不变,也就是图片放大缩小不影响匹配、图片旋转任意角度不影响匹配、图片亮度增减不影响匹配、拍摄视角高低不影响匹配。

2.1.1 SIFT算法计算过程

由于SIFT算法计算过程涉及的数学知识比较多,本文不是主要以讲解数学知识为目的,所以计算过程只是笔者简略理解后得出的几个关键步骤。以下均为网上参考的资料。

1)图片去噪:算法采用去噪的算法是高斯模糊,先对输入图片进行一次高斯模糊处理。

2)构建高斯金字塔:高斯金字塔是把原图片经过连续变化尺度参数得到的一个图片组。

3)构建高斯差分金字塔:刚获得的模糊化后的高斯金字塔的每一层相邻两张图进行差分运算构建出差分金字塔。

4)提取空间极值点:通过对差分金字塔进行极值点分析,得到每张图的空间极值点。

5)获取主梯度方向:主梯度方向是极值点变化最大的那个方向为极值点的主梯度变化方向。

经过上述几个步骤后便可得出一张图在几个不同尺度下的特征点以及特征方向。

下图为使用KingRoot主页面运算得到的特征点位置及特征方向。其中圆的半径大小为极值大小,半径指向方向为特征方向。

2.2 Canny算子

对于轮廓识别,有很多各种各样的算子。Canny算子的作用是:能尽可能多地表示出图像的实际边缘;标识出的边缘尽可能与实际图像的实际边缘接近;图像中边缘只能识别一次且噪声点识别为边缘。

2.2.1 Canny算子的运算过程

与SIFT算法类似,本文并不针对Canny算子很细节部分的运算过程作详细介绍,笔者根据自己的理解给出以下的计算步骤。

1)图片去噪:Canny算子使用去噪的方法跟SIFT算法一致,同样使用高斯模糊来实现。

2)获取梯度:通过计算图片中每个点各个方向的梯度来获取图像中每个点的亮度梯度,以及亮度梯度方向。

3)边缘检测:采用双阈值算法。使用高阈值过滤大部分噪点,用低阈值保留图片大部分信息。

下图为KingRoot主页以及使用Canny算子算出的轮廓信息。如图所示能把图片中大部分轮廓部分都获取到了。

三、图像识别应用

3.1 基于图像识别的控件点击方法

在使用Uiautomator的时候往往会遇到一个问题对于某些手机弹框是按钮并不能很好的识别,如下图。如果测试的过程中需要去点击“通用设置”按钮,实际上是没法通过Uiautomator来进行点击的。

因为对于上图的弹框Uiautomator是没办法很好的识别的,如下图。整个弹框在Uiautomator的xml里面是不存在的,整个主页被识别成一个View。因此在我们测试中往往会采用坐标点击的方法来进行规避,但却衍生出适配的问题。换了一台手机分辨率变化了,脚本就没法进行了。

基于上述问题,广州测试组采用的是使用图像识别的方法来把“通用设置”的位置找到,并进行点击。因为SIFT算法具有尺度不变性,而且不受大小光照等方面的影响,所以可以采用它来进行匹配。具体算法的流程图如下所示。

算法主要有以下7步,即可实现对未能识别的控件进行查找点击。

1、预先把需要匹配的图片先保存起来

2、截取当前屏幕

3、SIFT算法输出目标图与屏幕截图的特征值特征变量

4、通过KNN算法进行特征值特征向量的匹配

5、把偏离比较严重的噪点去掉

6、求出点集合的中心点

7、实现点击事件

本文以点击“通用设置”为例,通过SIFT算法求出原图与屏幕截图的特征值特征向量如下图所示。可以看出两者的特征值,特征向量是相当类似的。

匹配的过程如下图所示,可以看出匹配到的大部分值都处在“通用设置”的位置中。

通过上述的步骤,便可获取到“通用设置”在屏幕中的位置,再实现点击则可实现点击“通用设置”的方法了。

3.2 深度遍历工测试工具

基于Canny算子与Uiautomator的深度遍历测试工具

在使用Monkey进行随机操作的时候我们会发现,很多时候Monkey不能很好的模拟人去点击有用的关键的点,从而做了无用功浪费了很多时间测试效率也不高。同时,如果在点击的过程中发现crash又不能很好的知道之前操作过的路径,复现bug尤为困难。因此笔者在考虑是否实现一个工具可以模拟小白用户进行点击操作、又能记录操作过的路径、又能在更大程度的把应用都点一遍。

基于Canny算子与Uiautomator的深度遍历测试工具其实能很好的解决以下的问题。首先介绍下这个工具的环境情况。如下图所示。主控程序在PC上运行,被控对象是手机,两者的交互的通讯是通过adb命令来进行交互。

3.2.1 工具功能

深度遍历工具的主要功能有以下几个:

1、实现随机点击功能,多点击有关键意义的点;

2、时刻检查是否在点击被测应用,如果跳出返回并继续(因为有可能在点击过程中发生应用间跳转);

3、完整记录点击的路径,能复现点击的路径;

4、每一步操作都有相应的截图,可以让测试者回看确认;

5、应用crash实现报警,及时停止运行。

3.2.2 测试工具工作流程

测试工具的工作流程图如下图所示。

测试工具的大致流程有以下8个步骤。

1、截图取出轮廓关键点

2、取出Uiautomator布局文件,取出clickable=True的点加入关键点列表

3、依次点击关键点,并判断是否有跳转

4、有跳转则返回1,重新开始导出关键点

5、无跳转则把上一点标记为无用点,并继续点击

6、无跳转且当前页面点击完,判断是否可返回未点击完的页面

7、能返回未点击完页面则跳转返回

8、不能返回未点击完页面则退出工具

3.2.3 关键点定义

对于关键点的定义,不同测试人员有不同的见解。笔者认为关键点必须具备以下两个条件:

1、可点击的一定是关键点;

2、看上去像是可以点击且具有意义的位置。

按照这两个条件,笔者一方面把Uiautomator中clickable= True属性的点都纳入关键点,另一方面把通过Canny识别具有明确轮廓意义的点也纳入关键点,因为在笔者看来一般被轮廓包围的都或是一张完整的图片,或是一个具有完整意义的字等。

3.2.4 遍历规则

测试工具遍历点击的规则采用的是深度优先的算法,也就是每点击一步,判断是否有跳转,如果有跳转且与之前出现过的页面各不相同,则重新创建一组新的关键点组,从第一点开始遍历。如果没跳转则从下个点继续点击,直到当前再无页面跳转且当前页面的所有关键点都已经被点击过了,则进行回退步骤。判断是否跳转的标准是在点击前后分别进行图片对比,观察图片的相似度来判断,若相似度小于某个阈值(程序定义为0.8)则说明有跳转。

3.2.5 返回规则

若出现当前页面所有点都已经点击过且再无出现新的跳转页面时,工具会判断当前工程是否还有未完成点击的页面,且判断当前页面能否跳转过去。判断的准则是从当前页面按广度搜索下一级跳转的页面,如果有未完成的页面则跳转,若一级页面无跳转,则遍历二级的子页面,以此类推,直到找到一条可回退的路径。

3.2.6 路径记录

点击路径的记录有以下几个关键点需要记录到。

1、当前页面信息:包括页面id、完成状态、对应的pic的名字

2、关键点信息:包括点id、状态(未点击、点击过了)

由于xml表读写比较方便,而且易于显示,因此在记录路径的载体选择上,本工具采用的是xml作为记录的载体,具体记录的格式如下图所示。

3.2.7 实现效果

以手机管家为测试对象,笔者使用此工具,在一个晚上中遍历了大概100+的图片,每一张图片都保证是不一致的,而且能把管家一二级页面都能遍历得70%-80%,能基本实现遍历的自动化操作。

3.2.8 不足与展望

虽然能够基本遍历管家一二级页面的70%-80%,但工具依旧存在着以下不足还需要去优化解决。

1、对于需要加载的页面,加载前和加载后会被认为是两个页面。这是由于页面加载需要时间,而虽然工具每次截图之前都有一个等待时间,但对于加载过长的页面就会导致加载前后两个截图不一致被认为是两个页面。

2、运行时间过长。对于管家100+的图片是建立在遍历了11-12个小时的运行时间下的出来的,因为每次截图需要时间,等待界面跳转需要时间,而且每个页面关键点也比较多,信息如此之多因此运行的时间较长。

3、对于一些一次性页面,也就是点击同样一位置的同一按钮,首次与其他次点击进去的页面不一致的页面,由于路径表中记录了跳转的页面,因此在返回的时候就会出现对应不上的现象。

4、图像识别的方法仅能作为Uiautomator与Monkey的一个补充,解决了Uiautomator的一些限制,不能很好的完全替代Uiautomator与Monkey。 
展望未来,基于图像识别的功能还是大有可为的,但却有以下可以优化的地方。

1、降低运行的时间,可以通过对界面稳定性的判断,判断当前界面稳定,不在有Loading与扫描等操作后执行跳转,这样可以减少很多无用的截图从而提高的效率

2、在图像相似度的算法的运算速度上做优化,当前比较两张图相似度需要约0.5s,所以是比较浪费时间的。优化方向一方面可以在保证效果不变的情况下减少图片的大小,另一方面采取新的计算方法加快相似度的运算。

3、优化xml文件读写的操作,由于在当前代码架构下xml会被多次重载与写入,多次I/O操作导致系统耗时比较多,因此可以减少读写的次数达到优化运行时间的目的。

四、总结

对于图像识别用于测试的路子本文仅为抛砖引玉篇,希望能在后面能在图像识别中加入机器学习与神经网络等当前热门的技术,并将其应用到测试工具的开发中。希望本文能够激发更多对图像识别的同学多思考,并将图像识别能更多的应用于工作中去。

原理:http://blog.csdn.net/tmq1225/article/details/55211557

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

surf特征原理 的相关文章

  • surf特征原理

    前言 也许我们使用过Uiautomator编写过自动化测试脚本 也许我们也使用过Monkey来测试过应用的稳定性 但在使用过程中总觉得有或多或小的问题 用Uiautomator写脚本 总觉得有时候控件没法识别 用Monkey来进行稳定性测试
  • 你应该掌握的七种回归技术

    摘要 本文解释了回归分析及其优势 重点总结了应该掌握的线性回归 逻辑回归 多项式回归 逐步回归 岭回归 套索回归 ElasticNet回归等七种最常用的回归技术及其关键要素 最后介绍了选择正确的回归模型的关键因素 编者按 回归分析是建模和分
  • A卡和N卡

    NVIDIA 全称为NVIDIA Corporation NASDAQ NVDA 官方中文名称英伟达 A卡 AMD的卡 N卡 英伟达的卡 DirectXDirectCompute对手是OpenGL opencl 对手是cuda AMD的卡特
  • 色温

    色温是表示光线中包含颜色成分的一个计量单位 从理论上说 黑体温度指绝对黑体从绝对零度 273 开始加温后所呈现的颜色 黑体在受热后 逐渐由黑变红 转黄 发白 最后发出蓝色光 当加热到一定的温度 黑体发出的光所含的光谱成分 就称为这一温度下的
  • 理解图像卷积操作的意义

    参考 http blog csdn net chaipp0607 article details 72236892 locationNum 9 fps 1 理解图像卷积操作的意义 标签 图像处理图像卷积 2017 05 16 22 40 4
  • 匈牙利算法

    趣写算法系列之 匈牙利算法 匈牙利算法是由匈牙利数学家Edmonds于1965年提出 因而得名 匈牙利算法是基于Hall定理中充分性证明的思想 它是部图匹配最常见的算法 该算法的核心就是寻找增广路径 它是一种用增广路径求二分图最大匹配的算法
  • 时域和空域和频域

    傅立叶变换是f t 乘以正弦项的展开 正弦项的频率由u 其实是miu 的值决定 因为积分后左边剩下的为一变量是频率 所以我们说傅立叶变换域是频率域 数字图像处理 冈萨雷斯 中文第三版P128 当变量t用于说明图像时 我们一般将变量t的域称为
  • 圆检测学习笔记

    目录 边缘检测 再检测圆 霍夫圆检测 转自 深度OpenCV开发之精准找圆 GitHub zikai1 CircleDetection circle detection inscribed triangles image processin
  • cnn图像质量评价

    参考 https blog csdn net moxibingdao article details 107096783 上面左图为原图 中间为经过JPEG2000压缩后的图 右图为高斯模糊后的图 从清晰度来讲 肯定第一幅图质量更高 质量评
  • 人像抠图学习笔记

    目录 人脸分割BiseNetV2 u2net 人脸分割BiseNetV2 宣传的 BiSeNet V2出来了 72 6 的mIOU 156FPS的速度 让分割飞起来 模型30多m TensorFlow平台的 cpu版时间80ms 人脸抠图
  • FastDFS安装与配置

    FastDFS安装与配置 简介 FastDFS是一个开源的轻量级分布式文件系统 它对文件进行管理 功能包括 文件存储 文件同步 文件访问 文件上传 文件下载 等 解决了大容量存储和负载均衡的问题 特别适合以文件为载体的在线服务 如相册网站
  • pww区域连接特征提取算法

    主题思想 任何一个图像 肯定由多个或一个区域 每个区域在横向扫描时 会有分裂和合并 比如圆环 顶部有一个分裂点 底部有一个合并点 没有分裂合并的图形 就是简单的凸图像 很容易通过外形识别 而复杂的图像 就是凹的 就需要分裂合并点来识别 旋转
  • 3d指向检测 ros_3d_pointing_detection

    Introduction The workflow of this project is Detect 2D human joints from color image by Openpose Compute 3D human joints
  • mediapipe face_mesh测试

    目录 onnx测试 tensorflow预测tflite代码 onnx测试 img path r D data val result 1212 test 1 2 02370 1 jpg img path r D data face 1212
  • 深度学习 图像融合使用笔记 2023 harmonized

    目录 cvpr2023 INR Harmonization即将开源 CDTnet没开源 DCCF 图像滤镜 变色 pil灰度图转opencv
  • opencv光流Optical Flow

    光流Optical Flow 现在四轴飞行器越来越火 如何在室内进行定位呢 不同于传统四轴的姿态控制 电机驱动 室外定位 都有了一套完整的方案 室内定位还是没有完全成熟 目前大四轴可以利用的GPS定高 小四轴比较成熟的也就是光流方案了 先看
  • 视频稳像(Video Stabilization)

    原文 https blog csdn net hjl240 article details 52683738 开源 关键词 Video Stabilization 不错 https github com yaochih awesome vi
  • vlfeat 特征检测

    https blog csdn net wangxinsheng0901 article details 79676081 https github com dougalsutherland vlfeat ctypes
  • 特征值和特征向量的几何和物理意义

    原文 http blog 163 com renguangqian 126 blog static 1624014002011711114526759 FUCk 相见很晚 如果大学期间遇到这样的文章 线代必须90分以上 特征值和特征向量的几
  • 无法解析的外部符号 “public: __cdecl nvinfer1::YoloPluginCreator::YoloPluginCreator

    无法解析的外部符号 public cdecl nvinfer1 YoloPluginCreator YoloPluginCreator 解决方法1 不选择c 项目 而选择建一个nvidia runtime项目 自动就带有了 解决方法2 在V

随机推荐

  • struct iphdr IP头部与tcphdr tcp头部与linux中的struct IP IP头部

    struct iphdr IP头部 sk buff gt iphdr usr src linux 2 6 19 include linux ip h struct iphdr if defined LITTLE ENDIAN BITFIEL
  • 用Process Explorer分析进程各个线程CPU占用率

    使用Process Explorer可以很方便查看某个进程各个线程的CPU占用率 可以为排查问题提供帮助 我使用的Process Explorer版本是v16 21 64bit 使用VS 2008创建一个MFC对话框程序 在代码中创建两个线
  • ajax上传 webapi,让webapi只接受ajax请求

    AjaxOnly继承ActionFilterAttribute 代码如下 public class AjaxOnlyAttribute ActionFilterAttribute public override void OnActionE
  • 2022 MathorCup 数学建模B题思路解析

    文章目录 Mathorcup B题题目介绍 一 问题一 1 地图模型 2 路径规划 3 任务分配调度模型 二 问题二 三 问题三 1 分析 1 点冲突 2 边冲突 2 冲突处理及模型评价 Mathorcup B题题目介绍 B题无人仓的搬运机
  • Visual Leak Detector(vld)无法显示内存泄露打印信息解决办法

    如果使用vld时 没有任何泄露信息输出时 关注编译过程是否出现编译警告 warning C4627 include
  • List 转换为 List<实体类>

    步骤 1 for循环遍历list 2 用Object 数组接受每个Object对象 3 将Object 里的参数取出放入 实体对象中 4 将实体对象放进 list lt 实体类 gt 中 String sql SELECT FROM dep
  • JAVA获取对象类名

    对象名 getClass 与类名 class所得到的字符串相同 String a new String aaa System out println a getClass String class 返回true
  • 关于fatal error LNK1104: cannot open file 'uuid.lib'的问题

    关于fatal error LNK1104 cannot open file uuid lib 的问题 今天想要将cl命令配置到命令行中使用 在网上找了一下资料 按照http www oschina net question 234345
  • GPIO的速度的理解

    一 GPIO模式配置 1 输入 输出模式 参考stm32手册 2 GPIO输出模式下 几种速度的区别 1 GPIO 引脚速度 GPIO Speed 2MHz 10MHz 50MHz 又称输出驱动电路的响应速度 芯片内部在I O口的输出部分安
  • 逆变器原理

    逆变器是把直流电转变为交流电的一种装置 它一般包括逆变桥 控制逻辑和滤波电路组成 主要是把各种直流源转变为交流供交流负载使用 一般直流源有蓄电池 干电池 太阳能电池等 可以应用到不间断电源 UPS 太阳能发电转换等 本次来探讨一下逆变桥的工
  • Unity游戏开发——UnityUGUI打包图集

    现在Unity中使用UGUI实现UI的越来越多 我们项目也才4 6 1升级到5 6 3对项目全面升级 5 x中UGUI已经非常成熟 各种资料各种效果都非常多 由于之前一直习惯用NGUI在使用UGUI还是比较顺利的 都是一个作者写的都是控件式
  • 货币战争

    中国人写的关于货币的书籍 卖的比较好 关于xx家族的阴谋论 金融控制了世界 现在xx家族的财富得有多少 有许多人反驳这本书中写的内容 xx家族早已没落了 但是写的还是不错的 推荐推荐 2013 9 29
  • esp32微型计算机,基于ESP32的几款开发板

    ESP32是乐鑫推出的一款芯片 拥有40nm的工艺 双核32位MCU 2 4GHz双模Wi Fi和蓝牙芯片 主频高达230MHz 计算能力可达600DMIPS 下面为大家介绍一些基于ESP32的开发板 1 Heartypatch 一款基于E
  • 【Kafka】docker部署Kafka集群

    目录 Kafka概述 Kafka集群docker部署流程 简述 环境准备 部署流程 参考文献 Kafka概述 以下概述Kafka内的几个核心概念 可参考官方文档 有兴趣可读 kafka apache org Topic与日志 Topic 就
  • 第四篇、UDP消息发送

    文章目录 前言 一 UDP通信操作 二 代码示例 1 UDP消息发送 总结 前言 上一篇我们共同学习了TCP文件传输 本篇我们来学习UDP消息发送 一 UDP通信操作 发送方 1 建立一个socket连接 2 建立一个包 3 发送包 4 关
  • SSL VPN

    1 SSL工作过程是什么 第一阶段 客户端首先发送client hello消息到服务端 服务端收到client hello信息后 再发送server hello消息到客户端 随机数 32位时间戳 28字节随机序列 用于计算摘要信息和预主密钥
  • Java系列——封装、继承、多态初了解

    目录 一 前言 二 封装 1 什么是封装 2 封装的特点 3 封装的使用 三 继承 1 什么是继承 2 继承的特点 3 继承的优点 4 继承的使用 4 1 继承的格式 4 2 继承的演示 4 3 成员变量 4 4 成员方法 4 5 构造方法
  • Pyhton零售数据分析及产品关联分析

    一 项目背景 总结 项目背景 以购物篮分析为背景 分析某跨国棒球用品零售商的历史订单数据 为企业提供运营及销售策略 项目总结 一 本项目对企业历史订单数据进行以下角度的处理及分析 数据探索及清洗 对6w 订单数据进行探索及清洗处理 为数据构
  • 2022年最新前端面试题,持续更新

    js面试题 1 js数据类型 基本数据类型 Number String Boolean Null Undefined Symbol bigInt 引用数据类型 object Array Date Function RegExp 2 js变量
  • surf特征原理

    前言 也许我们使用过Uiautomator编写过自动化测试脚本 也许我们也使用过Monkey来测试过应用的稳定性 但在使用过程中总觉得有或多或小的问题 用Uiautomator写脚本 总觉得有时候控件没法识别 用Monkey来进行稳定性测试