captcha-trainer 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
captcha-trainer 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
captcha-trainer 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
captcha-trainer 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
captcha-trainer 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 SATA
开发语言 Python
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 kerlomz
适用人群 未知
收录时间 2019-03-04

软件简介

验证码终结者 —— 基于CNN+BLSTM+CTC的训练部署套件

定义一个模型

本项目采用的是参数化配置,不需要改动任何代码,可以训练几乎任何字符型图片验证码,下面从两个配置文件说起:
config.yaml # 系统配置

# - requirement.txt  -  GPU: tensorflow-gpu, CPU: tensorflow
# - If you use the GPU version, you need to install some additional applications.
# TrainRegex and TestRegex: Default matching apple_20181010121212.jpg file.
# - The Default is .*?(?=_.*\.)
# TrainsPath and TestPath: The local absolute path of your training and testing set.
# TestSetNum: This is an optional parameter that is used when you want to extract some of the test set
# - from the training set when you are not preparing the test set separately.
System:
DeviceUsage: 0.7
TrainsPath: 'E:\Task\Trains\YourModelName\'
TrainRegex: '.*?(?=_)'
TestPath: 'E:\Task\TestGroup\YourModelName\'
TestRegex: '.*?(?=_)'
TestSetNum: 1000
# CNNNetwork: [CNN5, DenseNet]
# RecurrentNetwork: [BLSTM, LSTM]
# - The recommended configuration is CNN5+BLSTM / DenseNet+BLSTM
# HiddenNum: [64, 128, 256]
# - This parameter indicates the number of nodes used to remember and store past states.
NeuralNet:
CNNNetwork: CNN5
RecurrentNetwork: BLSTM
HiddenNum: 64
KeepProb: 0.98
# SavedSteps: A Session.run() execution is called a Steps,
# - Used to save training progress, Default value is 100.
# ValidationSteps: Used to calculate accuracy, Default value is 100.
# TestNum: The number of samples for each test batch.
# - A test for every saved steps.
# EndAcc: Finish the training when the accuracy reaches [EndAcc*100]%.
# EndEpochs: Finish the training when the epoch is greater than the defined epoch.
Trains:
SavedSteps: 100
ValidationSteps: 500
EndAcc: 0.975
EndEpochs: 1
BatchSize: 64
TestBatchSize: 400
LearningRate: 0.01
DecayRate: 0.98
DecaySteps: 10000

上面看起来好多好多参数,其实大部分可以不用改动,你需要修改的仅仅是训练集路径就可以了,注意:如果训练集的命名格式和我提供的新手训练集不一样,请根据实际情况修改TrainRegex和TestRegex的正则表达式。,TrainsPath和TestPath路径支持list参数,允许多个路径,这种操作适用于需要将多种样本训练为一个模型,或者希望训练一套通用模型的人。为了加快训练速度,提高训练集读取效率,特别提供了make_dataset.py来支持将训练集打包为tfrecords格式输入,经过make_dataset.py打包之后的训练集将输出到本项目的dataset路径下,只需修改TrainsPath键的配置如下即可

TrainsPath: './dataset/xxx.tfrecords'

TestPath是允许为空的,如果TestPath为空将会使用TestSetNum参数自动划分出对应个数的测试集。如果使用自动划分机制,那么TestSetNum测试集总数参数必须大于等于TestBatchSize测试集每次读取的批次大小。
神经网络这块可以讲一讲,默认提供的组合是CNN5(CNN5层模型)+BLSTM(Bidirectional LSTM)+CTC,亲测收敛最快,但是训练集过小,实际图片变化很大特征很多的情况下容易发生过拟合。DenseNet可以碰运气在样本量很小的情况下很好的训练出高精度的模型,为什么是碰运气呢,因为收敛快不快随机的初始权重很重要,运气好前500步可能对测试集就有40-60%准确率,运气不好2000步之后还是0,收敛快慢是有一定的运气成分的。

NeuralNet:
CNNNetwork: CNN5
RecurrentNetwork: BLSTM
HiddenNum: 64
KeepProb: 0.99

隐藏层HiddenNum笔者尝试过8~64,都能控制在很小的模型大小之内,如果想使用DenseNet代替CNN5直接修改如上配置中的CNNNetwork参数替换为:

NeuralNet:
CNNNetwork: DenseNet
......

