📚 知识库

07图像识别

作者: aklai 更新时间: 2026-01-13 02:04 浏览次数: 69

图像识别功能使用教程

概述

图像识别功能是脚本自动化的核心技术之一,利用计算机视觉算法识别屏幕上的图像元素,并基于识别结果执行相应的操作,支持模板匹配、多目标检测、ROI区域限制等高级功能。

支持的图像识别特性

  • 模板匹配: 基于预设模板图片识别屏幕元素

  • 多模板检测: 同时检测多个目标模板,满足任一即成功

  • ROI区域限制: 限制识别范围,提高精度和性能

  • 匹配阈值调整: 灵活控制识别的严格程度

  • 点击偏移控制: 精确控制点击位置的偏移

  • 重试机制: 自动重试失败的识别操作

  • 多对象组模式: 复杂的条件分支识别逻辑

核心概念

图像识别 vs 文字识别

| 特性 | 图像识别 | 文字识别 |

|——|——————|—————|

| 识别目标 | 图像、图标、界面元素 | 文字、数字、符号 |

| 技术原理 | 模板匹配算法 | 光学字符识别 |

| 适用场景 | 无文字的图形界面、游戏图标 | 按钮文字、标签、输入框 |

| 精度要求 | 对图像变化敏感 | 对字体变化适应性强 |

| 性能特点 | 速度快,资源消耗低 | 相对较慢,需要更多计算资源 |

| 模板依赖 | 需要预先准备模板图片 | 不需要模板,直接识别文字 |

工作原理

  1. 截图阶段: 获取当前屏幕快照

  2. 模板准备: 加载预设的模板图片

  3. 区域限制: 根据ROI设置限制搜索范围

  4. 匹配计算: 使用l图像识别算法计算相似度

  5. 阈值判断: 根据匹配阈值确定是否找到目标

  6. 位置计算: 确定匹配目标的屏幕坐标

  7. 操作执行: 根据动作类型执行检测或点击

识别模式分类

标准模式

  • 单模板识别: 使用一个模板图片进行识别

  • 多模板识别: 使用多个模板图片,满足任一即成功

  • 统一配置: 所有模板使用相同的匹配参数和后续操作

多对象组模式

  • 分组管理: 将模板分为不同的对象组

  • 顺序检测: 按对象组顺序依次检测

  • 独立配置: 每个对象组有独立的参数和后续操作

  • 优先匹配: 第一个成功的对象组立即执行操作

基础图像识别配置

图像识别->检测 (图像识别->检测)

图像识别检测用于检查屏幕上是否存在指定的图像元素,而不执行点击操作。

1. 基本设置

在动作配置界面选择 图像识别->检测 类型:

  • 系统将显示图像识别配置界面

  • 可选择标准模式或多对象组模式

2. 标准模式配置

动作类型:图像识别->检测 (标准模式)


动作配置:

├── 模板图片:要识别的图像文件

├── 匹配阈值:相似度判断标准 (0.0-1.0)

├── ROI区域:识别区域限制(可选)

├── 重试设置:失败重试配置

└── 说明:动作描述

3. 详细参数说明

| 参数 | 类型 | 说明 | 推荐值 |

|——|——|——|——–|

| 模板图片 | 文件路径 | 要检测的模板图片文件 | PNG格式,清晰截图 |

| 匹配阈值 | 浮点数 | 相似度阈值,越高越严格 | 0.8-0.9 |

| ROI区域 | 百分比坐标 | 限制识别的屏幕区域 | 根据实际情况设定 |

| 重试次数 | 整数 | 检测失败时的重试次数 | 3-5次 |

| 重试间隔 | 时间 | 重试之间的等待时间 | 1-2秒 |

4. 匹配阈值调整指南

匹配阈值决定了识别的严格程度,需要根据实际情况调整:


阈值设置指南:

├── 0.95-1.0:极高精度

│   ├── 适用场景:完全一致的静态界面元素

│   ├── 优点:误识别率极低

│   └── 缺点:轻微变化就可能识别失败

├── 0.85-0.95:高精度(推荐)

│   ├── 适用场景:大多数界面元素和图标

│   ├── 优点:精度高且有一定容错性

│   └── 缺点:需要模板质量较高

├── 0.7-0.85:中等精度

│   ├── 适用场景:变化较大的界面元素

│   ├── 优点:容忍一定的颜色和尺寸变化

│   └── 缺点:可能出现误识别

