AirtestProject Airtest 的图像识别新算法 “mstpl” 的使用攻略

fishfish-yu · 2021年09月08日 · 最后由 fishfish-yu 回复于 2022年02月22日 · 198 次阅读

此文章来源于项目官方公众号:“AirtestProject”
版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途

前言

在 Airtest1.2.0 版本,我们新增了 1 个图像识别的算法:mstpl。该算法在一定程度上可以提高我们图像识别的正确率。

另外,mstpl 算法还有俩个特有的参数,分别是 scale_stepscale_max 。那么今天我们就来聊一聊这俩个参数是如何调节的。

1. 如何调节 scale_step

scale_step 用于控制搜索比例步长,它代表匹配时搜索的精细程度。进行图像匹配时,会在原始截图的一定缩放范围内以截图最长边 * scale_step 的步长进行搜索。默认值 0.01,取值范围 [0.001, 0.1],推荐值 0.02, 0.005, 0.001。

通常该值不需要调整,当出现跨分辨率匹配(特别是匹配较小截图)无法匹配到时可以尝试减小它。不过减小它会大幅增加匹配时间。

举个例子,我们在进行如下所示的图像识别时:

会发现当 scale_step=0.01 时是识别不到的:

而当 scale_step=0.005 的时候,又可以识别成功:

2. 如何调节 scale_max

scale_max 用于调节匹配的最大范围,默认值 800, 取值范围 [700 , 2000],推荐值 740, 800, 1000。

考虑到匹配性能 mstpl 在开始匹配之前会将截屏大小限制一个最大值,比如,截屏为 (699, 1964) ,scale_max=1000 ,那么在匹配前截屏会被 resize 为 (356,1000)。

理论上 scale_max 越小速度越快,但也会有匹配不到较小的 UI 风险。不过由于提前退出机制,scale_max 较大时匹配较小的 UI 也可能出现更快的情况。

使用中,如果遇到截图非常小匹配不到,可以尝试调大 scale_max

举个例子,我们在进行如下所示的图像识别时:

会发现当 scale_max=1000 时是识别不到的:

而当 scale_max=1100 的时候,又可以识别成功:

3. 在哪里修改这俩个参数的值

1)通过图像编辑器修改

我们可以在 IDE 中双击该图片打开图像编辑器,在右侧的参数表格中,修改 scale_stepscale_max 的值,修改完毕之后别忘记点击右下角的 OK 按钮来保存修改:

2)直接在脚本里修改

我们也可以在 IDE 的脚本编辑窗里,右键单击空白处,选择 图片/代码模式切换 ,切换到代码模式后,在图像脚本里面添加/修改 scale_stepscale_max 的值:

touch(Template(r"tpl1631007320263.png", scale_max=1100, scale_step=0.005))
3)修改 Airtest 使用的图像识别算法

有时候,我们想根据自己项目的需求来修改 Airtest 使用的图像识别算法,比如调整 Airtest 图像识别算法的使用顺序,或者指定仅使用其中某一个算法:

from airtest.core.settings import Settings as ST

# 调整Airtest图像识别算法的使用顺序
ST.CVSTRATEGY = ["mstpl","tpl", "sift","brisk"]

# 指定仅使用mstpl算法
ST.CVSTRATEGY = ["mstpl"]

小结

那么今天关于新算法 “mstpl” 的介绍就到这里啦,如果同学们对新算法还有其他疑问,或者对 Airtest 的图像识别算法有什么意见,欢迎反馈到我们的 issue-helper 网址上(https://airtest.netease.com/issue_list)。


Airtest 官网https://airtest.netease.com/
Airtest 教程官网https://airtest.doc.io.netease.com/
搭建企业私有云服务https://airlab.163.com/b2b

官方答疑 Q 群:654700783

呀~这么认真都看到这里啦,帮忙点击左下角的爱心,给我点个赞支持一下把,灰常感谢~

共收到 4 条回复 时间 点赞

通过调节模板图片尺寸的方法来适配不同分辨率并不好用,以前的团队几年前就试过这个方法了,当图像场景复杂时,很容易出现既没有匹配到目标元素,还因为改变了尺寸,匹配到了其他不相关的元素,更加影响报错分析。

通常不同图片在不同分辨率的变化是相同的,可能会有几种变化规律,只要对这几类变化规则进行总结,根据当前分辨率来对模板图片进行调整,就可以实现一张模板图用在不同分辨率上,比增加步长的方式更稳定。

总结来说就是寻找变化的规律比瞎猜更有用。不过近几年 CV 发展挺快的,特征匹配和物体检测同样可以对模板匹配进行补充。

frankxii 回复

感谢分享,非常专业!

我们目前的做法是指定原始图片的缩放比,然后和现有程序进行对比,如果不一样则进行缩放处理,成功解决了多机型兼容的问题,你们可以尝试一下

小伟 回复

非常感谢反馈,我们尝试下!

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册