model.yaml # 模型配置

# ModelName: Corresponding to the model file in the model directory,
# - such as YourModelName.pb, fill in YourModelName here.
# CharSet: Provides a default optional built-in solution:
# - [ALPHANUMERIC, ALPHANUMERIC_LOWER, ALPHANUMERIC_UPPER,
# -- NUMERIC, ALPHABET_LOWER, ALPHABET_UPPER, ALPHABET]
# - Or you can use your own customized character set like: ['a', '1', '2'].
# CharExclude: CharExclude should be a list, like: ['a', '1', '2']
# - which is convenient for users to freely combine character sets.
# - If you don't want to manually define the character set manually,
# - you can choose a built-in character set
# - and set the characters to be excluded by CharExclude parameter.
Model:
Sites: []
ModelName: YourModelName-CNN5-H64-150x50
ModelType: 150x50
CharSet: ALPHANUMERIC_LOWER
CharExclude: []
CharReplace: {}
ImageWidth: 150
ImageHeight: 50
# Binaryzation: [-1: Off, >0 and < 255: On].
# Smoothing: [-1: Off, >0: On].
# Blur: [-1: Off, >0: On].
# Resize: [WIDTH, HEIGHT]  
# - If the image size is too small, the training effect will be poor and you need to zoom in.
# - ctc_loss error "No valid path found." happened
Pretreatment:
Binaryzation: -1
Smoothing: -1
Blur: -1

上述的配置只要关注
ModelName、CharSet、ImageWidth、ImageHeight
首先给模型取一个好名字是成功的第一步,字符集CharSet其实大多数情况下不需要修改,一般的图形验证码离不开数字和英文,而且一般来说是大小写不敏感的,不区分大小写,因为打码平台收集的训练集质量参差不齐,有些大写有些小写,不如全部统一为小写,默认ALPHANUMERIC_LOWER则会自动将大写的转为小写,字符集可定制化很灵活,除了配置备注上提供的几种类型,还可以训练中文,自定义字符集用list表示,示例如下:

CharSet: ['常', '世', '宁', '慢', '南', '制', '根', '难']

可以自己根据收集训练集的实际字符集使用率来定义,也可以无脑网上找3500常用字来训练,注意:中文字符集一般比数字英文大很多,刚开始收敛比较慢,需要更久的训练时间,也需要更多的样本量,请量力而行


形如上图的图片能轻松训练到95%以上的识别率。
ImageWidth、ImageHeight只要和当前图片尺寸匹配即可,其实这里的配置主要是为了方便后面的部署智能策略。
其他的如Pretreatment之下的参数是用来做图片预处理的,因为笔者致力于做一套通用模型,模型只使用了灰度做预处理。其中可选的二值化、均值滤波、高斯模糊均未开启,即使不进行那些预处理该框架已经能够达到很理想的识别效果了,笔者自用的大多数模型都是98%以上的识别率。

3.2 开始训练

按照上面的介绍,配置只要修改极少数的参数对应的值,就可以开启正式的训练之旅了,具体操作如下:
可以直接使用PyCharm的Run,执行trains.py,也可以在激活Virtualenv下使用终端亦或在安装依赖的全局环境下执行

python3 trains.py

剩下的就是等了,看过程,等结果。
正常开始训练的模样应该是这样的:

该项目还支持带颜色的训练和识别,如下图:

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (16)

加载中
kerlomz软件作者
居然有这么多人评论,其实12306没什么的,只要有训练集,换个神经网络硬刚也就出来了,没有什么是牢不可破的....这个项目就是用于训练和识别普通的图形验证码而已,相较于其他的项目而言,长期更新维护,简单易用不需要修改代码半傻瓜化操作,更容易上手罢了,初衷是给公司的测试朋友们用的,公司开发的项目需要繁琐的测试,但是验证码过于麻烦,因此作为开发给行个方便而已,希望能对大家有所帮助😁
2019/03/18 23:53
回复
举报
kerlomz软件作者

引用来自“keep_wan”的评论

那种拖动的怎么识别.
拖动那种的核心主要是轨迹算法和设备信息伪造....
2019/03/18 23:47
回复
举报
该评论暂时无法显示,详情咨询 QQ 群:912889742
NB啊,这个是不是涉及机器学习了?
2019/03/15 14:41
回复
举报
该评论暂时无法显示,详情咨询 QQ 群:912889742

