网站客服:zx81024163 |

教你一个UI自动化框架图像识别原理,知识点最全!

2023-07-02 13:01:32发布    浏览471次    信息编号:61598

友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。

教你一个UI自动化框架图像识别原理,知识点最全!

是游戏和应用程序的跨平台编辑器。

·自动脚本录制、一键回放、报表查看,轻松实现流程

·支持基于图像识别的框架,适合所有游戏

·支持基于Poco框架的UI控件搜索,适合,以及App

一句话总结:我们推出了两款基于UI的自动化测试框架(使用截图编写脚本)和Poco(使用界面UI元素编写脚本),您可以使用我们提供的工具快速编写您的自动化测试脚本~

本文重点是对国内图像识别进行代码阅读,加深对图像识别原理的理解

1.准备工作,下载源码

2、我们从最简单的触摸方式开始,就是点击传入的图片。 源代码在api.py中

@

def touch(v, times=1, **):

”“”

触摸

:param v: 触摸,a 或 (x, y)

:param times: 多少次

:param : ``,请参阅文档

:: 成为

::,,iOS

”“”

如果 (v, ):

pos = (v, =ST.)

别的:

()

位置 = v

对于 _ 在范围内(次):

G..触摸(位置,**)

时间。 睡眠(0.05)

n()

位置

click = touch # click是touch的别名

该函数执行点击操作是G..touch(pos, **)

而pos是图片匹配返回的坐标位置,我们重点关注这个函数

@

def(查询,=ST.,=无,=0.5,=无):

”“”

对于图像中的直到

参数:

查询:要在其中找到的图像

: 寻找图像的时间

: 没有

: 睡觉旁边找图片

: 就是找到图片之后

:

:当找不到图像时

:

如果找不到图像,则图像在哪里

被发现于

”“”

(“尝试:\n%s”,查询)

=时间。 时间()

而真实:

= G..(=无)

如果没有:

G..(“没有,可能是”)

别的:

如果 :

询问。 =

= 查询.()

如果 :

()

如果不是无:

()

# 如果超时则引发,如果没有超时则进入下一个循环:

if (time.time() - ) > :

()

raise('%s在'%查询中未找到)

别的:

时间。 睡觉()

首先会获取到截图,然后与脚本传入的图像进行比较,得到匹配的位置

= 查询.()

在cv.py中找到类的方法

def(自身,):

= 自我.()

G..debug("匹配:%s", )

如果不 :

没有任何

= ().getXY(, self.)

重要的是自己。()

@

def(自身,):

# 如果图像文件不存在于:

图像=自我。()

图像 = self.(图像, , ST.)

ret = 无

对于 ST:

如果==“tpl”:

ret = self.(self., 图像, )

elif ==“筛选”:

ret = self.(self., 图像, )

如果不转:

ret = self.(self., 图像, )

别的:

G..(“在:%s”,)

如果返回:

休息

雷特

这里导入的图片需要进行缩放和更改。 编写用例时的屏幕截图进行转换,然后转换为运行用例时的屏幕截图,以提高匹配成功率

图像 = self.(图像, , ST.)

这里的匹配方法会遍历ST中的方法。 该定义位于 .py 文件中,默认包含两个方法。

= [“tpl”,“筛选”]

如果某个方法匹配了,就会返回匹配结果,所以下一步就是弄清楚这些方法是如何实现的。

也会被调用,所以接下来要分析的就是这两个方法

在cv.py中

def(自身,图像,):

aircv.(, 图像, =self., rgb=self.rgb)

def(自身,图像,):

aircv.(, 图像, =self., rgb=self.rgb)

3.先看

空气CV. 具体实现在.py中

def (, , =0.8, rgb=False):

"""函数功能:求最优结果。"""

# 第 1 步:验证图像输入

(,)

# 第二步:计算模板匹配的结果矩阵res

分辨率 = (, )

# 第三步:依次获取匹配结果

, , , = cv2.(res)

h, w = .shape[:2]

# 寻找可信度:

= (, , , , w, h, rgb)

# 求识别位置:目标中心+目标区域:

, = e(, w, h)

= (, , )

.debug("=%s, =%s" % (, ))

if >= else 无

专注于

定义 (, ):

"""获取模板匹配的结果矩阵。"""

# 灰度识别:cv2.( ) 只能处理灰度图像参数

, = (), ()

简历2.(,,简历2。)

这里可以看到,我自己并没有研究一套非常强大的算法,直接使用了模板匹配的方法。

