返回博客
使用方法 · · 9 分钟阅读

利用图像识别实现GUI操作自动化的机制与使用方法

在录制并回放宏时,许多人都会遇到“昨天还能运行,今天点击位置却偏了”的现象。这通常是因为录制的宏以“屏幕上的固定坐标”为基准运行。窗口在其他位置打开、屏幕分辨率发生变化,或是在另一台显示器上回放——这些情况的变化都会导致点击落在错误的位置。解决这一根本问题的方法,就是采用“图像识别”进行自动化。

图像识别是一种不以坐标、而以“外观”为基准在屏幕上查找元素的技术。预先注册一张想要点击的按钮的小图像,回放时工具就会扫描整个屏幕,找出与该图像匹配的位置。无论按钮移动到了哪里,只要外观相同,就能准确找到并点击——这正是图像识别的优势。

图像识别如何找到元素

其机制很简单。首先,截取并保存想要作为标记的元素——例如“发送”按钮或特定图标——的一张小图像(模板图像)。运行宏时,工具会截取当时的屏幕,并在屏幕中搜索与模板图像匹配的区域。找到匹配位置后,它会返回该区域中心点的坐标,宏便会将鼠标移到那里并点击。

这里的关键设置是“匹配阈值(匹配精度)”。即使不是100%完全一致,也可以调整为例如相似度达到90%以上就判定为“匹配”。提高阈值可以减少误识别,但细微的外观差异也可能导致无法找到目标。反之,降低阈值会提高灵活性,但也会增加误将相似的其他元素识别为目标的风险。诀窍是结合实际屏幕反复测试,找出恰当的数值。

FIND_IMAGE 与 WAIT_IMAGE 的选择

makuroku 提供了两个有代表性的命令,用于从脚本中调用图像识别。FIND_IMAGE 命令用于查找“此时此刻该图像位于屏幕上的哪个位置”。由于可以将找到的坐标存入变量,因此适合“点击不知道会显示在哪里的按钮”等用途。

另一方面,WAIT_IMAGE 是“等待该图像出现”的命令。加载网页或启动应用程序需要时间,如果不等其完成就执行下一项操作,便会失败。使用 WAIT_IMAGE,便能实现与屏幕状态同步的可靠自动化,例如“等到表示加载完成的图标出现后再继续”。将这两个命令结合起来,就能构建不易受实际工作中常见的“时序波动”影响、更加稳定可靠的自动化。

图像识别特别有用的场景

图像识别在以下情况中尤其有效。

  • 按钮或窗口的显示位置每次都会变化的应用
  • 希望等待加载或处理完成后再继续时
  • 布局动态变化、仅靠指定坐标无法充分应对的画面
  • 希望在特定图标或状态出现时触发处理

不过,图像识别也有其局限性。对于目标外观频繁变化的设计,以及带有半透明或动画效果的元素,匹配判断往往不够稳定。此外,由于需要扫描整个画面,处理时间会比指定坐标稍长一些。不要把所有操作都替换为图像识别,而应根据情况灵活使用:“能够通过坐标处理的位置就使用坐标,只有位置会变化的地方才使用图像识别。”这才是实现实用且快速自动化的诀窍。

巧妙准备模板图像的诀窍

图像识别的准确度很大程度上取决于所注册模板图像的质量。这里有几个诀窍。首先,应将作为识别标志的区域裁剪得“小而有特点”。不要截取整个按钮,而只截取该按钮特有的图标或文字,这样就不容易与其他元素混淆。相反,如果截取范围过大,周围的细微变化(如背景色或相邻元素)就可能导致无法匹配。

其次,应避开颜色或状态容易变化的部分。如果把鼠标悬停时会变色的按钮,或选中时会高亮显示的区域作为识别标志,就可能因状态不同而无法匹配。请选择外观始终一致的稳定部分。此外,屏幕显示缩放比例发生变化时,图像尺寸也会随之变化,因此最稳妥的做法是以实际运行时使用的分辨率和缩放比例截取模板。正是这些细节上的周全考虑,能够大幅提高图像识别的成功率。

将图像识别与其他方法结合使用

图像识别功能强大,但并非万能。要在实际工作中构建稳健的自动化,正确的做法是根据具体情况组合多种方法。对于位置完全不变的按钮,使用快速的坐标指定就足够了。只有位置会变化的按钮,或需要一段时间才会显示的元素,才交给图像识别处理。此外,如果需要读取屏幕上的文字信息,则使用OCR(文字识别);如果需要与外部服务集成,则使用HTTP通信——像这样根据目的选择不同的方法。

