Airtest精讲Template配置参数

news2024/11/14 12:04:33

Airtest精讲Template配置参数

今天我们讲一下airtest图像识别中的一个最基本、最常用的一个类Template

在这里插入图片描述
在这里插入图片描述

一、环境背景

首先我们先看一个非常简单的脚本示例,在AirtestIDE中,显示如图:

在这里插入图片描述
在编辑器中点击鼠标右键菜单的‘图片/代码模式切换’,切换到代码模式,可以看到每一张图就是一个Template()类实例。在这里插入图片描述
所以本质上airtest脚本还是python代码,只不过在AirtestIDE中经过特殊处理,显示成了所见即所得的图片模式。
比如下面这句,运行时会先去读取这张图片,然后在当前画面中找到最符合这张图片的坐标点,通过touch点击返回的坐标点。

touch(Template(r"tpl1630325470097.png", record_pos=(0.02, -0.071), resolution=(2400, 1080)))

二、源码

在开始讲解Template类详细使用之前,先看一下其初始化源码:

# 文件位置:your_python_path/site-packages/airtest/core/cv.py

class Template(object):
    """
    picture as touch/swipe/wait/exists target and extra info for cv match
    filename: pic filename
    target_pos: ret which pos in the pic
    record_pos: pos in screen when recording
    resolution: screen resolution when recording
    rgb: 识别结果是否使用rgb三通道进行校验.
    scale_max: 多尺度模板匹配最大范围.
    scale_step: 多尺度模板匹配搜索步长.
    """

    def __init__(self, filename, threshold=None, target_pos=TargetPos.MID, record_pos=None, resolution=(), rgb=False, scale_max=800, scale_step=0.005):
        self.filename = filename
        self._filepath = None
        self.threshold = threshold or ST.THRESHOLD
        self.target_pos = target_pos
        self.record_pos = record_pos
        self.resolution = resolution
        self.rgb = rgb
        self.scale_max = scale_max
        self.scale_step = scale_step

三、配置参数

根据上面的例子可以看到,在AirtestIDE中截的图,默认会带3个参数:

filename:文件路径。如上例中r"tpl1630325470097.png"表示当前路径下的这张图片,也可以是绝对路径,如r’/picture/1.png’

1、record_pos**:图片坐标对应手机屏幕中心点的偏移值相对于手机分辨率的百分比

在这里插入图片描述

record_pos:图片坐标对应手机屏幕中心点的偏移值相对于手机分辨率的百分比,匹配时会优先匹配这附近的画面。这样Airtest在图像匹配时,会优化在这个坐标区域附件查找,提高查找图片的速度和精确度。如果在这个区域找不到,才会将查找范围扩大至整个画面。

2、resolution**:手机分辨率

在这里插入图片描述

**resolution:手机分辨率。**当脚本执行时的手机不是录制时的手机时,Airtest会对屏幕截图按照分辨率进行缩放,最大程度兼容跨分辨率匹配。但如果不同手机的分辨率比例相差大,仍会导致匹配不到图片,所以可能同一张图,不同手机需要准备2张或以上的图片做为查找图片。
以下为一个图片,多个不同分辨率手机截图时的查找示例:

flower_xiaomi = Template(r"flower_xiaomi.png", record_pos=(0.79, 0.32), resolution=(1024, 2000))

flower_huawei = Template(r"flower_huawei.png", record_pos=(0.81, 0.4), resolution=(800, 1600))

pic_list = [flower_xiaomi,flower_huawei]
for pic in pic_list:
     pos = exists(pic)  # 图片找到返回坐标,没找到返回False
     if pos:
         touch(pos)
         break  # 只要找到图片列表中的任何一张图片,就执行touch,并结束循环

除了上边3个默认的参数,我们看到源码中还有其他参数:

3、threshold:识别阈值

在这里插入图片描述

threshold:识别阈值,浮点类型,范围是[0.0, 1.0],默认0.7。

也就是当识别可信度=>0.7时就认为是匹配的。对于计算机来说,不存在2张完全一样的图片,计算机只能告诉你2张图片的相似程度。比如相似度是0.9(90%)就是比较像,相似度是0.5(50%)就是不太像。计算机只会告诉你相似度,那这2张图算不算匹配,是由人通过阈值决定的。比如我们说只要相似度70%以上,就算是一样的。

我们可以指定某个图片的阈值,如

touch(Template(r"tpl1556019871196.png", threshold=0.9))

但假如我们想让所有图片的阈值都是0.9,可以通过全局设置:

from airtest.core.api import *
# airtest.core.api中包含了一个名为ST的变量,即为全局设置
ST.THRESHOLD = 0.9  # 设置全局的匹配阈值为0.9

# 未写明图片threshold,使用上面全局的ST.THRESHOLD=0.9
touch(Template(r"1.png", record_pos=(0.79, 0.32), resolution=(107, 1164)))

