AI加持下的RPA模拟人工动鼠标的方式打
有朋友在文章《用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