makuroku 可以在一个脚本中自由组合这些方法。例如,“用WAIT_IMAGE等待画面准备就绪,用FIND_IMAGE查找并点击按钮,用OCR读取结果数值,再通过条件分支选择不同的处理流程”——像这样,可以将接近人工操作的灵活自动化编写为一套连贯的流程。不要拘泥于单一方法,而应发挥各自的优势并将其组合起来。这种思路才是实现真正适用于实际工作自动化的捷径。

图像识别无法正常工作时的处理方法

开始使用图像识别后,有时会遇到“找不到明明已经注册的图像”的情况。原因可能有好几个。最常见的是,截取模板图像时与实际搜索时的屏幕缩放比例或分辨率不同。在这种情况下,图像大小会发生变化,因此无法匹配。最稳妥的解决方法是使用与实际运行环境相同的设置重新截取模板。

其次常见的情况是匹配阈值过于严格。如果要求100%完全匹配,即使只有极轻微的色调或抗锯齿差异,也会导致无法找到图像。稍微降低阈值,将相似度达到90%左右判定为匹配,通常可以提高稳定性。不过,降得太低会增加误检,因此诀窍是在实际画面中反复测试,找出恰当的值。

如果仍然无法解决,请重新检查被选作模板的区域本身。如果把背景容易变化的部分或选中时会高亮的部分当作标志,其外观就会随情况发生改变,导致无法匹配。将范围缩小到外观始终一致、特征鲜明且稳定的部分——例如特有的图标或徽标——可以提高成功率。“选择容易寻找的标志”是让图像识别保持稳定的最大诀窍。

图像识别在最初调整时确实需要花费一些工夫,但一旦正确设置,就能展现出坐标指定无法实现的灵活性。即使窗口移动、布局变化,只要“外观”相同,它就能准确响应——这种稳健性可以让自动化在实际业务中长期持续使用,带来极大的安心。

使用图像识别的实用场景

让我们通过具体场景来看看图像识别的真正实力。例如,假设要自动执行定期从某个Web应用下载数据的工作。该应用每次登录时的页面布局都会略有变化,下载按钮的位置也不固定。使用坐标指定的宏无法应对这种变化,很快就会失效。

这正是图像识别发挥作用的时候。首先,将下载按钮的图标注册为模板图像。宏先使用WAIT_IMAGE等待页面加载完成,再通过FIND_IMAGE从屏幕中找出下载按钮并单击其所在位置。无论按钮显示在哪里,只要外观相同,就能准确找到并单击,因此可实现不受布局变化影响的稳定自动化。

此外,如果先用WAIT_IMAGE等待表示下载完成的消息出现,再进入下一步处理,即使网络较慢也不会遗漏。图像识别就是这样将人类习以为常的判断——“查看屏幕状态,在恰当的时机操作恰当的位置”——引入自动化。正因为如此,即使在实际业务环境这种“充满变化的场所”,也能构建不易失效的自动化。

此类场景不仅适用于Web应用,还可以应用于桌面应用、业务系统等各种场合。那些因为“位置会移动”或“时机无法预料”而一直放弃自动化的工作,也能借助图像识别纳入自动化范围。首先,请想一想那些“每次位置都会偏移,令人困扰”的工作,并尝试用图像识别使其稳定运行。

打造不易失效的自动化

自动化能否在实际工作中“真正派上用场”,取决于它对意外情况的承受能力。仅依赖记录坐标的自动化,即使第一次运行顺利,也往往会因环境稍有变化而停止。将图像识别结合进来,就能把人类下意识进行的判断融入自动化,例如“根据外观单击”和“等待屏幕准备就绪”。

除了通过 GUI 录制之外,makuroku 还标准配备了 FIND_IMAGE、WAIT_IMAGE 等图像识别命令。先录制操作搭建基本框架,再仅将位置会变动或需要等待时机的部分替换为图像识别——通过这种组合,您可以构建出能够应对现实环境中的杂乱情况、而不会因最初的意外状况就失效的自动化。所有功能都可免费试用,不妨先用图像识别,让那些“每次都因位置偏移而令人头疼的操作”稳定运行起来。

免费试用

用 makuroku 来自动化它

makuroku 录制你的鼠标和键盘操作,然后自动回放。需要更多时可加上 SCR 脚本和 AI(MCP)集成。所有功能在 Windows 上免费使用。