4.然后看另外一个方法

筛选.py

def (, , =0.8, rgb=True, =):

"""基于sift的图像识别,只过滤掉最优区域。"""

# 步骤1:验证图像是否正常:

如果不 (, ):

没有任何

# 第二步:获取特征点集并匹配特征点对:返回值good, pypts, ,

, , 好= (, , )

# 步骤3:根据匹配点对(好),提取并识别区域:

如果 len(好) == 0:

# 匹配点对为0,无法提取识别区域:

没有任何

elif len(好)== 1:

# 匹配点对为1,可信度赋值一个设定值,直接返回:

nts(, 好, ) if >= else None

elif len(好)== 2:

# 匹配点对为2,根据点对计算目标区域,并据此计算可信度:

= nts(,,,,,好)

如果(,字典):

if >= else 无

别的:

, pypts, = nts(, , , , 好)

elif len(好)== 3:

# 匹配点对为3,取出点对,找到目标区域,据此计算可信度:

= 分(, , , , 好)

如果(,字典):

if >= else 无

别的:

, pypts, = 点(, , , , 好)

别的:

# 匹配点对>= 4,使用单矩阵映射找到目标区域,并计算相应的可靠性:

, pypts, = (, , , , 好)

# 第四步:根据识别区域计算结果的可信度,并返回结果:

# 检查识别结果的合理性:如果尺寸小于5像素,或者缩放超过5倍,将被视为非法,直接提出。

()

# 将截图和识别结果缩放到相同大小,准备计算可信度

x_min、x_max、y_min、y_max、w、h =

= [y_最小值:y_最大值, x_最小值:x_最大值]

= cv2.(, (w, h))

= (, , rgb=rgb)

= (, pypts, )

print("[aircv][sift] =%s, =%s" % (, ))

if >= else 无

重点关注如何找到特征点集

定义 (, , ):

"""根据传入的图像,计算图像的所有特征点,得到匹配的特征点对。"""

# 准备工作:初始化sift算子

筛选 = ()

# 步骤1:获取特征点集并匹配特征点对:返回值good, pypts, ,

, = 筛选。(, 无)

, = 筛选。(, 无)

# 应用时,请确保 test 和

# 查询图像大于或等于 knn 匹配中的 of。

如果 len() < 2 或 len() < 2:

raise r("不在输入中!")

# 匹配两张图片中的特征点集,k=2表示每个特征点取出2个最匹配的对应点:

= 弗兰恩.(, , k=2)

好=[]

# good是特征点初选的结果,前两个匹配太紧密的特征点被淘汰,不独特、不优秀的特征点直接筛选掉(直接不适用于多目标识别)

对于 m、n 中的:

如果米。 < * 编号:

好的。 (米)

# 好的点需要去除重复的部分,(源图像不能有重复的点)去重时,找出src图像中的重复点

# 去重策略:允许搜索图像到源图像的特征点一对多映射,不允许多对一重复(即源图像上的一个点不能对应多个点)搜索图像)

, = [], [[]]

对于善中的 m:

= [int([m.].pt[0]), int([m.].pt[1])]

如果不在:

.(米)

.()

好=

, , 好的

至于这个筛子是什么物体

定义():

"""确保 中有 SIFT。"""

如果 cv2..("3."):

#.x,sift 已在,你需要它。

尝试:

筛选 = cv2..(=10)

:

print("要使用 SIFT,您需要使用 .0 进行构建")

raise (“你的系统中没有 SIFT!”)

别的:

#.x,就用它吧。

筛选 = cv2.SIFT(=10)

筛

可见使用的方法也是方法,如果是的话,求图像特征点集的方法就是

CV2..(=10).()

5.总结一下,最终使用的两种方法是模板匹配和特征匹配

模板匹配 cv2。

特征匹配 cv2.(,).(des1,des2,k=2)

以先匹配为准,直接返回结果

六、总结

图像识别,利用图像识别来定位ui控件无法定位的地方,支持部分自定义控件、H5、小程序、游戏;

它支持多种终端。 如果使用图像识别,一套代码就可以兼容ios。 如果使用ui控件进行定位,则需要兼容。

缺点:对于透明背景的按钮或者控件,识别起来比较困难

本文内容请勿用于商业用途。 若涉及知识产权问题,请联系博维丰小编(-8017),我们将立即处理

提醒:请联系我时一定说明是从星空网上看到的!