构建更可靠的安卓图像识别自动点击 Flow:确认当前状态、点击识别目标、等待界面变化,再验证下一状态。

图像识别自动点击应先证明当前界面状态
固定坐标的自动单击器假设每次相同的控制都仍然在同一点下。当出现对话框、动画仍在运行、显示比例发生变化、列表移动或应用程序在不同的页面上打开时,这一假设就会破产。单击仍然可能成功完成,但会指向错误的控制。
图像识别通过在行动前观察可见的屏幕来改善这一点。然而,仅凭检测是不够的。一个可靠的安卓自动点击流程必须区分四个问题:预期目标是否可见?匹配是否足够强烈,并且在预期区域内?轻点是否触及检测到的目标?屏幕是否进入下一个预期状态?
本指南使用状态检查模式来实现on-device Android自动化与莱彩投屏 Flow Inside。从计算机准备和部署一个兼容的配置文件及其视觉资产,然后莱彩 Android Agent可以在手机上本地执行已批准的流程。目标不是更快的盲目点击。这是一个当屏幕不再符合假设时停止的序列。
五步状态检查的轻点模式
- 定义初始状态并捕捉一个稳定的视觉目标,例如一个独特的按钮或图标。
- 使用故意的置信阈值和搜索区域,对当前帧进行一次图像匹配。
- 只有在成功匹配时,才能将检测到的矩形或中心传递给轻点动作。
- 等待界面过渡,而不是立即检查相同的帧。
- 观察预期下一步状态。成功时继续;否则停止,在明确的限制范围内重试,或要求审查。
将每个轻点视为状态转换,而不是孤立的动作。第一个观察是先决条件。轻点是操作。第二个观察是后条件。如果缺少任何部分,自动化无法区分成功与落在错误屏幕上的动作或没有效果的动作。
这种模式也更容易进行调试。在轻点之前出现故障时,指的是模板、阈值、搜索区域或开始屏幕。在轻点之后出现故障时,指的是时间、权限、被阻止的手势、意外的对话框或不同的下一个状态。一个只报告“失败”的宏隐藏了这种区别。
选择正确的屏幕信号
| 信号 | 在以下情况下使用它 | 主要风险 |
|---|---|---|
| 图像匹配 | 按钮、图标、卡片或对话框具有稳定的视觉外观 | 主题、规模、动画或重新设计可以降低分数 |
| UI选择器 | 该应用程序暴露了稳定的文本、内容描述或资源标识符 | 自定义绘制的或画布内容可能不会显示有用的元素 |
| 光学字符识别 | 可见的文字比确切的像素更重要 | 语言、字体、对比度和区域选择会影响识别效果 |
| 物体检测 | 目标属于一个更广泛的类别,而不是一个确切的模板 | 需要兼容的型号和有效的类别 |
| 固定坐标 | 布局是受控的,没有更好的状态信号存在 | 任何动作都可以重新定向轻点 |
使用最简单的信号来准确描述状态。保存的图像模板非常适合每个运行都看起来相同的独特图标。当单词稳定但其样式可能发生变化时,OCR通常更好。当应用程序暴露可访问的结构时,UI选择器可能比像素更强大。对象检测对已识别的类有用,而不是作为缺失按钮模板的替代品。
相关的Android OCR和图像识别自动化指南更深入地比较了这些观察方法。本文专注于设备上的决策边界:一个动作在使用其结果之前必须成功进行观察。
在莱彩投屏 Flow Inside中构建模式
1.准备一个稳定的模板和初始状态
选择具有清晰边缘和足够的独特细节的目标,以便将其与附近的控制器区分开来。避免捕捉包含正在变化的计数器、时间戳、用户名或动画的大区域。第一个配置文件和引用图像资产是在计算机上准备的。在部署期间,兼容模板将捆绑到莱彩 Android Agent。
2. 匹配当前帧一次
`vision.match`节点观察当前帧一次。它需要一个或多个已保存的模板ID、一个所需的最低分数、一个匹配模式和一个感兴趣的屏幕比例区域。成功匹配提供最佳分数和检测到的中心和矩形。没有匹配会遵循失败结果;节点不是隐藏的等待循环。
3. 轻点检测到的结果,而不是旧坐标
将成功的匹配连接到`pointer.tap`,并使用检测到的矩形作为`positionFrom`,通常带有中心锚点。这将使操作与授权它的事观保持联系。不要从一次运行中复制坐标,并将下一次运行重新转换为固定坐标宏。
4. 添加可见的等待时间
轻点后,在下一个屏幕依赖的观察之前,在`flow.wait`中添加明确的内容。正确的持续时间取决于应用程序、设备、网络和动画。可视的等待可以进行审查和调整;立即重新检查可以简单地观察旧帧。
5. 验证下一个状态或停止
使用第二个图像、OCR结果或UI状态来证明界面已按预期更改。例如,在点击“删除”后检测到“确认”对话框仅证明确认阶段出现了;它不能证明该项目已被删除。后续检查应确认最终列表状态或成功消息。将未处理的观察失败留作真实失败,或在重复检查是要求的一部分时实施有限重试。
调整信心、搜索范围、时间和模板
- 从测量阈值开始,然后测试真实匹配和视觉上相似的假候选人。越高越严格,但任意设定的最大值可能会拒绝合法的缩放或渲染更改。
- 当目标属于屏幕已知部分时,限制搜索区域。较小的区域可以减少假阳性,但猜测的区域可能会隐藏有效的移动目标。
- 为保持稳定的视觉属性选择匹配模式。当颜色有意义时,颜色可以提供帮助;灰色或边缘模式可能可以容忍一些颜色变化;细节应与实际屏幕进行测试。
- 当替代模板在已知状态下代表相同的控制时,请将其一起保留,例如启用和禁用主题。不要将无关的目标添加到一个匹配中。
- 测试将运行Flow的准确设备尺寸、方向、主题和应用程序版本。在进行重大界面更新后重新测试。
- 记录故障发生的地点。匹配分数、选定的资产、检测到的矩形、等待时间和下一个状态结果比通用宏错误更有用。
不要只根据成功示例进行调试。从预期屏幕开始,一个没有目标的屏幕,一个具有类似图标的屏幕,一个缓慢的过渡,以及一个覆盖目标的弹出窗口。当负面案例安全停止时,自动化是值得信赖的,而不仅仅是在成功路径完成一次时。
状态检查图像触控板的实际用途
移动QA和烟雾测试
确认出现已知屏幕,轻点一个控制器,等待,然后捕获下一个状态。这对于授权设备上的可重复的烟雾测试路径很有用。Android屏幕镜像到PC或Mac有助于测试人员在准备和调试Flow时查看实际手机。
对话框和恢复处理
在选择匹配的操作之前,检测特定的重试、权限或连接对话框。不要构建一个通用“确定”按钮:相同的单词可以在不同的对话框上批准非常不同的操作。
重复的内部应用程序操作
对于受控的商业应用程序,Flow可以在打开下一个项目或提交已批准的表格之前检查当前页面。将视觉检查与明确的输入边界、最终状态检查和人为交接异常相结合。
设备上的个人程序
兼容的Flow可以在部署后继续在手机上运行,而无需桌面保持连接。仅保留本地工作流程;如果配置文件调用HTTP端点、远程模型、webhook或消息服务,则此特定工作流程需要网络访问。
权限和安全界限
在Android上,视觉自动化和手势自动化使用敏感的系统功能。Android文档必须声明手势功能才能调用手势,而屏幕截图需要自己的授权和生命周期。在莱彩投屏 Flow Inside中,图像匹配使用活跃的MediaProjection屏幕会话和手机侧前景执行;点击使用辅助功能。
仅在您授权操作的设备、帐户和应用程序上使用自动化。某些应用程序或设备构建可能会阻止或忽略辅助功能手势。成功图像匹配并不保证后续的轻点会被接受。单独诊断观察和手势传递。
在明确审查或非常严格的条件下,保留付款、帐户更改、破坏性删除、私人数据和不可逆转的操作。不要使用自动点击器来创建虚假参与度、规避平台控制或违反应用程序的条款。最安全的Flow是在运行前可见允许状态、操作、停止条件和证据的Flow。
在无人看管的情况下使用前,请检查检查清单。
- 从确切的预期启动屏幕运行三次。
- 从错误的屏幕开始,并确认没有发生轻点。
- 盖住或移除目标,并确认失败后匹配是否成功。
- 呈现一个看起来相似的控制器,并检查阈值和区域是否拒绝它。
- 减慢应用程序或网络速度,并确认等待和后续条件的行为是否安全。
- 只有在支持这些模式的情况下,才需要旋转设备或更改显示比例,然后重新测试模板。
- 禁用或中断所需的屏幕截图或辅助功能,并验证错误是否可见。
- 查看最终屏幕、日志、屏幕截图或证明任务结果的输出。
从一个受限的过渡开始。一旦它可靠,将重复的多节点操作提取到一个名为小子流中,并保持主流可读性。莱彩投屏 Flow Inside教程解释了准备和部署边界;AI Android自动化页面涵盖了桌面辅助工作流程构建和调试。
安卓图像识别自动点击常见问题解答
图像识别总是比固定坐标更安全吗?
只有在测试模板、阈值、区域、时间和故障路径时,它才更安全。弱或过于广泛的匹配仍然可能会选择错误的目标。
流程应该一直匹配,直到图像出现吗?
一个单个图像匹配节点应观察一次。如果需要等待,请使用明确的重试,或直到结构具有明确的间隔、超时或尝试限制,以便行为保持可见。
检测到的位置可以直接用于轻敲吗?
是的。使用成功检测到的视觉节点的矩形或中心作为轻点源。这可以保持观察和动作之间的关系。
这可以在手机上完全离线运行吗?
当部署的配置文件中的每个节点和资产都在本地运行时,它可以做到这一点。图像匹配、等待、手势和本地检查可以留在设备上。任何远程模型、HTTP请求、webhook、云同步或消息服务都会增加网络依赖性。
使每次点击都成为可审计的状态转换
关键的改进是概念上的:不要只问在哪里轻点。问在轻点之前必须是什么,观察到的结果授权了这个手势,界面需要多久才能改变,以及什么证明了下一个状态已经到达。
莱彩投屏包含莱彩投屏 Flow Inside,用于此确定性电话端模式:观察一次,遵循成功或失败结果,从检测到的屏幕比例结果中点击,显眼地等待,然后再次观察。在计算机上准备和验证兼容的配置文件,将其与批准的资产一起部署,并让莱彩 Android Agent只运行您定义的状态和过渡。