└── 0.5-0.7:低精度

    ├── 适用场景:形状相似但细节不同的元素

    ├── 优点:最大的容错性

    └── 缺点:误识别率较高

5. ROI区域设置

ROI(Region of Interest)区域用于限制识别范围,提高精度和性能:

坐标格式: 使用百分比坐标 (0-100)


ROI区域设置:

├── 左边界: 0-100 (屏幕宽度的百分比)

├── 上边界: 0-100 (屏幕高度的百分比)

├── 右边界: 0-100 (屏幕宽度的百分比)

└── 下边界: 0-100 (屏幕高度的百分比)

示例:

├── 全屏识别: (0, 0, 100, 100)

├── 上半屏识别: (0, 0, 100, 50)

├── 右下角识别: (50, 50, 100, 100)

└── 中央区域识别: (25, 25, 75, 75)

ROI设置原则:

  • 尽可能缩小识别范围以提高性能

  • 确保目标元素完全在ROI区域内

  • 留有适当的边距应对界面变化

6. 检测配置示例

示例1:检测应用图标


动作类型: 图像识别->检测

模板图片: /storage/emulated/0/templates/wechat_icon.png

匹配阈值: 0.85

ROI区域: (0, 0, 100, 30)  # 只在屏幕上方30%区域查找

重试次数: 3

重试间隔: 1秒

说明: 检测微信应用图标是否存在于状态栏区域

示例2:检测游戏按钮状态


动作类型: 图像识别->检测

模板图片: /storage/emulated/0/templates/start_button_active.png

匹配阈值: 0.90

ROI区域: (20, 70, 80, 100)  # 屏幕下方30%的中央区域

重试次数: 5

重试间隔: 0.5秒

说明: 检测游戏开始按钮是否为可点击状态

示例3:多模板检测


动作类型: 图像识别->检测

模板图片: 

  - /storage/emulated/0/templates/button_confirm.png

  - /storage/emulated/0/templates/button_ok.png

  - /storage/emulated/0/templates/button_submit.png

匹配阈值: 0.8

ROI区域: (25, 60, 75, 90)  # 屏幕中下方区域

说明: 检测确认类按钮(支持多种样式)

图像识别->点击 (图像识别->点击)

图像识别点击功能在检测到目标图像后,自动点击该位置。

1. 基本配置

动作类型:图像识别->点击 (标准模式)


动作配置:

├── 模板图片:要识别的图像文件

├── 匹配阈值:相似度判断标准

├── ROI区域:识别区域限制

├── 点击偏移:相对于匹配中心的偏移

├── 重试设置:失败重试配置

└── 说明:动作描述

2. 点击位置控制

图像识别点击默认点击匹配区域的中心点,可以通过偏移参数调整实际点击位置:

偏移类型:

  1. 随机偏移

    • 在匹配中心周围随机偏移

    • 值为偏移半径(像素)

    • 模拟真实用户的点击行为

  2. 精确偏移

    • 相对于匹配中心的固定偏移

    • X值:正数向右,负数向左

    • Y值:正数向下,负数向上

偏移计算顺序:


最终点击位置 = 匹配中心 + 精确偏移 + 随机偏移

3. 点击偏移示例


点击偏移配置示例:

├── 中心点击:

│   ├── 随机偏移: 0

│   ├── 精确偏移X: 0

│   └── 精确偏移Y: 0

├── 随机偏移点击:

│   ├── 随机偏移: 10  # 在中心±10像素范围内随机点击

│   ├── 精确偏移X: 0

│   └── 精确偏移Y: 0

├── 精确偏移点击:

│   ├── 随机偏移: 0

│   ├── 精确偏移X: 20   # 向右偏移20像素

│   └── 精确偏移Y: -15  # 向上偏移15像素

└── 组合偏移点击:

    ├── 随机偏移: 5     # 先随机偏移±5像素

    ├── 精确偏移X: 30   # 再向右偏移30像素

    └── 精确偏移Y: 10   # 再向下偏移10像素

4. 点击配置示例

示例1:精确点击按钮


动作类型: 图像识别->点击

模板图片: /storage/emulated/0/templates/login_button.png

匹配阈值: 0.88

ROI区域: (20, 60, 80, 90)

随机偏移: 0  # 精确点击,不使用随机偏移

精确偏移X: 0

精确偏移Y: 0

重试次数: 3

说明: 精确点击登录按钮中心

示例2:模拟真实用户点击


动作类型: 图像识别->点击

模板图片: /storage/emulated/0/templates/menu_icon.png

匹配阈值: 0.85

ROI区域: (0, 0, 20, 20)  # 左上角区域

随机偏移: 8  # 在中心±8像素范围内随机点击

精确偏移X: 0

精确偏移Y: 0

重试次数: 5

说明: 模拟真实用户点击菜单图标

示例3:点击图标的特定区域


动作类型: 图像识别->点击

模板图片: /storage/emulated/0/templates/app_icon.png

匹配阈值: 0.9

ROI区域: (10, 10, 90, 90)

随机偏移: 3

精确偏移X: 15   # 向右偏移15像素

精确偏移Y: -20  # 向上偏移20像素

重试次数: 3

说明: 点击应用图标右上角的通知标识

模板图片准备

模板图片质量要求

1. 图片格式和质量

推荐格式: PNG (推荐) > JPG > BMP

  • PNG格式支持透明度,适合不规则形状的元素

  • 避免过度压缩导致的质量损失

分辨率要求:

  • 使用与目标设备相同或相近的分辨率

  • 避免过小的模板图片(建议最小30x30像素)

  • 避免过大的模板图片影响性能

2. 模板截图技巧

最佳实践:


截图技巧:

├── 环境一致性:

│   ├── 在目标设备上直接截图

│   ├── 使用相同的亮度和分辨率设置

│   └── 避免使用其他设备的截图

├── 内容选择:

│   ├── 包含足够的特征信息

│   ├── 避免包含变化频繁的元素(如时间)

│   ├── 选择相对稳定的UI元素

│   └── 去除不必要的背景干扰

├── 尺寸控制:

│   ├── 包含完整的目标元素

│   ├── 适当的边距(2-5像素)

│   └── 避免过大的冗余区域

└── 多样本准备:

    ├── 准备不同状态的模板(如按钮的不同状态)

    ├── 考虑界面的变化情况

    └── 测试不同时间和环境下的效果

3. 常见模板问题

问题1:模板过于具体


问题描述: 模板包含了过多的变化元素

错误示例: 包含具体数字、时间、用户名的截图

解决方案: 只截取稳定的UI框架部分

问题2:模板过于模糊


问题描述: 模板特征不够明显

错误示例: 大片空白区域、相似度过高的元素

解决方案: 选择有明显特征的区域

问题3:模板尺寸不当


问题描述: 模板过大或过小

错误示例: 整屏截图作为模板、1x1像素的模板

解决方案: 选择合适的元素范围

重试机制详解

重试机制的必要性

图像识别可能因为以下原因失败:

  • 网络延迟导致界面未完全加载

  • 动画效果影响元素显示

  • 临时的系统覆盖(如通知)

  • 偶发的截图质量问题

重试配置参数

1. 基本重试设置


重试配置:

├── 启用重试: 激活

├── 重试次数: 默认: 3, 推荐: 3-5

└── 失败处理: 最终失败后的处理方式

2. 重试策略

渐进式重试:


第1次: 立即尝试

第2次: 等待1秒后重试

第3次: 等待2秒后重试

第4次: 等待3秒后重试

...

重试日志示例:


[脚本名] 动作#5 图像识别检测失败 - 未找到匹配模板

[脚本名] 开始第2次重试 (共4次)

[脚本名] 动作#5 图像识别检测失败 - 未找到匹配模板

[脚本名] 开始第3次重试 (共4次)

[脚本名] 动作#5 图像识别检测成功 - 找到匹配模板

3. 重试次数建议

不同场景的重试次数建议:


场景分类:

├── 静态界面元素: 2-3次

│   ├── 应用图标、固定按钮

│   └── 重试原因:主要是截图质量问题

├── 动态加载元素: 5-8次

│   ├── 网络加载的内容、动画效果

│   └── 重试原因:等待加载完成

├── 游戏界面元素: 3-5次

│   ├── 游戏内的按钮、状态显示

│   └── 重试原因:游戏动画和状态切换

└── 系统界面元素: 2-4次

    ├── 系统设置、通知栏

    └── 重试原因:系统响应延迟

性能优化

识别性能因素

1. 影响性能的因素


性能影响因素:

├── 模板数量: 越多越慢

├── 模板尺寸: 越大越慢

├── ROI区域: 越大越慢

├── 匹配阈值: 对性能影响较小

├── 重试次数: 失败时影响总耗时

└── 设备性能: CPU、内存影响计算速度

2. 性能优化策略

ROI区域优化:


优化技巧:

├── 精确定位目标区域:

│   ├── 根据界面布局设置合理的ROI

│   ├── 避免全屏搜索,优先使用局部区域

│   └── 为不同的元素设置专门的ROI区域

├── 分层检测策略:

│   ├── 先用大区域快速定位大致位置

│   └── 再用小区域精确定位具体元素

└── 动态ROI调整:

    ├── 根据之前的成功位置动态调整ROI

    └── 学习用户界面的变化模式

模板优化:


模板优化方法:

├── 减少模板数量:

│   ├── 合并相似的模板

│   ├── 选择最具代表性的模板

│   └── 移除冗余的备选模板

├── 优化模板尺寸:

│   ├── 裁剪到最小有效区域

│   ├── 保留关键特征

│   └── 去除无关背景

└── 模板质量提升:

    ├── 使用高质量的截图

    ├── 确保模板清晰度

    └── 避免压缩损失

性能监控

1. 性能指标

关键性能指标:


性能指标:

├── 单次识别耗时: 通常应在1-3秒内

├── 成功率: 应达到90%以上

├── 重试率: 应控制在30%以下

└── 资源占用: CPU和内存使用率

性能日志示例:


[脚本名] 图像识别性能 - 耗时: 1.2秒, 模板数: 3, ROI: 25%

[脚本名] 图像识别成功率 - 本次成功, 近10次成功率: 85%

2. 性能调优建议

针对不同性能问题的解决方案:


常见性能问题及解决方案:

├── 识别速度慢:

│   ├── 减小ROI区域范围

│   ├── 减少模板数量

│   ├── 优化模板尺寸

│   └── 提高匹配阈值(减少计算量)

├── 成功率低:

│   ├── 降低匹配阈值

│   ├── 增加重试次数

│   ├── 优化模板质量

│   └── 检查ROI区域设置

├── 重试率高:

│   ├── 检查界面加载时间

│   ├── 增加前置等待时间

│   ├── 优化模板选择

│   └── 调整匹配参数

└── 资源占用高:

    ├── 控制并发识别任务

    ├── 及时释放不用的资源

    ├── 优化循环中的识别频率

    └── 使用更小的ROI区域

错误处理和调试

常见识别问题

1. 识别失败问题

问题分类和解决方案:


识别失败原因分析:

├── 模板问题:

│   ├── 问题:模板与实际界面不匹配

│   ├── 现象:重复失败,日志显示"未找到匹配模板"

│   ├── 解决:重新截取模板,确保模板质量

│   └── 预防:定期更新模板,准备多个版本

├── 阈值问题:

│   ├── 问题:匹配阈值设置不当

│   ├── 现象:偶发性失败,相似度略低于阈值

│   ├── 解决:适当降低匹配阈值

│   └── 预防:测试不同阈值下的效果

├── ROI问题:

│   ├── 问题:目标元素在ROI区域之外

│   ├── 现象:明明看到元素但识别失败

│   ├── 解决:扩大ROI区域或调整位置

│   └── 预防:留有适当的边距

├── 时机问题:

│   ├── 问题:界面未完全加载就开始识别

│   ├── 现象:第一次失败,重试后成功

│   ├── 解决:增加前置等待时间

│   └── 预防:在识别前添加适当的等待动作

└── 环境问题:

    ├── 问题:界面被其他元素遮挡

    ├── 现象:间歇性失败,不同时间结果不同

    ├── 解决:检查通知、弹窗等遮挡元素

    └── 预防:在识别前清理可能的遮挡

2. 误识别问题

误识别的原因和处理:


误识别问题分析:

├── 相似元素干扰:

│   ├── 问题:识别到了相似但不同的元素

│   ├── 解决:提高匹配阈值,优化模板

│   └── 预防:使用更具特异性的模板

├── ROI区域过大:

│   ├── 问题:搜索范围包含了相似元素

│   ├── 解决:缩小ROI区域

│   └── 预防:精确定位目标元素位置

├── 阈值过低:

│   ├── 问题:匹配标准过于宽松

│   ├── 解决:适当提高匹配阈值

│   └── 预防:平衡识别率和准确率

└── 模板质量问题:

    ├── 问题:模板包含了过多通用特征

    ├── 解决:重新制作更精确的模板

    └── 预防:选择有明显特征的区域

调试技巧

1. 日志分析

关键日志信息:


调试日志解读:

├── 模板加载信息:

