# cnn_captcha
use CNN recognize captcha by tensorflow.
本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别。
项目封装了比较通用的**校验、训练、验证、识别、API模块**,极大的减少了识别字符型验证码花费的时间和精力。
项目已经帮助很多同学高效完成了验证码识别任务。
如果你在使用过程中出现了bug和做了良好的改进,欢迎提出issue和PR,作者会尽快回复,希望能和你共同完善项目。
如果你需要识别点选、拖拽类验证码,或者有目标检测需求,也可以参考这个项目[nickliqian/darknet_captcha](https://github.com/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压力测试和统计耗时
#### 2019.02.19
1. 新增一种准确率计算方式
2. TAG: v1.0
#### 2019.04.12
1. 只保留一种`train_model.py`文件
2. 优化代码结构
3. 把通用配置抽取到`sample_config.json`和`captcha_config.json`
4. 修复若干大家在issue提出的问题
#### 2019.06.01
1. 完善readme文档,文档不长,请大家一定要读完~
2. 使用cnnlib目录存放神经网络结构代码
3. 做了一版训练数据统计,大家可以参考我们的训练次数、时长和准确率
4. TAG: v2.0
# 目录
<a href="#项目介绍">1 项目介绍</a>
- <a href="#关于验证码识别">1.1 关于验证码识别</a>
- <a href="#目录结构">1.2 目录结构</a>
- <a href="#依赖">1.3 依赖</a>
- <a href="#模型结构">1.4 模型结构</a>
<a href="#如何使用">2 如何使用</a>
- <a href="#数据集">2.1 数据集</a>
- <a href="#配置文件">2.2 配置文件</a>
- <a href="#验证和拆分数据集">2.3 验证和拆分数据集</a>
- <a href="#训练模型">2.4 训练模型</a>
- <a href="#批量验证">2.5 批量验证</a>
- <a href="#启动WebServer">2.6 启动WebServer</a>
- <a href="#调用接口识别">2.7 调用接口识别</a>
- <a href="#部署">2.8 部署</a>
- <a href="#部署多个模型">2.9 部署多个模型</a>
- <a href="#在线识别">2.10 在线识别</a>
<a href="#说明">3 统计数据</a>
- <a href="#训练数据统计">3.1 训练数据统计</a>
- <a href="#压力测试">3.2 压力测试</a>
<a href="#开发说明">4 开发说明</a>
<a href="#已知BUG">5 已知BUG</a>
# 1 项目介绍
## 1.1 关于验证码识别
验证码识别大多是爬虫会遇到的问题,也可以作为图像识别的入门案例。目前通常使用如下几种方法:
| 方法名称 | 相关要点 |
| ------ | ------ |
| tesseract | 仅适合识别没有干扰和扭曲的图片,训练起来很麻烦 |
| 其他开源识别库 | 不够通用,识别率未知 |
| 付费OCR API | 需求量大的情形成本很高 |
| 图像处理+机器学习分类算法 | 涉及多种技术,学习成本高,且不通用 |
| 卷积神经网络 | 一定的学习成本,算法适用于多类验证码 |
这里说一下使用传统的**图像处理和机器学习算法**,涉及多种技术:
1. 图像处理
- 前处理(灰度化、二值化)
- 图像分割
- 裁剪(去边框)
- 图像滤波、降噪
- 去背景
- 颜色分离
- 旋转
2. 机器学习
- KNN
- SVM
使用这类方法对使用者的要求较高,且由于图片的变化类型较多,处理的方法不够通用,经常花费很多时间去调整处理步骤和相关算法。
而使用**卷积神经网络**,只需要通过简单的前处理,就可以实现大部分静态字符型验证码的端到端识别,效果很好,通用性很高。
这里列出目前**常用的验证码**生成库:
>参考:[Java验证全家桶](https://www.cnblogs.com/cynchanpin/p/6912301.html)
| 语言 | 验证码库名称 | 链接 | 样例 |
| ------ | ------ | ------ | ------ |
| Java | JCaptcha | [示例](https://jcaptcha.atlassian.net/wiki/spaces/general/pages/1212427/Samples+tests) | ![效果1](./readme_image/jcaptcha1.jpg) ![效果2](./readme_image/jcaptcha2.jpg) ![效果3](./readme_image/jcaptcha3.jpg) |
| Java | JCaptcha4Struts2 | | |
| Java | SimpleCaptcha | [例子](https://www.oschina.net/p/simplecaptcha) | ![效果1](./readme_image/SimpleCaptcha_1.jpg) ![效果2](./readme_image/SimpleCaptcha_2.jpg) ![效果3](./readme_image/SimpleCaptcha_3.jpg) |
| Java | kaptcha | [例子](https://github.com/linghushaoxia/kaptcha) | ![水纹效果](./readme_image/Kaptcha_5.png) ![鱼眼效果](./readme_image/Kaptcha_2.png) ![阴影效果](./readme_image/Kaptcha_3.png) |
| Java | patchca | | ![效果1](./readme_image/patchca_1.png) |
| Java | imageRandom | | |
| Java | iCaptcha | | ![效果1](./readme_image/iCaptcha.jpg) |
| Java | SkewPassImage | | ![效果1](./readme_image/SkewPassImage.jpg) |
| Java | Cage | | ![效果1](./readme_image/Cage1.jpg) ![效果2](./readme_image/Cage2.jpg) |
| Python | captcha | [例子](https://github.com/nickliqian/cnn_captcha/blob/master/gen_image/gen_sample_by_captcha.py) | ![py_Captcha](./readme_image/py_Captcha-1.jpg) |
| Python | pycapt | [例子](https://github.com/aboutmydreams/pycapt) | ![pycapt](https://github.com/aboutmydreams/pycapt/raw/master/img/do4.png) |
| PHP | Gregwar/Captcha | [文档](https://github.com/Gregwar/Captcha) | |
| PHP | mewebstudio/captcha | [文档](https://github.com/mewebstudio/captcha) | |
## 1.2 目录结构
### 1.2.1 基本配置
| 序号 | 文件名称 | 说明 |
| ------ | ------ | ------ |
| 1 | `conf/` | 配置文件目录 |
| 2 | `sample/` | 数据集目录 |
| 3 | `model/` | 模型文件目录 |
| 4 | `cnnlib/` | 封装CNN的相关代码目录 |
### 1.2.2 训练模型
| 序号 | 文件名称 | 说明 |
| ------ | ------ | ------ |
| 1 | verify_and_split_data.py | 验证数据集、拆分数据为训练集和测试集 |
| 2 | network.py | cnn网络基类 |
| 3 | train_model.py | 训练模型 |
| 4 | test_batch.py | 批量验证 |
| 5 | gen_image/gen_sample_by_captcha.py | 生成验证码的脚本 |
| 6 | gen_image/collect_labels.py | 用于统计验证码标签(常用于中文验证码) |
### 1.2.3 web接口
| 序号 | 文件名称 | 说明 |
| ------ | ------ | ------ |
| 1 | webserver_captcha_image.py | 获取验证码接口 |
| 2 | webserver_recognize_api.py | 提供在线识别验证码接口 |
| 3 | recognize_online.py | 使用接口识别的例子 |
| 4 | recognize_local.py | 测试本地图片的例子 |
| 5 | recognize_time_test.py | 压力测试识别耗时和请求响应耗时 |
## 1.3 依赖
```
pip install -r requirements.txt
```
注意:如果需要使用GPU进行训练,请把文件中的tenforflow修改为tensorflow-gpu
## 1.4 模型结构
| 序号 | 层级 |
| :------: | :------: |
| 输入 | input |
| 1 | 卷积层 + 池化层 + 降采样层 + ReLU |
| 2 | 卷积层 + 池化层 + 降采样层 + ReLU |
| 3 | 卷积层 + 池化层 + 降采样层 + ReLU |
| 4 | 全连接 + 降采样层 + Relu |
| 5 | 全连接 + softmax |
| 输出 | output |
# 2 如何使用
## 2.1 数据集
原始数据集可以存放在`./sample/origin`目录中。
为了便于处理,图片最好以`2e8j_17322d3d4226f0b5c5a71d797d2ba7f7.jpg`格式命名(标签_序列号.后缀)。
如果你没有训练集,你可以使用`gen_sample_by_captcha.py`文件生成训练集文件。
生成之前你需要修改相关配置`conf/captcha_config.json`(路径、文件后缀、字符集等)。
```
{
"root_dir": "sample/origin/", # 验证码保存路径
"image_suffix": "png", # 验证码图片后缀
"characters": "0123456789", # 生成验证码的可选字符
"count": 1000,
没有合适的资源?快使用搜索试试~ 我知道了~
使用tensorflow实现卷积神经网络识别字符型图片验证码项目源码+使用说明
共40个文件
py:14个
jpg:11个
png:8个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 83 浏览量
2023-10-26
16:24:44
上传
评论 1
收藏 349KB ZIP 举报
温馨提示
使用tensorflow实现卷积神经网络识别字符型图片验证码项目源码+使用说明 本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别。 项目封装了比较通用的校验、训练、验证、识别、API模块,极大的减少了识别字符型验证码花费的时间和精力
资源推荐
资源详情
资源评论
收起资源包目录
cnn_captcha-master.zip (40个子文件)
cnn_captcha-master
tools
gen_md_content.py 383B
collect_labels.py 644B
correction_captcha.py 3KB
webserver_recognize_api.py 3KB
readme_image
Kaptcha_5.png 11KB
iCaptcha.jpg 3KB
SimpleCaptcha_1.jpg 10KB
train_acc.png 51KB
patchca_1.png 9KB
bug_api启动失败.png 61KB
Cage1.jpg 2KB
SimpleCaptcha_3.jpg 7KB
SimpleCaptcha_2.jpg 10KB
压力测试结果.png 12KB
jcaptcha1.jpg 28KB
Kaptcha_2.png 26KB
jcaptcha2.jpg 2KB
jcaptcha3.jpg 2KB
py_Captcha-1.jpg 5KB
Kaptcha_3.png 10KB
test_acc.png 64KB
SkewPassImage.jpg 19KB
Cage2.jpg 2KB
webserver_captcha_image.py 2KB
gen_sample_by_captcha.py 2KB
LICENSE 11KB
train_model.py 11KB
recognize_local.py 2KB
cnnlib
network.py 4KB
recognition_object.py 3KB
recognize_time_test.py 2KB
test_batch.py 4KB
requirements.txt 508B
.gitignore 1KB
conf
sample_config.md 1KB
sample_config.json 607B
captcha_config.json 185B
README.md 20KB
recognize_online.py 2KB
verify_and_split_data.py 5KB
共 40 条
- 1
资源评论
- liou4567892024-03-25资源不错,很实用,内容全面,介绍详细,很好用,谢谢分享。
云哲-吉吉2021
- 粉丝: 3981
- 资源: 1129
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功