项目源地址:https://github.com/nickliqian/cnn_captcha
欢迎大家star和fork~
cnn_captcha
use CNN recognize captcha by tensorflow.
本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别。
项目封装了比较通用的校验、训练、验证、识别、API模块,极大的减少了识别字符型验证码花费的时间和精力。
项目已经帮助很多同学高效完成了验证码识别任务。
如果你在使用过程中出现了bug和做了良好的改进,欢迎提出issue和PR,作者会尽快回复,希望能和你共同完善项目。
如果你需要识别点选、拖拽类验证码,或者有目标检测需求,也可以参考这个项目nickliqian/darknet_captcha。
时间表
2018.11.12 - 初版Readme.md
2018.11.21 - 加入关于验证码识别的一些说明
2018.11.24 - 优化校验数据集图片的规则
2018.11.26 - 新增train_model_v2.py
文件,训练过程中同时输出训练集和验证集的准确率
2018.12.06 - 新增多模型部署支持,修复若干bug
2018.12.08 - 优化模型识别速度,支持api压力测试和统计耗时
2018.02.19 - 新增一种准确率计算方式
目录
- 2.1 数据集
- 2.2 配置文件
- 2.3 验证和拆分数据集
- 2.4 训练模型
- 2.5 批量验证
- 2.6 启动WebServer
- 2.7 调用接口
- 2.8 部署
- 2.9 部署多个模型
- 2.10 压力测试
1 项目介绍
1.1 关于验证码识别
验证码识别大多是爬虫会遇到的问题,也可以作为图像识别的入门案例。目前通常使用如下几种方法:
方法名称 | 相关要点 |
---|---|
tesseract | 仅适合识别没有干扰和扭曲的图片,训练起来很麻烦 |
其他开源识别库 | 不够通用,识别率未知 |
付费OCR API | 需求量大的情形成本很高 |
图像处理+机器学习分类算法 | 涉及多种技术,学习成本高,且不通用 |
卷积神经网络 | 一定的学习成本,算法适用于多类验证码 |
这里说一下使用传统的图像处理和机器学习算法,涉及多种技术:
- 图像处理
- 前处理(灰度化、二值化)
- 图像分割
- 裁剪(去边框)
- 图像滤波、降噪
- 去背景
- 颜色分离
- 旋转
- 机器学习
- KNN
- SVM
使用这类方法对使用者的要求较高,且由于图片的变化类型较多,处理的方法不够通用,经常花费很多时间去调整处理步骤和相关算法。
而使用卷积神经网络,只需要通过简单的前处理,就可以实现大部分静态字符型验证码的端到端识别,效果很好,通用性很高。
这里列出目前常用的验证码生成库:
参考: