基于深度学习的图标型验证码识别系统

本文介绍了基于深度学习的12306验证码识别系统,包括数据采集、图像处理、模型搭建(如LeNet、VGG、ResNet)及预测识别。通过Python实现,使用神经网络进行图像分类,实现高精度和快速识别,同时提供了界面工具辅助预测。
摘要由CSDN通过智能技术生成

深度学习应用于图像处理领域应该说有很长一段时间了,相关的研究成果也有很多的积累了,从项目和实践入手是我觉得的最好最快速有效的学习手段,当下很多主流的验证码识别系统大都是基于神经网络设计开发而来的,在处理图像数据方面,神经网络有着无与伦比的优势,本人最开始接触到卷积神经网络也是从验证码是被项目开始入手的。本项目从零开始介绍整体的实践思路,以我们熟知的12306网站验证码为例进行分析实战,从数据采集、图像处理、模型搭建、预测识别、界面开发几个节点进行针对性的设计开发,实现了验证码识别的完整流程,达到了很高的精度要求和速度要求,能够满足基本的调用需求。在模型方面,对比使用了多种经典的神经网络模型来进行实验,选取最优的实验结果来用于界面开发和调用识别。

整个项目基于python3.6开发实现,项目中包含整体项目所使用到的数据、代码脚本、模型文件和界面文件的所有数据文件。项目文件截图如下所示:

上述文件解释说明如下表所示:

文件名称 文件说明
screenshot/ 软件截图目录
getData.py 图像验证码数据采集模块
imageCut.py 图像验证码数据切分处理模块
dataHelper.py 模型数据加载预处理模块
myModel.py 模型训练模块
resnetModel.py Resnet模块
predict.py 离线模块预测识别模块
guiDemo.py 界面可视化模块
texts.txt 文本标签集合
valid_ip_all.json IP代理池数据,避免爬虫被封禁
imageModel.h5 训练好的图像识别模型文件
textModel.h5 训练好的文本识别模块文件

接下来针对整个建模流程的各个节点进行详细说明。

一、数据采集

做深度学习的,基础条件就是:数据+算力,想要建模实践,首先就需要把所需的数据给准备好了,下面我们开始本文的第一步工作:源站验证码数据采集,这就是一个单纯地数据爬虫工作,详细的实现原理本来也就没什么,我也就不多讲解了,核心代码部分如下:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division
 
 
'''
__Author__:沂水寒城
功能: 网络验证码数据采集模块
'''
 
 
 
def buildProxy():
    '''
    构建代理信息
    '''
    header_list=generateRandomUA(num=500)
    header={'User-Agent':random.choice(header_list)}
    ip_proxy=random.choice(ip_list)
    one_type,one_ip,one_port=ip_proxy[0],ip_proxy[1],ip_proxy[2]
    proxy={one_type:one_type+'://'+one_ip+':'+one_port}
    return header,proxy
 
 
def getPageHtml(url,header,proxy,num_retries=3):
    '''
    多代理形式、超时重试机制,获取数据
    '''
    try:
        response=requests.get(url,headers=header,proxies=proxy,timeout=5)
        return response
    except Exception as e:
         time.sleep(random.randint(3,8))
         while num_retries:
            num_retries-=1
            print('Left tring number is:  ', num_retries)
            return getPageHtml(url,header,proxy,num_retries)
 
 
def getVCPics(img_url,start,end,saveDir):
    '''
    下载验证码数据
    '''
    if not os.path.exists(saveDir):
        os.makedirs(saveDir)
    for i in range(start,end):
        print("Downloading",i+1,"......")
        header,proxy=buildProxy()
        try:
            img=getPageHtml(img_url,header,proxy,num_retries=3)
            pic_name=saveDir+str(i+1)+'.jpg'
            file_pic=open(pic_name,'ab')
            file_pic.write(img.content)
            file_pic.close()
            time.sleep(random.randint(0.1,1))
        except:
            pass
 
 