│   ├── "模板1: icon.png -> /path/to/icon.png"

│   └── 确认模板路径和文件是否正确

├── 匹配过程信息:

│   ├── "图像识别匹配完成 - 耗时: 1200ms, 找到匹配: 1个"

│   └── 检查耗时和匹配结果数量

├── 相似度信息:

│   ├── "匹配成功: confidence=0.87, threshold=0.8"

│   └── 对比相似度和阈值设置

├── 坐标信息:

│   ├── "找到匹配位置 (520, 300)"

│   └── 确认识别位置是否正确

└── 偏移计算信息:

    ├── "最终点击坐标 - (530, 295)"

    └── 验证偏移计算是否正确

2. 截图验证

截图调试方法:


截图验证步骤:

├── 获取实时截图:

│   ├── 在识别失败时手动截图

│   ├── 对比实际界面和预期模板

│   └── 检查界面变化和差异

├── 模板对比:

│   ├── 将模板图片和实际截图并排对比

│   ├── 查找明显的差异点

│   └── 确认模板是否需要更新

├── ROI区域验证:

│   ├── 在截图上标记ROI区域

│   ├── 确认目标元素是否完全在ROI内

│   └── 检查ROI边界是否合理

└── 环境干扰检查:

    ├── 查看是否有通知、弹窗等遮挡

    ├── 检查亮度、对比度等变化

    └── 确认界面状态是否符合预期

3. 测试验证

系统化测试方法:


测试验证流程:

├── 单独测试:

│   ├── 单独测试每个模板的识别效果

│   ├── 记录成功率和失败原因

│   └── 优化参数和模板

├── 组合测试:

│   ├── 测试多模板的优先级和冲突

│   ├── 验证ROI区域的合理性

│   └── 检查重试机制的效果

├── 环境测试:

│   ├── 在不同时间和界面状态下测试

│   ├── 模拟各种干扰情况

│   └── 验证稳定性和可靠性

└── 性能测试:

    ├── 测试识别速度和资源占用

    ├── 找出性能瓶颈

    └── 优化配置参数

高级应用案例

案例1:游戏自动化 - 战斗状态识别

业务需求: 在游戏中自动识别战斗状态并执行相应操作


# 战斗状态检测

动作1: 图像识别->检测

  模板图片: 

    - /storage/emulated/0/game/battle_ui.png

    - /storage/emulated/0/game/hp_bar.png

    - /storage/emulated/0/game/skill_icons.png

  匹配阈值: 0.85

  ROI区域: (0, 0, 100, 30)  # 上方UI区域

  重试次数: 3

  成功后操作: 跳转到分组 "战斗操作"

  失败后操作: 跳转到分组 "等待战斗"

  说明: 检测是否进入战斗状态

# 战斗操作分组

动作2: [分组: 战斗操作] 图像识别->点击

  模板图片: 

    - /storage/emulated/0/game/skill1.png

    - /storage/emulated/0/game/skill2.png

    - /storage/emulated/0/game/skill3.png

  匹配阈值: 0.9

  ROI区域: (10, 60, 90, 100)  # 下方技能栏

  随机偏移: 5

  重试次数: 2

  说明: 释放可用技能

动作3: 等待

  等待时间: 2秒

  说明: 技能冷却等待

动作4: 图像识别->检测

  模板图片: /storage/emulated/0/game/battle_end.png

  匹配阈值: 0.8

  ROI区域: (25, 25, 75, 75)  # 中央区域

  重试次数: 1

  成功后操作: 跳转到分组 "战斗结束处理"

  失败后操作: 跳转到动作 2  # 继续战斗循环

# 等待战斗分组

动作5: [分组: 等待战斗] 图像识别->点击

  模板图片: /storage/emulated/0/game/start_battle.png

  匹配阈值: 0.88

  ROI区域: (30, 70, 70, 90)  # 下方按钮区域

  随机偏移: 8

  重试次数: 5

  成功后操作: 跳转到动作 1

  说明: 点击开始战斗按钮

特点分析:

  • 使用多模板检测战斗状态的多个特征

  • 通过ROI区域分别检测不同区域的元素

  • 设置合理的重试次数平衡速度和可靠性

  • 使用随机偏移模拟真实玩家操作

案例2:应用自动化 - 界面导航

业务需求: 自动导航到应用的特定功能页面


# 主页面识别

