# cnn_captcha
use CNN recognize captcha by tensorflow.
本项目针对字符型图片验证码,使用tensorflow实现卷积神经网络,进行验证码识别。
项目封装了比较通用的**校验、训练、验证、识别、API模块**,极大的减少了识别字符型验证码花费的时间和精力。
# 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) |
| PHP | Gregwar/Captcha | [文档](https://github.com/Gregwar/Captcha) | |
| PHP | mewebstudio/captcha | [文档](https://github.com/mewebstudio/captcha) | |
## 1.2 目录结构
### 1.2.1 基本配置
| 序号 | 文件名称 | 说明 |
| ------ | ------ | ------ |
| 1 | sample.py | 配置文件 |
| 2 | sample文件夹 | 存放数据集 |
| 3 | model文件夹 | 存放模型文件 |
### 1.2.2 训练模型
| 序号 | 文件名称 | 说明 |
| ------ | ------ | ------ |
| 1 | verify_and_split_data.py | 验证数据集和拆分数据为训练集和测试集 |
| 2 | train_model.py | 训练模型 |
| 3 | train_model_v2.py | 训练模型,训练过程中同时输出训练集和验证集的准确率,推荐使用此种方式训练 |
| 4 | test_batch.py | 批量验证 |
| 5 | gen_image/gen_v_code_1_1.py/ | 生成验证码的脚本 |
| 6 | gen_image/collect_labels.py | 用于统计验证码标签(常用于中文验证码) |
### 1.2.3 web接口
| 序号 | 文件名称 | 说明 |
| ------ | ------ | ------ |
| 1 | recognition_object.py | 封装好的识别类 |
| 2 | recognize_api.py | 使用flask写的提供在线识别功能的接口 |
| 3 | recognize_online.py | 使用接口识别的例子 |
| 4 | recognize_local.py | 测试本地图片的例子 |
| 5 | recognize_time_test.py | 压力测试识别耗时和请求响应耗时 |
## 1.3 依赖
```
pip3 install tensorflow==1.7.0 flask==1.0.2 requests==2.19.1 Pillow==4.3.0 matplotlib==2.1.0 easydict==1.8
```
## 1.4 模型结构
| 序号 | 层级 |
| :------: | :------: |
| 输入 | input |
| 1 | 卷积层 + 池化层 + 降采样层 + ReLU |
| 2 | 卷积层 + 池化层 + 降采样层 + ReLU |
| 3 | 卷积层 + 池化层 + 降采样层 + ReLU |
| 4 | 全连接 + 降采样层 + Relu |
| 5 | 全连接 + softmax |
| 输出 | output |
# 2 如何使用
## 2.1 数据集
原始数据集可以存放在`./sample/origin`目录中
为了便于处理,图片最好以`ASCBEF.jpg`格式命名(标签.后缀)
如果你没有训练集,你可以使用`gen_v_code_1_1.py`文件生成训练集文件。
生成之前你需要修改相关配置(路径、文件后缀、字符集等)。
## 2.2 配置文件
创建一个新项目前,需要自行**修改相关配置文件**
```
图片文件夹
sample_conf.origin_image_dir = "./sample/origin/" # 原始文件
sample_conf.train_image_dir = "./sample/train/" # 训练集
sample_conf.test_image_dir = "./sample/test/" # 测试集
sample_conf.api_image_dir = "./sample/api/" # api接收的图片储存路径
sample_conf.online_image_dir = "./sample/online/" # 从验证码url获取的图片的储存路径
# 模型文件夹
sample_conf.model_save_dir = "./model/" # 训练好的模型储存路径
# 图片相关参数
sample_conf.image_width = 200 # 图片宽度
sample_conf.image_height = 60 # 图片高度
sample_conf.max_captcha = 6 # 验证码字符个数
sample_conf.image_suffix = "jpg" # 图片文件后缀
# 验证码字符相关参数
# 验证码识别结果类别
sample_conf.char_set = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
```
具体配置的作用会在使用相关脚本的过程中提到
关于`验证码识别结果类别`,假设你的样本是中文验证码,你可以使用`gen_image/collect_labels.py`脚本进行标签的统计。
会生成文件`gen_image/labels.json`存放所有标签,在配置文件中设置`use_labels_json_file = True`开启读取`labels.json`内容作为`结果类别`。
## 2.3 验证和拆分数据集
此功能会校验原始图片集的尺寸和测试图片是否能打开,并按照19:1的比例拆分出训练集和测试集。
所以需要分别创建和指定三个文件夹:origin,train,test用于存放相关文件。
也可以修改为不同的目录,但是最好修改为绝对路径。
文件夹创建好之后,执行以下命令即可:
```
python3 verify_and_split_data.py
```
一般会有类似下面的提示
```开始校验原始图片集
Total image count: 10094
====以下4张图片有异常====
[第2123张图片] [325.txt] [文件后缀不正确]
[第3515张图片] [_15355300508855503.gif] [图片标签异常]
[第6413张图片] [qwer_15355300721958663.gif] [图片尺寸异常为:(50, 50)]
[第9437张图片] [abcd_15355300466073782.gif] [图片无法正常打开]
========end
开始分离原始图片集为:测试集(5%)和训练集(95%)
共分配10090张图片到训练集和测试集,其中4张为异常留在原始目录
测试集数量为:504
训练集数量为:9586
```
## 2.4 训练模型
创建好训练集和测试集之后,就可以开始训练模型了。
训练的过程中会输出日志,日志展示当前的训练轮数、准确率和loss
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源内项目代码都是经过测试运行成功,功能正常的情况下才上传的,请放心下载使用。 2、适用人群:主要针对计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、数学、电子信息等)的同学或企业员工下载使用,具有较高的学习借鉴价值。 3、不仅适合小白学习实战练习,也可作为大作业、课程设计、毕设项目、初期项目立项演示等,欢迎下载,互相学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
基于机器学习的调用验证码算法完整源码+说明.zip (2000个子文件)
checkpoint 67B
checkpoint 67B
test.html 256B
jcaptcha1.jpg 28KB
jcaptcha1.jpg 28KB
SkewPassImage.jpg 19KB
SkewPassImage.jpg 19KB
SimpleCaptcha_1.jpg 10KB
SimpleCaptcha_1.jpg 10KB
SimpleCaptcha_2.jpg 10KB
SimpleCaptcha_2.jpg 10KB
SimpleCaptcha_3.jpg 7KB
SimpleCaptcha_3.jpg 7KB
py_Captcha-1.jpg 5KB
py_Captcha-1.jpg 5KB
image_original_121212.jpg_d375e72d-c8f9-47c9-b762-b243937a2458.jpg 4KB
image_original_121212.jpg_5dcc086e-61ca-4742-ab57-ba91a3df2bc6.jpg 4KB
image_original_PUCL3T.jpg_84757c82-e216-48f8-92a5-9c7f7507932d.jpg 3KB
image_original_0DQ9CE.jpg_60e76e12-0283-4d9e-98a0-2eb94b0d06d8.jpg 3KB
image_original_121212.jpg_0dde433d-f51f-498f-a432-15e0451caa68.jpg 3KB
iCaptcha.jpg 3KB
iCaptcha.jpg 3KB
image_original_121212.jpg_6f3ce39f-7286-4bc0-8c8a-7b1b2ba6f856.jpg 3KB
Cage1.jpg 2KB
Cage1.jpg 2KB
jcaptcha3.jpg 2KB
jcaptcha3.jpg 2KB
Cage2.jpg 2KB
Cage2.jpg 2KB
jcaptcha2.jpg 2KB
jcaptcha2.jpg 2KB
13.js 4KB
LICENSE 11KB
README.md 12KB
README.md 12KB
bug_api启动失败.png 61KB
bug_api启动失败.png 61KB
Kaptcha_2.png 26KB
Kaptcha_2.png 26KB
压力测试结果.png 12KB
压力测试结果.png 12KB
Kaptcha_5.png 11KB
Kaptcha_5.png 11KB
Kaptcha_3.png 10KB
Kaptcha_3.png 10KB
patchca_1.png 9KB
patchca_1.png 9KB
够.png 3KB
傲.png 3KB
傻.png 3KB
减.png 2KB
参.png 2KB
嗓.png 2KB
侥.png 2KB
墩.png 2KB
侈.png 2KB
努.png 2KB
嗡.png 2KB
啄.png 2KB
健.png 2KB
修.png 2KB
奴.png 2KB
哟.png 2KB
她.png 2KB
唆.png 2KB
众.png 2KB
勉.png 2KB
嗽.png 2KB
冰.png 2KB
圾.png 2KB
妓.png 2KB
哦.png 2KB
咳.png 2KB
依.png 2KB
凳.png 2KB
刻.png 2KB
奖.png 2KB
伙.png 2KB
劝.png 2KB
务.png 2KB
仪.png 2KB
券.png 2KB
哆.png 2KB
嘛.png 2KB
吻.png 2KB
做.png 2KB
域.png 2KB
场.png 2KB
发.png 2KB
傀.png 2KB
嘴.png 2KB
剿.png 2KB
伪.png 2KB
乘.png 2KB
妆.png 2KB
俩.png 2KB
侩.png 2KB
俭.png 2KB
佬.png 2KB
喊.png 2KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
龙年行大运
- 粉丝: 1002
- 资源: 3854
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功