引用来自“久永”的评论

这样好吗? 除了逼迫验证码越来越变态以外,能有何意义? 与其这样,把精力放在如何实现更好的验证码上面不是更好吗?

引用来自“sdvdxl”的评论

病毒和反病毒一样,相互促进。再说这个是机器学习,没啥不好

引用来自“久永”的评论

这个能一样吗?这个进化的是机器,折腾的是人啊!
不折腾怎么进化,也就没有现在的技术和成果。想要发展就得不怕折腾。
2019/03/15 09:40
回复
举报
那种拖动的怎么识别.
2019/03/14 21:04
回复
举报

引用来自“久永”的评论

这样好吗? 除了逼迫验证码越来越变态以外,能有何意义? 与其这样,把精力放在如何实现更好的验证码上面不是更好吗?

引用来自“sdvdxl”的评论

病毒和反病毒一样,相互促进。再说这个是机器学习,没啥不好
这个能一样吗?这个进化的是机器,折腾的是人啊!
2019/03/14 18:19
回复
举报
我屮艸芔茻,大部分我都识别不出来...
2019/03/14 13:22
回复
举报
该评论暂时无法显示,详情咨询 QQ 群:912889742
更多评论
暂无内容
发表了博客
2013/03/16 10:12

验证码CAPTCHA

Captcha http://baike.baidu.com/view/538168.htm EXIF http://baike.baidu.com/view/22006.htm

0
0
发表了博客
2019/02/14 12:44

CAPTCHA--验证码

验证码开发有两种方法: 1.自己用代码画一个 2.调用ValidateCode.jar工具包 第一种方式: 创建一个动态web工程 编写一个Servlet,在该Servlet内进行如下操作 验证码开发步骤: 1.在内存中创建一个图片对象 1 int width = 110; 2 int height = 25; 3 // 在内存中创建一个图片对象 4 BufferedImage img = new BufferedImage(width, height, 5 BufferedImage.TYPE_IN...

0
0
发表了博客
2019/10/31 15:35

Laravel - 验证码(captcha)

首先,登录网址 packagist.org 查找 laravel captcha,找到mews/captcha ,根据 packagist 上的使用方法一步步来实现验证码的安装。配置composer.json文件 composer 安装:composer require mews/captcha 注册providers (config/app.php) ,在这个数组中的最后追加如下代码: Mews\Captcha\CaptchaServiceProvider::class, 注册aliases (config/app.php),在这个数组中的最后追加如下代码:(laravel 5 以后不用注册) 'Cap...

0
0
发表了博客
2019/07/28 13:24

django验证码captcha

官方文档 https://django-simple-captcha.readthedocs.io/en/latest/usage.html#installation 使用命令安装pip install django-simple-captcha==0.4.6 (==后面是版本号) 安装好之后添加到 settings.py中 把 url(r'^captcha/', include('captcha.urls')),添加到项目的urls.py中,如下图 Run python manage.py migrate 如下图 执行命令 makemigrations 然后再执行 migrate 进行数据表迁移 到这里没有报错说明captcha验证码组件已经...

0
0
发表于大前端专区
2018/01/12 16:16

nike free online trainer greece

Σκεφτείτε να ενώσετε τις προκλήσεις κατά τη διάρκεια της λιανικής πώλησης εκκίνησης της κοινότητας. Συνδυάζοντας μόνο τις λιγότερο σημαντικές προκλήσεις, οι τρέχουσες αποδόσεις σας είναι μεγαλύτερες κατά τη διάρκει...

0
0
发表了博客
2012/05/08 09:34

CAPTCHA技术服务

CAPTCHA:Completely Automated Public Turing test to tell Computers and Humans Apart.

0
0
2018/08/23 15:26

Laravel - 验证码(captcha)

本人感觉用的比较好的验证码包,拿出来分享一下,傻瓜式教程, 安装步骤: 首先,登录网址packagist.org查找 laravel captcha,找到mews/captcha ,根据packagist上的使用方法一步步来实现验证码的安装。 composer安装: composer require mews/captcha 注册providers (config/app.php) ,在这个数组中的最后追加如下代码: Mews\Captcha\CaptchaServiceProvider::class, 注册aliases (config/app.php),在这个数组中的最...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
16 评论
145 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部