动作1: 图像识别->检测

  模板图片: /storage/emulated/0/app/main_logo.png

  匹配阈值: 0.9

  ROI区域: (20, 10, 80, 40)  # 顶部Logo区域

  重试次数: 3

  成功后操作: 继续下一动作

  失败后操作: 跳转到分组 "启动应用"

  说明: 确认当前在应用主页

# 导航到设置页面

动作2: 图像识别->点击

  模板图片: 

    - /storage/emulated/0/app/menu_button.png

    - /storage/emulated/0/app/hamburger_menu.png

  匹配阈值: 0.85

  ROI区域: (0, 0, 30, 30)   # 左上角菜单区域

  精确偏移X: 0

  精确偏移Y: 0

  随机偏移: 3

  重试次数: 4

  说明: 点击菜单按钮

动作3: 等待

  等待时间: 1秒

  说明: 等待菜单展开动画

动作4: 图像识别->点击

  模板图片: /storage/emulated/0/app/settings_item.png

  匹配阈值: 0.88

  ROI区域: (0, 30, 100, 100)  # 菜单展开区域

  精确偏移X: 20   # 点击文字区域而非图标

  精确偏移Y: 0

  随机偏移: 5

  重试次数: 3

  成功后操作: 跳转到分组 "设置页面操作"

  失败后操作: 跳转到动作 1  # 重新开始导航

  说明: 点击设置菜单项

# 设置页面操作

动作5: [分组: 设置页面操作] 图像识别->检测

  模板图片: /storage/emulated/0/app/settings_title.png

  匹配阈值: 0.9

  ROI区域: (20, 10, 80, 30)

  重试次数: 2

  成功后操作: 继续设置操作

  失败后操作: 跳转到动作 1  # 导航失败,重新开始

  说明: 确认已进入设置页面

特点分析:

  • 分步验证导航过程的每个阶段

  • 使用精确偏移优化点击位置

  • 设置了完整的错误恢复机制

  • 考虑了界面动画的等待时间

案例3:数据采集 - 页面内容识别

业务需求: 自动识别页面中的特定数据元素并采集


# 页面加载检测

动作1: 图像识别->检测

  模板图片: /storage/emulated/0/data/page_loaded.png

  匹配阈值: 0.85

  ROI区域: (0, 0, 100, 20)  # 顶部加载指示器

  重试次数: 10  # 等待页面加载,重试次数较多

  成功后操作: 继续数据采集

  失败后操作: 跳转到分组 "页面加载超时处理"

  说明: 等待页面完全加载

# 数据项识别和处理

动作2: 图像识别->检测

  模板图片: 

    - /storage/emulated/0/data/data_row.png

    - /storage/emulated/0/data/data_item.png

  匹配阈值: 0.8

  ROI区域: (10, 30, 90, 90)  # 主要内容区域

  重试次数: 3

  成功后操作: 跳转到分组 "数据处理"

  失败后操作: 跳转到分组 "页面滚动"

  说明: 检测页面中的数据项

# 数据处理分组

动作3: [分组: 数据处理] 图像识别->点击

  模板图片: /storage/emulated/0/data/data_detail_button.png

  匹配阈值: 0.9

  ROI区域: (70, 30, 95, 90)  # 右侧详情按钮区域

  精确偏移X: 0

  精确偏移Y: 0

  随机偏移: 2

  重试次数: 2

  说明: 点击查看详情

动作4: 等待

  等待时间: 2秒

  说明: 等待详情页面加载

动作5: 图像识别->点击

  模板图片: /storage/emulated/0/data/back_button.png

  匹配阈值: 0.85

  ROI区域: (0, 0, 30, 30)  # 左上角返回按钮

  随机偏移: 3

  重试次数: 3

  说明: 返回列表页面

动作6: 等待

  等待时间: 1秒

  说明: 等待页面切换

# 页面滚动分组

动作7: [分组: 页面滚动] 滑动

  滑动方向: 向上

  滑动距离: 中等

  随机偏移: 启用

  说明: 滚动查看更多数据

动作8: 等待

  等待时间: 1秒

  说明: 等待滚动完成

动作9: 跳转到动作 2  # 继续检测数据项

特点分析:

  • 针对网络加载设置了较多的重试次数

  • 使用截图功能保存采集到的数据

  • 实现了完整的数据采集循环流程

  • 包含了页面滚动的处理逻辑

与多对象组功能的结合

多对象组模式概述

多对象组功能为图像识别提供了更高级的控制逻辑,允许为同一个动作配置多个独立的检测组。由于多对象组功能较为复杂,已单独编写了详细教程。

