Airtest图像识别原理

AirtestIDE是一款跨平台UI自动化测试工具,支持基于图像识别的Airtest和UI控件搜索的Poco框架。本文深入探讨Airtest的图像识别原理,主要涉及OpenCV的模板匹配和特征匹配方法,用于无法通过UI控件定位的游戏和应用自动化测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AirtestIDE 是一个跨平台的UI自动化测试编辑器,适用于游戏和App。

  • 自动化脚本录制、一键回放、报告查看,轻而易举实现自动化测试流程

  • 支持基于图像识别的Airtest框架,适用于所有Android和Windows游戏

  • 支持基于UI控件搜索的Poco框架,适用于Unity3d,Cocos2d与Android App

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

本文重点是针对Airtest中的图像识别进行代码走读,加深对图像识别原理的理解

1、准备工作,下载好源码 https://github.com/AirtestProject/Airtest

2、我们从最简单的touch方法入手,即为点击某个传入的图片,源码在api.py里面

@logwrap
def touch(v, times=1, **kwargs):
    """
    Perform the touch action on the device screen

    :param v: target to touch, either a Template instance or absolute coordinates (x, y)
    :param times: how many touches to be performed
    :param kwargs: platform specific `kwargs`, please refer to corresponding docs
    :return: finial position to be clicked
    :platforms: Android, Windows, iOS
    """
    if isinstance(v, Template):
        pos = loop_find(v, timeout=ST.FIND_TIMEOUT)
    else:
        try_log_screen()
        pos = v
    for _ in range(times):
        G.DEVICE.touch(pos, **kwargs)
        time.sleep(0.05)
    delay_after_operation()
    return pos

click = touch  # click is alias of touch

 这个函数执行点击操作的是 G.DEVICE.touch(pos, **kwargs)

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

@logwrap
def loop_find(query, timeout=ST.FIND_TIMEOUT, threshold=None, interval=0.5, intervalfunc=None):
    """
    Search for image template in the screen until timeout

    Args:
        query: image template to be found in screenshot
        timeout: time interval how long to look for the image template
        threshold: default is None
        interval: sleep interval before next attempt to find the image template
        intervalfunc: function that is executed after unsuccessful attempt to find th
### 关于自动化测试中的图像识别技术 #### 图像识别与OCR技术概述 在自动化测试领域,图像识别技术和OCR(Optical Character Recognition)被广泛应用于提升测试效率和准确性。图像识别涉及通过分析图像中的特征来检测并分类对象或场景[^1]。而OCR则专注于将图像中的文字转换为结构化的文本数据,从而便于计算机进一步处理。 #### 基于图像识别的自动化测试工具 以下是几种常见的基于图像识别的自动化测试工具及其特点: 1. **Airtest** Airtest是一款强大的自动化测试框架,支持跨平台的应用程序测试。相比传统的Sikuli框架,Airtest不仅具备更现代的设计风格,还扩展了更多功能特性。其核心能力在于利用图像识别技术定位UI元素,并执行相应的操作,适用于Windows应用程序的自动化测试[^2]。 2. **SikuliX** SikuliX是一个开源GUI自动化测试工具,继承自早期版本的Sikuli。该工具的核心机制是对屏幕进行实时截图并与预设的目标图片进行对比,以此判断交互条件是否满足。这种无须精确坐标的交互方式极大地简化了复杂界面下的测试流程[^3]。 3. **OpenCV** OpenCV作为一款流行的计算机视觉库,在图像处理方面具有卓越表现。对于自动化测试而言,可以通过编写定制化脚本来实现复杂的图像匹配逻辑。例如,“GraphicalLocator”类提供了一种基于形状和颜色直方图的方法寻找目标区域,并返回最佳匹配位置[^4]。 #### 实现过程详解 无论是哪种工具,其实现原理均围绕以下几个关键环节展开: - **初始化配置**:加载待匹配模板图片以及设定必要的参数如阈值等; - **捕获当前画面**:获取设备屏幕上显示的实际内容用于后续比对; - **执行匹配算法**:采用特定策略比如像素级差异计算或者特征提取等方式找出最接近的部分; - **反馈结果坐标**:最终输出所找到元素的具体位置以便驱动下一步动作。 下面展示了一个简单示例代码片段说明如何借助Python绑定调用OpenCV完成基本的任务需求: ```python import cv2 def locate_image(template_path, screen_shot): template = cv2.imread(template_path) result = cv2.matchTemplate(screen_shot, template, cv2.TM_CCOEFF_NORMED) min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) if max_val >= 0.8: return (max_loc[0], max_loc[1]) else: raise Exception("Image not found") screen_capture = cv2.imread('current_screen.png') position = locate_image('button_template.jpg', screen_capture) print(f"The button is located at {position}") ``` 此段代码展示了怎样读取两张图片——一个是代表我们要找的对象的小图标(`template`);另一个是从屏幕上截下来的整幅画作(`screen_shot`),接着运用`cv2.matchTemplate()`函数去搜寻两者之间可能存在的关联之处。当发现某个地方非常吻合时就记录下来那个点的位置信息。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值