# 指定图片threshold,以图片设置的0.6为准
touch(Template(r"2.png", record_pos=(0.79, 0.32), resolution=(107, 1164), threshold=0.6))

根据经验,默认的0.7是比较合理的能用的,大家可以根据自己的实际情况进行调节,总结出一个适合自己的阈值。

4、target_pos:图片点击位置

在这里插入图片描述

target_pos:图片点击位置,整型,默认为5,即图片的中心点。
在上面Template初始化源码中,target_pos的默认值是TargetPos.MID,我们去TargetPos类定义中可知,MID就是5

文件位置:your_python_path/site-packages/airtest/utils/transform.py
class TargetPos(object):
    """
    点击目标图片的不同位置,默认为中心点5
    1 2 3
    4 5 6
    7 8 9
    """
    LEFTUP, UP, RIGHTUP = 1, 2, 3
    LEFT, MID, RIGHT = 4, 5, 6
    LEFTDOWN, DOWN, RIGHTDOWN = 7, 8, 9

从以上代码,可以看出点击位置的取值范围是1~9,这9个点对应下图
在这里插入图片描述
上图中红线圈起来的就是我们要找的图,找到图后要点击,默认是点5那个点,如果我们想点图中的升级按钮,那应该设置成8

touch(Template(r"1.png", target_pos=8))

再举一个例子,我们要点击图中的玩吧的安装按钮

在这里插入图片描述
我们可以这样截图
在这里插入图片描述
因为默认是5,不用改,如果想安装第1个app,设target_pos=2;如果想安装第3个app,设target_pos=8

5 、rgb:是否开启彩色识别

在这里插入图片描述

rgb:是否开启彩色识别,Bool类型,默认False。
rgb=False时,Airtest会先将图像转为灰度图再进行识别;为True时,指定使用彩色图像进行识别。一般情况下,我们都用默认的False即可,但假如画面上有多个形状相同颜色不同图片时,就要设为True。

如上图,删除按钮形状、文字完全一样,如果不开rgb,是不会准确识别到红色按钮的。
在这里插入图片描述
在这里插入图片描述

6、scale_max:Airtest1.2.0新增图像识别算法mstpl专用参数

在这里插入图片描述
scale_max:Airtest1.2.0新增图像识别算法mstpl专用参数,用于调节匹配的最大范围,默认值 800, 推荐值 740, 800, 1000 取值范围 [700 , 2000]。比如截屏为(500,2000),scale_max=1000,则在匹配前截屏会resize为(250,1000)。resize后图片大小少了一倍,理论上匹配速度也会变快,但因为缩小后,更不容易匹配较小的UI,所以如果要查找的目标UI很小的话,可以适当增大这个数值。

7、scale_step:Airtest1.2.0新增图像识别算法mstpl专用参数

在这里插入图片描述

scale_step:Airtest1.2.0新增图像识别算法mstpl专用参数,用于控制搜索比例步长,在匹配时,会以截图最长边*scale_step的步长进行搜索,默认值0.005,推荐值 0.02, 0.005, 0.001 取值范围 [0.001, 0.1]。如果要查找的目标UI很小的话,可以适当减小这个数值(通常不需要调整该值,但如果有跨分辨率匹配失败,可以尝试减少,相应的匹配时间则会大大增加)

以上所有这些参数的修改、调试,在AirtestIDE中都可以通过‘图片编辑器’从UI界面上修改,可以看之前的文章:AirtestIDE高级功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美股:AMD展现乐观前景,挑战AI加速器市场霸主

在科技行业的激烈竞争中,AMD公司近期发布了对当前季度收入的乐观预测,显示出其新推出 一、AMD第三季度营收预期超越分析师平均预期 AMD在周二的声明中预计,第三季度营收将达到约67亿美元,这一数字超出了分析师此前平均预期的66.…

mybatis-plus雪花算法

苞米豆mybatis-plus已实现雪花算法,若项目中使用雪花算法生成自增主键,可直接引用相关jar实现其工具类,若不想再单独引用jar也可将其Sequence类直接复制到自己项目中定义为工具类使用 官方文档:https://baomidou.com/ Git地址&am…

ESP32是什么?

ESP32是一款由乐鑫信息科技(Espressif Systems)推出的高度集成的低功耗系统级芯片(SoC),它结合了双核处理器、无线通信、低功耗特性和丰富的外设,特别适用于各种物联网(IoT)应用。以…

架构设计中期应该怎么做?

设计备选方案 架构设计常见的错误思维 什么是备选架构? 能够解决系统复杂度的方案 备选方案设计过程 备选架构设计技巧 备选方案常见困难和应对技巧 学的太浅:不知道本质 比较学习法 评估和选择备选方案 错误的方法 正确的方法 - 360度环评 优先级排…

vulhub-wordpress

1.打开wordpress关卡,选择简体中文 2.添加信息——点击安装WordPress 登录 点击外观—编辑主题 插入一句话木马 —更新文件 访问404.php的路径/wp-content/themes/twentyfifteen/404.php 使用菜刀连接