基本区别

| 特性 | 标准模式 | 多对象组模式 |

|——|———-|————-|

| 检测逻辑 | 检测多个模板,找到任意一个即成功 | 依次检测每个对象组,找到第一个匹配的对象组即成功 |

| 配置方式 | 统一的参数配置 | 每个对象组独立的参数配置 |

| 后续操作 | 统一的成功/失败处理 | 每个对象组独立的成功/失败处理 |

| 适用场景 | 简单的多目标检测 | 复杂的条件分支逻辑 |

选择建议

使用标准模式的情况:

  • 多个模板代表同一个目标的不同状态

  • 需要相同的后续处理逻辑

  • 配置相对简单的场景

使用多对象组模式的情况:

  • 不同的检测目标需要不同的处理逻辑

  • 需要按优先级顺序检测多个可能的状态

  • 实现复杂的条件分支控制

最佳实践

1. 模板管理最佳实践

文件组织:


模板文件组织建议:

├── 按应用分类:

│   ├── /templates/wechat/

│   ├── /templates/game_name/

│   └── /templates/system/

├── 按功能分类:

│   ├── /templates/buttons/

│   ├── /templates/icons/

│   └── /templates/status/

├── 版本管理:

│   ├── icon_v1.png(旧版本)

│   ├── icon_v2.png(当前版本)

│   └── icon_new.png(测试版本)

└── 命名规范:

    ├── 使用有意义的文件名

    ├── 包含版本信息

    └── 避免中文和特殊字符

模板质量控制:


质量控制检查清单:

├── 截图质量:

│   ├── ✓ 分辨率适当(不过大不过小)

│   ├── ✓ 图像清晰(无模糊、噪点)

│   ├── ✓ 颜色准确(无色彩偏差)

│   └── ✓ 格式合适(推荐PNG)

├── 内容选择:

│   ├── ✓ 特征明显(易于区分)

│   ├── ✓ 稳定性好(不易变化)

│   ├── ✓ 范围适中(包含关键特征)

│   └── ✓ 背景干净(减少干扰)

├── 兼容性测试:

│   ├── ✓ 不同时间下的效果

│   ├── ✓ 不同界面状态的效果

│   ├── ✓ 不同设备的兼容性

│   └── ✓ 系统更新后的兼容性

└── 性能评估:

    ├── ✓ 识别速度满足要求

    ├── ✓ 成功率达到标准

    ├── ✓ 误识别率在可接受范围

    └── ✓ 资源占用合理

2. 参数配置最佳实践

匹配阈值设置:


阈值设置策略:

├── 保守策略(高阈值 0.9-0.95):

│   ├── 适用:关键操作、误操作成本高的场景

│   ├── 优点:精确度高,误操作少

│   └── 缺点:可能因小变化而失败

├── 平衡策略(中等阈值 0.8-0.9):

│   ├── 适用:大多数日常自动化场景

│   ├── 优点:精确度和成功率的良好平衡

│   └── 缺点:需要良好的模板质量

├── 激进策略(低阈值 0.6-0.8):

│   ├── 适用:容错性要求高的场景

│   ├── 优点:成功率高,适应性强

│   └── 缺点:可能出现误识别

└── 动态调整策略:

    ├── 初始使用中等阈值

    ├── 根据成功率动态调整

    ├── 为关键操作设置更高阈值

    └── 为容错操作设置更低阈值

ROI区域设置:


ROI设置技巧:

├── 精确定位原则:

│   ├── 根据界面布局精确计算位置

│   ├── 为不同元素类型设置专门区域

│   └── 避免不必要的大范围搜索

├── 容错性考虑:

│   ├── 留有适当边距应对位置变化

│   ├── 考虑不同设备的界面差异

│   └── 预留界面更新的变化空间

├── 性能优化:

│   ├── 优先使用小区域减少计算量

│   ├── 避免重叠的ROI区域

│   └── 合理分配不同优先级的区域

└── 测试验证:

    ├── 验证ROI区域包含完整目标

    ├── 测试边界情况的效果

    ├── 确认性能提升效果

    └── 检查是否影响识别准确率

3. 错误处理最佳实践

分层错误处理:


错误处理层次:

├── 动作级错误处理:

│   ├── 重试机制处理临时失败

│   ├── 参数自动调整

│   └── 降级策略(降低阈值等)

├── 流程级错误处理:

│   ├── 跳转到错误恢复流程

