Skill脚本中CV参数详解:从新手入门到避坑指南

4次阅读
没有评论

共计 1476 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

在自动化测试脚本开发中,CV(Computer Vision,计算机视觉)是一个常见但容易被新手误解的参数。今天我们就来彻底搞懂它,并分享一些实用的代码和避坑经验。

Skill 脚本中 CV 参数详解:从新手入门到避坑指南

一、CV 在技能脚本中的含义和价值

CV 在这里特指计算机视觉技术,它的核心价值在于让测试脚本具备 ” 看 ” 的能力。相比传统的坐标定位或 DOM 元素查找,CV 可以:

  • 处理游戏、客户端等非 Web 场景
  • 识别验证码、图表等非文本内容
  • 适应动态变化的 UI 界面

二、三种实现方案对比

  1. 原生 OpenCV
  2. 优点:处理速度快(测试环境:i7-10750H,单次匹配约 15ms),灵活性强
  3. 缺点:需要自己处理图像预处理和匹配逻辑

  4. PyAutoGUI

  5. 优点:API 简单(如 locateOnScreen()
  6. 缺点:仅支持全屏匹配,速度较慢(约 200ms/ 次)

  7. SikuliX

  8. 优点:内置 IDE,可视化操作方便
  9. 缺点:Java 依赖较重,不适合高频调用

生产环境推荐:对性能要求高的场景选 OpenCV,快速原型开发可用 PyAutoGUI

三、OpenCV 实战示例

下面是一个完整的按钮识别点击实现(Python 3.8+):

import cv2
import numpy as np

def click_button(screen_shot, template_path, threshold=0.8):
    """
    :param screen_shot: 当前屏幕截图 (numpy 数组)
    :param template_path: 按钮模板路径
    :param threshold: 匹配阈值,一般 0.8-0.9 平衡准确率和容错
    """
    # 1. 图像预处理
    template = cv2.imread(template_path, 0)  # 灰度读取模板
    gray = cv2.cvtColor(screen_shot, cv2.COLOR_BGR2GRAY)

    # 2. 模板匹配
    res = cv2.matchTemplate(gray, template, cv2.TM_CCOEFF_NORMED)
    loc = np.where(res >= threshold)

    # 3. 获取最佳匹配位置
    if len(loc[0]) > 0:
        pt = max(zip(*loc[::-1]), key=lambda p: res[p[1]][p[0]])
        return pt  # 返回坐标 (x,y)
    return None

关键参数说明:
threshold=0.8:经测试,低于 0.7 误匹配率显著上升
TM_CCOEFF_NORMED:效果最好的匹配算法,但对旋转敏感

四、生产环境避坑指南

  1. 多分辨率适配
  2. 保存不同分辨率下的模板图片
  3. 动态计算缩放比例:

    scale = current_width / base_width  # 基准分辨率 1920x1080
    template = cv2.resize(template, None, fx=scale, fy=scale)

  4. 动态元素处理

  5. 对可变文本区域做遮罩处理
  6. 使用 ROI(Region of Interest)缩小匹配范围

  7. 异常重试机制

    for _ in range(3):  # 最多重试 3 次
        pos = click_button(screen_shot, 'button.png')
        if pos: 
            click(pos)
            break
        time.sleep(1)

五、进阶思考

在以下复杂场景可以考虑深度学习:
– 按钮样式随机变化(如游戏技能图标)
– 需要识别文字内容(OCR)
– 3D 物体识别(如 AR 应用)

一个简单的改进方向:用 YOLO 等目标检测算法替代模板匹配,虽然会牺牲一些性能(约 50ms/ 次),但识别率能提升 30% 以上。

希望这篇笔记能帮你避开 CV 自动化测试的常见陷阱。如果有特别难搞的识别场景,欢迎留言讨论具体案例。

正文完
 0
评论(没有评论)