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

文章目录

  • 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.mzph.cn/news/134414.shtml

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

相关文章

使用表单登录方法模拟登录通信人家园,要求发送登录请求后打印出来的用户名下的用户组类别

目标网站:https://www.txrjy.com/forum.php 一、进入网页,右键“检查” 二、输入用户名和密码,点击“登录”,点击“Network”,上划加载项找到蓝色框中的内容 三、点击第一个加载项,找到URL 四、相关代码: …

苍穹外卖-day05

苍穹外卖-day05 课程内容 Redis入门Redis数据类型Redis常用命令在Java中操作Redis店铺营业状态设置 功能实现:营业状态设置 效果图: 选择营业中,客户可在小程序端下单: 选择打烊中,客户无法在小程序端下单&#xf…

git and svn 行尾风格配置强制为lf

git CLI配置: // 提交时转换为LF,检出时转换为CRLF git config --global core.autocrlf true // 提交时转换为LF,检出时不转换 git config --global core.autocrlf input // 提交检出均不转换 git config --global core.autocrlf f…

提升(Hoisting)和暂时死区(TDZ)在实践中的应用

变量提升 ● 首先我们先声明三个变量,并在声明之前去使用这个变量 console.log(me); console.log(job); console.log(year);var me IT知识一享; let job teacher; const year 1991;使用var声明变量,变量声明会被提升到作用域的顶部,但是…

EasyExcel实现动态表头功能

EasyExcel实现动态表头功能 开发过程中,大部分都会使用到导出报表功能,目前阶段会用得有 poi导出(暂无), easyexcel导出(官方文档,https://easyexcel.opensource.alibaba.com/docs/current/&am…

【C++】特殊类设计+类型转换+IO流

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

前端解决跨域 3 种方法 -对接读卡器时出现跨域问题

目录 背景概述实现中遇到的问题解决方法1 - 反向代理方法2 - JSONP实现1实现2 借助jQuery(我用的) 方法3 - 原生请求方法4 - 接口请求时请求头解决跨域 背景概述 开发过程中对接读卡器硬件时,和C工程师对接,C工程师写了一个程序&a…

Tomcat的HTTP Connector

https://tomcat.apache.org/tomcat-10.1-doc/config/http.html 一个Connector代表一个接收请求、返回响应的端点(endpoint)。 HTTP Connector 元素代表一个支持HTTP/1.1的Connector组件。一个这样的组件在服务端一个指定的TCP端口上监听连接。一个Serv…

IC - 基础知识 - SOC与MCU

说明 工作中有涉及到SOC和MCU,非嵌入式专业,对两个概念理解不是很清晰。 共同点 MCU和SOC是两种常见的集成电路 (IC) 设计形式,它们的区别在于它们的设计目的和应用场景。工作中将MCU和SOC都称为IC也是没问题的,但是专业人员会…

excel 导出 单元格换行

1、使用setWrapText方法来设置单元格的自动换行:style.setWrapText(true); 2、使用\n来表示换行 import java.io.FileOutputStream; import java.io.IOException;public class ExcelExporter {public static void main(String[] args) throws IOException {// 创…

json字符串属性名与实体类字段名转换

在项目开发过程中,会遇到实体类字段名与交互的json对象属性名不一致的情况,比如前段使用的是下划线方式定义,后端采用的是驼峰式定义,其他系统使用t表示一个时间戳,自己的系统使用timestamp定义。遇到这种情况&#xf…

学习笔记:根号分治(优雅的暴力)

文章目录 根号分治例题选讲哈希冲突Time to Raid Cowavans[ARC150B] Make Divisible无向图三元环计数雅加达的摩天轮[ABC259Ex] Yet Another Path Counting 根号分治 根号分治,与其说是一种算法,更不如说是一种 思想。它是将问题按照不同的数据规模划分&…

c语言实现http下载功能,显示进度条和下载速率

#include <stdio.h>//printf #include <string.h>//字符串处理 #include <sys/socket.h>//套接字 #include <arpa/inet.h>//ip地址处理 #include <fcntl.h>//open系统调用 #include <unistd.h>//write系统调用 #include <netdb.h>//…

SHAP 和 LIME 解释模型

内容大纲 1、SHAP 解释器1.1 案例&#xff1a;用于预测患者肺癌1.2 案例中使用的shap解释器1.3 举例说明&#xff1a;SHAP工作原理 2、LIME 解释器2.1 案例&#xff1a;判断法律案件胜诉可能性2.2 LIME解释器工作原理2.3 本地解释模型的训练过程2.4 举例说明1&#xff1a;新闻分…

机器学习实战:基于sklearn的工业蒸汽量预测

文章目录 写在前面工业蒸汽量预测1.基础代码2.模型训练3.模型正则化4.模型交叉验证5.模型超参空间及调参6.学习曲线和验证曲线 写在后面 写在前面 本期内容&#xff1a;基于机器学习的工业蒸汽量预测 实验环境&#xff1a; anaconda python sklearn 注&#xff1a;本专栏内所有…

K8s学习笔记——认识理解篇

1. K8s诞生背景 回顾应用的部署&#xff0c;经历了以下几个阶段&#xff1a; 传统部署&#xff1a;物理服务器上运行应用程序。虚拟机部署&#xff1a;物理服务器上安装虚拟机&#xff0c;在虚拟机上运行应用程序。容器部署&#xff1a;物理服务器上安装容器运行时&#xff0…

YB4554是一款经济高效、完全集成的高端输入电压单电池锂离子电池充电器。

YB4554 带OVP保护的高输入电压充电器 概述&#xff1a; YB4554是一款经济高效、完全集成的高端输入电压单电池锂离子电池充电器。这个充电器使用锂离子要求的CC/CV充电模式电池充电器可接受高达24V&#xff0c;但当输入电压超过OVP阈值&#xff0c;通常为6.8V&#xff0c;以防…

antdv使用a-cascader联级选择器实现自定义浮层样式

一般的使用组件库想要自定义样式都会使用深度选择器deep去实现 但是有的组件不管是deep还是!important还是写行内样式都改不掉 这里主要讲使用a-cascader联级选择器的浮层改变样式 一&#xff0c;使用组件 <a-cascader:options"regionOptions"change-on-selectv…

30道高频Vue面试题快问快答

面试中的快问快答 快问快答的情景在面试中非常常见。 在面试过程中&#xff0c;面试官通常会使用快问快答的方式来快速评估面试者的基础知识、思维能力和反应速度。 这种情景下&#xff0c;面试官会提出一系列简短的问题&#xff0c;并期望面试者能够迅速做出回答或提供简洁明…

基于STM32+华为云IOT设计的火灾感知系统

一、设计需求 【1】 项目背景 随着城市化进程的加快和人们生活水平的提高,火灾事故频繁发生,给人们的生命财产安全带来巨大威胁。因此,开发一种可靠的火灾感知系统对于预防和减少火灾事故具有重要意义。近年来,随着物联网技术的发展,基于物联网的火灾感知系统逐渐成为研…