文章目录
- 1. 写在前面
- 2. CSCI级设计决策
- 2.1. 字符型验证码识别智能体流程关联
- 2.2. 字符型验证码识别行为设计
- 3. 字符型验证码识别智能体结构设计
- 3.1. 智能体部件组成
- 3.2. 智能体结构
- 4. 接口设计
- 4.1. 字符型验证码识别智能体交互
- 5. 智能体算法设计细节
- 5.1. 算法目标
- 5.2. 字符型验证码算法数据
- 5.3. 程序级模块交互流程
- 6. 多类型验证码实测结果
1. 写在前面
前些天我写了一篇关于Google验证码机器人自动识别算法构建的文章:
【验证码系列】Google验证码从数据训练到机器自动识别算法构建
传统字符型验证码识别在以前的处理流程:
图像预处理 ---- 二值化 ---- 去噪 ---- 识别
这套验证码识别解决方案放在六七年前,那个时候在整个爬虫领域是够用的
不过如今技术不断演变,验证码的识别基本上都采用深度学习、模型识别的方式,不仅提升了准确率还提升了通用性!也不再需要手动设计特定规则和特征提取过程
你只需要提供足够多的训练数据,这个模型就能够为你识别多种不同类型的验证码!
当然这也并不是容易达成的一件事,首先我们需要大量的标记数据来训练模型,而标记验证码数据通常需要人工操作,耗费时间和资源
然后就是需要选择合适的算法!这都是需要具备较深领域知识的,因为后续的模型调参也是一个复杂的过程!
这篇文章我们将再次利用数据集进行训练,实现针对字符验证码的自动识算法构建,涉及的验证码类所型覆盖的范围还是比较全的(正规型、扭曲型、粘连性等等),大致如下所示:
针对上图中所有情况字符的随机组合问题,我们将采用同一算法来解决!该算法采用类ResNet网络结构的深度学习算法,由6个多分类器组成,分别针对以上不同情况的字符型验证码进行识别,如下我在本地随机抽取了几张验证码进行了测试,如下所示:
文末会展示多样本类型的测试结果、准确率、耗时
2. CSCI级设计决策
2.1. 字符型验证码识别智能体流程关联
1、用户:字符型验证码突防软件使用者
2、接口服务器:接收用户数据并返回字符识别结果
3、字符型验证码识别算法:对待检测字符型验证码进行识别
2.2. 字符型验证码识别行为设计
- 接口服务器主要完成数据传输任务,在用户和字符型验证码识别算法之间传输待识别字符型验证码的Base64数据和字符型验证码识别结果数据
- 字符型验证码识别算法主要功能为:对接口服务器提供的待识别字符型验证码图像数据进行识别得到识别字符结果,并将字符识别结果数据返回接口服务器
3. 字符型验证码识别智能体结构设计
3.1. 智能体部件组成
- FlaskServer
该模块接收用户输入的url数据及id号返回验证识别结果 - CCharCaptcha
该模块,主要对待识别字符型验证码进行识别
3.2. 智能体结构
- FlaskServer
该模块主要包括两部分,一部分接受用户输入的url数据及id号,以此判断进行验证的类型,另一部分将验证突防结果返回给用户 - CCharCaptcha
该模块,主要对待识别字符型验证码数据进行缩放、裁剪等操作获得多张字符型验证码图像,对每一张字符型验证码图像进行识别。然后,对多个识别结果做处理选出最优结果,并返回识别字符结果
首先,FlaskServer模块为CCharCaptcha提供待识别字符型验证码图像数据。其次,CCharCaptcha对待识别字符型验证码图像数据进行算法运算。最后,CCharCaptcha将识别结果返回给FlaskServer
4. 接口设计
4.1. 字符型验证码识别智能体交互
字符型验证码突防软件接收到CharUser信息后,字符型验证码突防软件交互模块根据FlaskServer获取到的Base64数据转换为图像数据,然后将图像数据传递给CCharCaptcha模块进行字符型验证码识别,并返回识别结果到FlaskServer,FlaskServer将识别结果反馈给CharUser
对象 | 类 |
---|---|
接口服务器 | FlaskServer |
字符验证码识别算法 | CCharCaptcha |
5. 智能体算法设计细节
5.1. 算法目标
字符型验证码识别算法的工作目标是让机器人模拟人去识别网站提供的字符验证码,并反馈识别结果:
通过分析我们知道字符型验证码构成主要以下五种情况:
1、待识别字符位数分为4、5、6位
2、待识别字符分为多种字体,例宋体、黑体等
3、待识别字符由26个英文字母(包括大小写)和0-9数字随机组成
4、待识别字符背景有干扰图案,例如曲线、斑点等
5、待识别字符存在实心和空心两种字符
5.2. 字符型验证码算法数据
采用PhotoShop生成多种类62字符(a-z,A-Z,0-9),包括各种字体、粗细、空心和实心,共计近4W张字符图片并混合实际采集的验证码数据。利用C++程序采用随机数量的字符图片,用各种角度、位置粘贴到各种背景图片上。背景图片的干扰信息由程序自动生成。共计生成字符型验证码训练图片500万张
5.3. 程序级模块交互流程
除了Python模块的话,算法模块是用C++实现的,当可执行程序运行时,Python模块提供图片文件到相应文件夹下。C++程序检查图片文件是否存在,若存在则对图片文件进行字符识别运算,并将识别结果记录到共享文件Result中
6. 多类型验证码实测结果
- 数字曲线干扰型验证码:
- 多位字符干扰型验证码:
- 多色曲线干扰型验证码:
- 字符旋转干扰型验证码:
好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章