AI加持下的RPA模拟人工动鼠标的方式打

白癜风诚信坐标企业 http://nb.ifeng.com/a/20180331/6472849_0.shtml

有朋友在文章《用YOLOv8一站式解决图像分类、检测、分割》下评论:

他问,能否来一篇处理滑块验证码的文章。我回复说,可以一试。

随后,我便搜索网上有没有类似的文章。如果遍地都是,那我也没有必要再添一份冗余。结果发现有类似的。但是,他们大多采用传统的手段:有通过操作网页html元素识别的,有通过OpnCV二值化轮廓识别的,甚至还有遍历像素点去对比RGB点识别的。

大家为什么不通过AI视觉处理去识别呢?传统的识别方式,会受页面缩放、图案颜色、画质清晰度等诸多因素的影响,具有局限性。

因此,我觉得写这么一篇,还是非常有必要的。

声明:本文不是破解类文章,不会讲解如何分析或篡改网站的代码。它是模仿最终用户在电脑上的手动操作,这种方式叫机器人流程自动化(RoboticProcssAutomation,RPA)。

RPA不是"外挂",而且差别很大。RPA不去研究程序的成分,没有入侵性,它完全像用户一样去合法操作软件。举个不恰当的例子,就像考试,RPA是找个人替你去考试,外挂或者破解工具则是直接往成绩单里塞入你的名字。

下面我将给大家展示,我是如何利用AI+RPA解决验证码识别这个问题的。学会了它,你可以利用机器人去操作一些固定的流程,从而提高生产效率。

一、实现思路和可行性验证

别看我写到这儿了,其实到目前为止,我也没有把握是否能成功。但是,潜意识里觉得是可以的。因此,想一步,试一步。下面就把我的实践记录公布给大家。

我找来一个滑块验证码的网页。这类网页很多平台都提供,我找的这个是腾讯的。

采用RPA的方式,我们就不去按F12分析元素结构了。我们要和用户一样,按下鼠标拖动它到正确的位置。

这里面需要解决如下几个问题:

1、找到滑块起点与终点的坐标位置。2、模拟鼠标的按下、拖动、抬起操作。3、当前状态的判断(什么时机抬鼠标)。

步骤1和步骤3,我有思路,那就是通过图像的目标检测或者分类去实现。因为目标检测的结果中,会包含什么物体在哪个位置。而图片分类,可以给各种状态分类。这两项,假设已经做到了。

继续往下推演。

第2步模拟鼠标操作,能实现吗?这对我来说,是一个知识空白。通过百度,我了解到python可以通过pyautogui库,实现模拟鼠标的操作。

先来做一个可行性试验。

通过聊天软件自带的截图工具,我们可以获取物体的位置坐标(下图POS:(xx,xx)所示)。

我们通过人工测量的手段,预置已经拿到了滑块的起点和终点,先看看能否通过自动化操作,来通过验证。

我测量的蓝色滑块起点坐标是(,)。从这个位置开始,水平往右拖动,大约X轴到时,正好补齐。

那整体操作应该就是先将鼠标移动到起点,然后按下鼠标向右拖动-=像素的距离,然后抬起鼠标。

#首先pipinstallpyautogui安装库importpyautogui#设置起始位置start_x=start_y=#设置拖动距离drag_distanc=-#移动到起始位置pyautogui.movTo(start_x,start_y,duration=1)#按下鼠标左键pyautogui.mousDown()#拖动鼠标pyautogui.movRl(drag_distanc,0,duration=1)#松开鼠标左键pyautogui.mousUp()

看看效果如何。

OK!这一步走通了。技术点验证通过,后面我们去处理人工智能识别图像。

二、训练实施与应用

我们要做哪些目标的检测识别呢?这还是要取决于实现思路。

从上图可以看出,起点块、终点块、操作块,我们肯定是要做检测的。我们需要获取它们的坐标信息,从而进一步通过鼠标去操作它们。

除此之外,还有一种状态我们最好也要检测。那就是重合状态。这类状态决定了我们拖动过程中,什么时机松手。可能有人会觉得这一步是多余的。因为通过计算,我们将起点块移动到终点块松手就可以了。这……理论上是这样。但是在实践中,即便你算得很对,如果AI识别的坐标有误差呢?

我们人类是看到图像重合才松手的,所以还是模拟得像一些。关于软件的RPA方案,过度保障才能够更健壮一些。

我们可以设计多种算法来保障操作的准确率:

直接法:当重合特征的数量大于0时(出现一个重合)。间接法:当图片的终点块数量为0时(被覆盖才出现)。计算法:操作块和终点块水平方向对齐时(拖到终点位置)。

具体哪种方式最准确,还得结合干扰项、识别准确率。那是后话。

下面,我们就来标记和训练数据。

2.1标记与训练数据

采用YOLOv8进行标记、训练以及使用的流程,我在文章介绍过了。那一篇是专门讲这个的,此处我就只讲流程,不讲细节,简单一笔带过。

首先是准备素材。我先截图保存了很多验证码区域的图片,然后用lablImg对截图进行标记。

可能大家看到我把刷新按钮又标记上了,这是规划之外的。因为在标记的过程中,我忽然想到,如果某种异常导致识别不到滑动块,我们可以点一下刷新按钮。

大约制作了多份样本。

然后对样本进行训练。训练轮后,可获取一份最优的bst.pt权重文件。

看看验证集的效果,还不错。

这说明,找到我们

转载请注明:http://www.abuoumao.com/hykz/8004.html

  • 上一篇文章:
  • 下一篇文章: 没有了
  • 网站简介| 发布优势| 服务条款| 隐私保护| 广告合作| 网站地图| 版权申明

    当前时间: 冀ICP备19029570号-7