【验证码系列】利用深度学习构建字符型验证码自动识别模型与算法

news2024/10/5 19:13:21

文章目录

  • 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. 多类型验证码实测结果

  • 数字曲线干扰型验证码:

在这里插入图片描述

  • 多位字符干扰型验证码:

在这里插入图片描述

  • 多色曲线干扰型验证码:

在这里插入图片描述

  • 字符旋转干扰型验证码:

在这里插入图片描述

  好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1183722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

判断两个对象是否不相等operator.ne()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 判断两个对象是否不相等 operator.ne() 选择题 下列代码执行输出的结果是? import operator print("【执行】operator.ne(8,8)") print(operator.ne(8,8)) print("【执行】…

SpringCloud——消息总线——Bus

1.什么是总线? 我们在微服务的项目中,通常会构建一个共同的消息主题,然后需要的服务可以连接上来,该主题中产生的消息会被监听和消费,这种我们称为消息总线。 SpringCloud Bus 配合SpringCloud Config使用可以实现配置…

社区分享|杭银消费金融基于MeterSphere开展接口自动化测试

杭银消费金融有限公司(以下简称“杭银消费金融”)成立于2015年12月,是经中国银保监会批准,由杭州银行作为主发起人,联合滴滴出行、中国银泰等企业组建的持牌消费金融机构,注册资本为25.61亿元。杭银消费金融…

Apifox日常使用(一键本地联调)

背景说明:现在的项目一般都是前后分离,线上出bug或者在进行联调时,有些时候后端需要重复模拟前端数据格式,在使用Apifox的情况下,如何快速造出后端需要的数据呢? 随便找一个网站,点开f12&#…

Cause: unable to find valid certification path to requested target

前话:最近,已经两个月没有怎么打开Android studio开发工具了,只因工作原因到后端帮忙干了两个月,期间由于c盘不堪重负,还经历了对系统盘进行迁移,后面打开之前的As项目,运行报错,报错…

CUDA学习笔记7——CUDA内存组织

CUDA内存组织 CUDA设备内存的分类与特征 内存类型物理位置访问权限可见范围生命周期1全局内存芯片外可读写所有线程和主机端由主机分配与释放2常量内存芯片外只读所有线程和主机端由主机分配与释放3纹理和表面内存芯片外一般只读所有线程和主机端由主机分配与释放4寄存器内存…

【C++数据结构】顶层父类的创建与类族结构的进化

文章目录 前言一、为什么需要创建顶层父类二、创建顶层父类Object的意义三、创建顶层父类Object3.1 顶层父类接口3.2 Object具体实现new和delete运算符重载的实现 和 ! 的运算符重载实现 3.3 纯虚析构函数实现 四、类族的结构进化4.1 怎样进化4.2 SmartPointer的进化4.3 Except…

什么是Target Plus EDI?

“Target Plus” 是美国知名零售商Target(塔吉特)推出的一个合作伙伴计划。这个计划允许第三方卖家在Target.com(塔吉特官方网站)上销售他们的商品。通过Target Plus,第三方卖家可以将他们的产品列在Target.com上&…

uni-app 、Spring Boot 、ant Design 打造的一款跨平台包含小说(仿真翻页、段落听书)、短视频、壁纸等功能含完备后台管理的移动应用

简介 咪哩快看,为用户提供优质阅读,短视频,共同记录美好生活的移动应用,并含有一套完备的后台管理体系,助力开发者快速数字化,开启你的财富之门! 官网: https://miliqkdoc.motopa.…

Antd Procomponent 之 proForm - 高级表单

本文作者系360奇舞团前端开发工程师 ProForm 在原来的 Form 基础上增加一些语法糖和更多的布局设置,帮助我们快速的开发一个表单。同时添加一些默认行为,让我们的表单默认好用。分步表单,Modal 表单,Drawer 表单,查询表…

DC电源模块的价格因素是什么?如何进行成本优化?

BOSHIDA DC电源模块的价格因素是什么?如何进行成本优化? DC电源模块是一种用于直流电路中的电源转换器,主要用于将输入电源的电压、电流和频率转换为适合设备的直流电源。随着电子设备的广泛应用,DC电源模块的需求也日益增加。而…

含泪整理的超全窗口函数:数据开发必备

最近在搞一些面试和课程答辩的时候,问什么是窗口函数,知道哪些窗口函数?最多的答案就是row_number、rank、dense_rank,在问一下还有其他的吗?这时同学就蒙了,还有其他的窗口函数?其实上面的回答也只是专用窗口函数&am…

多门店自助点餐+外卖二合一小程序源码系统 带完整搭建教程

随着餐饮业的快速发展和互联网技术的不断进步,越来越多的餐厅开始采用自助点餐和外卖服务。市场上许多的外卖小程序APP应运而生。下面罗峰来给大家介绍一款多门店自助点餐外卖二合一小程序源码系统。该系统结合了自助点餐和外卖服务的优势,为餐厅提供了一…

照明灯具哪个品牌好?照明灯具十大排行榜

现在儿童近视率越来越高了,用眼过度疲劳是导致近视的主要因素,学习环境的光线是否合适,都会直接影响用眼的疲劳程度。所以给孩子营造一个良好的学习环境非常重要!一款护眼台灯可以很好的预防近视,为大家推荐五款护眼台…

【今日文章】:如何用css 实现星空效果

【今日文章】:如何用css 实现星空效果 需求实现tips: 需求 用CSS 实现星空效果的需求: 屏幕上有“星星”,且向上移动。移动的时候,动画效果要连贯,不能出现闪一下的样子。 实现 这里我们需要知道,“星星”是…

复杂逻辑的开发利器—Mendix快速实现AQL质量抽检

Mendix低代码开发平台适用于复杂的业务逻辑场景,这句话大家早有耳闻,本期小编就为您打开智慧之光,仅从AQL小侧面,来管窥一二——Mendix如何形成第五代编程语言,来完成数据逻辑与建模、业务算法逻辑与建模的。&#xff…

Excel下拉填充时,如何使得数字不递增?

问题描述:Excel下拉填充时,如何使得数字不递增? 解决办法:先下拉填充数据之后,看到最后一个单元格的右下角有个填充设置的符号,右键选择复制单元格即可。其中这里的填充序列就是递增数字的操作。

塔望食研院|骆驼奶市场规模庞大,百亿体量,品牌升级!

自2022年12月塔望咨询开设塔望食品大健康行业与消费研究院(简称塔望食研院)栏目以来,塔望食研院以“为食品行业品牌高质量发展赋能”为理念,不断发布食品大健康行业研究、消费研究报告。塔望食研院致力于结合消费调研数据、企业数…

如何使用ESB产品对接业务系统接口

ESB企业服务总线在实际项目中主要用于各业务系统之间的集成,集成包括数据集成、应用集成以及业务单据集成等,ESB企业服务总线主要包含三部分:ESB设计器、SMC管理控制台以及Server运行环境,ESB设计器用于服务以及集成流程的开发&am…

AI时代项目经理与架构师的成长之道:ChatGPT让你插上翅膀

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 在AI时代,项…