if __name__ == '__main__':
    print('captch
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用过程注意事项: 1.调用DLL识别识别,多线程下不需要加许可证,支持并发识别. 2.调用DLL识别,识别参数设置命令SetWmOption必须与你弄字库时候的设置参数一样,不然会导致识别率下降具体参数说明,请看调用例子里的[我的函数.txt]文档有对应参数说明. 3.如果遇见本工具无法识别验证码,可以找群主(用神经网络识别)定制,价格便宜公道. [2017-07-27] 完美验证识别系统V3.2 1.增加DLL识别返回方式2和3具体看我的函数.txt里说明,主要是增加一个可以返回识别后的总体信任度.这个值你可以给它个阀值,比如说如果总体信任度小于60,那么你就不提交服务器,直接重新获取图片识别,直到总体信任度大于60你才提交给服务器,这个阀值具体多少,自己可以先测试. 2.修复导出字库没有导出完,直接关闭窗口崩溃问题 3.添加批量下载后定位到批量下载文件夹 4.增加可以使用验证码长度进行过滤,增加可以使用总体信任度进行过滤.(这两个功能可以快速的制作字库,比如说你验证码是4位的,你可以设置验证码小于4,大于4那这张图片肯定是识别错误的,那么软件就会把这张图片保存下来,同理可以使用总体信任度进行此保存) [2017-07-20] 完美验证识别系统V3.1 1.修复数组下标越界问题 2.字库列表添加可以多选然后右键批量删除选中项 [2017-07-13] 完美验证识别系统V3.0 1.修复导出字库,重复导出不会覆盖原来的BUG,导出的图片会累加上去(注意,以前导出的字模导入新版中会出错,新版字模导出格式为a_md5.bmp 请自行写个软件修改文件名,然后再导入) 2.修复添加字库空格都可以添加进去 3.修复崩溃问题.(崩溃应该绝大多数都是此原因造成的.) 4.其它一些调整. [2017-06-25] 完美验证识别系统V2.6 1.解决输入焦点问题. 2.批量下载增加可以过滤掉宽度范围,面积范围,高度范围,黑色数范围,可以去掉没有用的干扰图片. 3.其它的一些细节调整 [2017-06-07] 完美验证识别系统V2.5 1.修复去除干扰滤镜在没有先二值化图片都可以使用. 2.尝试解决添加字库崩溃问题(代码较多,找到1处问题.不知道还有没有其他问题) 3.编辑字库页面增加个选中框[添加字库后自动下载图片],使用批量下载图片,可以快速添加字库 4.使用截图工具,截取图片后,会自动切换到划线工具. [2017-05-17] 完美验证识别系统V2.3 1.修复设置滤镜默认都有选择项. 2.修复当使用本地图像时,没有新建项目都可以编辑的问题. 3.修复黑白处理滤镜在没有先二值化图片都可以使用. 4.修复处理很多逻辑错误会导致程序崩溃. 5.增加字库列表添加右键删除当前选中的字库 6.增加禁止重复运行,由于重复运行会导致字库添加失败,和读取不到已经做过的字库. 7.增加快捷键"自动分割(Alt+R)" ,"手动分割(Alt+T)" 8.编辑页面增加个批量下载按钮,可以实现批量下载并自动分割图片功能(批量下载的图片保存在当前项目文件夹下的"批量下载"文件夹中) 9.主窗口增加一个选择框_图像已处理不使用滤镜,由于批量下载后图片都是已经使用过滤镜了,处理批量下载的图片这里必须得勾选上,不然会重复运用滤镜 [2017-05-07] 完美验证识别系统V2.2 1.新增分辨率1024*768布局 2.修改注册热键方式为本进程方式(原为全局热键,感谢群友XGSoft提供源代码) [2017-05-06] 完美验证识别系统V2.1(要求屏幕分辨率最低1440*900) 1.去掉窗口最大化,去掉自动调整窗口大小代码,修复部分控件显示不全 2.增加检测图像是否二值化,没二值化的图片不允许编辑 3.尝试解决添加字库崩溃的问题(不确定问题出在哪!!) 4.解决滤波数组越界问题.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值