│   ├── 重置界面状态

│   └── 重新开始关键步骤

├── 脚本级错误处理:

│   ├── 全局错误捕获和处理

│   ├── 状态清理和资源释放

│   └── 安全退出机制

└── 系统级错误处理:

    ├── 系统状态检查

    ├── 权限和环境验证

    ├── 设备兼容性处理

    └── 紧急停止机制

错误恢复策略:


恢复策略设计:

├── 自动重试策略:

│   ├── 指数退避重试间隔

│   ├── 最大重试次数限制

│   ├── 成功率阈值触发策略调整

│   └── 失败模式识别和处理

├── 参数调整策略:

│   ├── 动态降低匹配阈值

│   ├── 扩大ROI搜索范围

│   ├── 增加重试次数

│   └── 切换备用模板

├── 流程回退策略:

│   ├── 回退到已知稳定状态

│   ├── 重新执行关键初始化步骤

│   ├── 清理可能的界面干扰

│   └── 验证环境条件

└── 人工介入策略:

    ├── 明确的错误报告和定位

    ├── 用户友好的错误提示

    ├── 安全的暂停和恢复机制

    └── 详细的调试信息输出

故障排除指南

快速诊断检查清单


图像识别问题快速诊断:

├── 基础检查:

│   ├── □ 模板文件是否存在且可读

│   ├── □ 模板图片格式是否正确

│   ├── □ ROI区域设置是否合理

│   └── □ 匹配阈值是否在合理范围

├── 环境检查:

│   ├── □ 目标界面是否已完全加载

│   ├── □ 是否有弹窗或通知遮挡

│   ├── □ 设备方向和分辨率是否匹配

│   └── □ 系统权限是否已正确授予

├── 配置检查:

│   ├── □ 重试次数设置是否充足

│   ├── □ 点击偏移配置是否正确

│   ├── □ 成功/失败后操作是否合理

│   └── □ 日志级别是否足够详细

└── 性能检查:

    ├── □ 识别耗时是否在可接受范围

    ├── □ 设备资源是否充足

    ├── □ 并发任务是否过多

    └── □ 模板文件大小是否合理

常见问题解决方案


问题解决手册:

├── "未找到匹配模板":

│   ├── 原因:模板过时、界面变化、阈值过高

│   ├── 解决:更新模板、降低阈值、扩大ROI

│   └── 预防:定期更新模板、准备多版本模板

├── "识别速度过慢":

│   ├── 原因:ROI过大、模板过多、设备性能不足

│   ├── 解决:优化ROI、减少模板、降低精度要求

│   └── 预防:合理设计识别策略、定期性能测试

├── "误识别其他元素":

│   ├── 原因:阈值过低、模板特征不明显、ROI过大

│   ├── 解决:提高阈值、优化模板、缩小ROI

│   └── 预防:充分测试、选择独特特征模板

├── "点击位置不准确":

│   ├── 原因:偏移设置错误、模板中心偏移、坐标计算问题

│   ├── 解决:调整偏移参数、重新制作模板、验证坐标

│   └── 预防:精确测量偏移、使用小范围随机偏移

└── "间歇性识别失败":

    ├── 原因:界面动画、网络延迟、系统资源不足

    ├── 解决:增加等待时间、提高重试次数、优化资源使用

    └── 预防:充分测试各种环境、设置合理的容错机制

总结

图像识别功能是实现高级自动化的重要工具,通过合理的配置和使用,可以实现准确、稳定、高效的界面元素识别和操作。

关键要点

  1. 理解识别原理: 掌握模板匹配的基本原理和影响因素

  2. 优化模板质量: 制作高质量的模板图片是成功的基础

  3. 合理设置参数: 平衡识别精度、成功率和性能

  4. 善用ROI区域: 通过区域限制提高精度和性能

  5. 完善错误处理: 建立多层次的错误处理和恢复机制

  6. 持续优化改进: 根据实际使用情况不断优化配置

最佳实践总结

  • 从简单的单模板识别开始,逐步增加复杂度

  • 重视模板的质量和维护,定期更新过时的模板

  • 合理使用重试机制,平衡成功率和执行速度

  • 充分利用日志系统进行问题诊断和性能优化

  • 针对复杂场景考虑使用多对象组模式

  • 建立完善的测试验证流程确保稳定性

正确使用图像识别功能可以让您的自动化脚本更加智能和可靠,特别是在处理图形界面和游戏自动化方面具有独特的优势!