嗖嗖移动业务大厅(Java版)

首先对此项目说明一下,我只完成了项目的基本需求,另外增加了一个用户反馈的功能,但是可能项目中间使用嗖嗖这个功能还有一些需要完善的地方,或者还有一些小bug,就当给大家参考一下了,希望谅解。代码我也上传…

数据结构初阶之排序(下)

前言 上一期内容中我们了解了基本排序中的插入与选择排序,今天我将为大家带来剩下的几种排序算法 快速排序 快速排序是Hoare于1962年提出的⼀种⼆叉树结构的交换排序⽅法,其基本思想为:任取待排序元素序列中的某元素作为基准值,…

ARM 架构与技术综述

目录 认识 ARM ARM 发展历史 指令集 ARM 公司产品分类 ARM 体系结构 数据类型约定 处理器的 32 位和 64 位含义 指令集 ARM 处理器的工作模式 CPU (内核) 组成 寄存器 时钟 认识 ARM ARM 可以指: 一家公司。一种技术。一系列处理器。 架构:A…

定时任务框架 xxl-job

🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…

算法通关:015:最小栈

文章目录 题目思路主要代码问题总结有时候提交不了可能是方法名的问题 题目 leetcode152 思路 主要代码 同一个思路,法一是用栈实现,法二是用数组实现 /*** Author: ggdpzhk* CreateTime: 2024-08-03* 最小栈 155*/ import java.util.Stack;public…

fonttools - 操作字体

文章目录 一、关于 fonttools二、安装贡献测试可选依赖 三、如何制作新版本四、工具五、库 一、关于 fonttools fontTools是一个用于操作字体的库,用Python编写。这 项目包括TTX工具,可以转换TrueType和OpenType XML文本格式之间的字体,也称…

cesium加载wms与arcgis服务

1、加载geoserver的wms服务 2、加载arcgis服务

idea使用free流程,2024idea、2023idea都可以安装免费使用

1.先到官网下载,这里选择win系统的,点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好,安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…

C++计算二维坐标欧式距离

1.何为欧式距离 在欧几里得空间中&#xff0c;点x (x1,…,xn)和 y (y1,…,yn)之间的欧氏距离为 2.C实现计算两点欧氏距离 point1(x1, y1): (1,3) point2(x2, y2): (2,6) #include <iostream> #include <cmath>using namespace std;int main() {struct point {…

【Android驱动08】Sensor传感器框架以及驱动移植和调试方法(Kernel层部分)

接续上一节&#xff0c;本文主要介绍驱动部分的客制化 1&#xff0c; hardware层 通过系统调用open,read,write对sys/class/sensor/m_acc_misc读写操作 路径&#xff1a;vendor/mediatek/proprietary/hardware/sensor/sensors-1.0/Acceleration.cpp 直接操作/sys/class/sensor…

pytorch基础模块:Tensorboard、Dataset、Transforms、Dataloader

Tensorboard、Dataset、Transforms、Dataloader 该文档主要参考【土堆】的视频教程&#xff1a;pytorch入门教程–土堆 一、Tensorboard 安装tensorboard&#xff1a;pip install tensorboard 使用步骤&#xff1a; 引入相关库&#xff1a;from torch.utils.tensorboard i…

DDL、DML、DQL、DCL具体实例与关系

一、DDL、DCL、DML、DQL 通过二维表的形式&#xff0c;更加清晰直观的学习、对比其关系。 DDL DCL DML DQL 英文释义 Data Defination Language 数据库定义语言 Data Control Language 数据库控制语言 Data Manipulation Language 数据操作语言 Data Query Language 数…

PyMuPDF-Guide

本文翻译整理自&#xff1a; https://pymupdf.readthedocs.io/en/latest/how-to-open-a-file.html 文章目录 一、打开文件1、支持的文件类型2、如何打开文件打开一个错误的文件扩展名 3、打开远程文件从云服务打开文件 4、以文本形式打开文件例子打开一个C#文件打开一个XML文件…

按摩行业的革新者:从挑战到辉煌的转型之路

在时代浪潮的推动下&#xff0c;一个勇于创新的团队于2018年毅然踏入按摩服务市场&#xff0c;创立了一家颠覆传统的按摩店。面对行业内的激烈竞争与瞬息万变的市场环境&#xff0c;他们凭借独树一帜的经营模式和不懈的努力&#xff0c;不仅稳固了市场地位&#xff0c;更在去年…

使用Greenhills生成Lib并使用Lib的两种方法

文章目录 前言GHS工程生成libmake方式生成liblib的使用总结 前言 在软件交付过程&#xff0c;如果不交付源代码&#xff0c;可以将源码编译之后生成lib文件提供给客户。本文介绍GHS中生成lib的两种方法&#xff0c;一种基于GHS工程&#xff0c;一种基于make文件。生成完lib后的…