验证码识别新革命:源码+通用识别模型
字数 2752 2025-08-15 21:31:29
验证码识别系统全面教学文档
一、项目概述
本项目提供了一套完整的验证码识别解决方案,包括训练框架(captcha_trainer)和部署平台(captcha_platform),以及一个简易的MuggleOCR SDK。系统采用CNN+RNN+CTC(CRNN)架构进行端到端的不定长验证码识别,支持多种网络结构切换,具有以下特点:
- 企业级生产水准,识别率高(简单验证码可达99%)
- CPU部署即可,单次识别平均12ms(腾讯云1核1G机器)
- 操作简单,无需编码基础即可训练模型
- 支持模型热拔插和多模型动态部署
- 提供编译版,免去环境配置烦恼
二、核心组件
1. MuggleOCR SDK
- 体积仅6MB,内置两个通用模型:
- 简单通用验证码模型(识别率95%+)
- 普通OCR模型
- 三行代码即可调用:
with open(r"1.png", "rb") as f:
img_bytes = f.read()
import muggle_ocr
sdk = muggle_ocr.SDK(model_type=muggle_ocr.ModelType.Captcha)
text = sdk.predict(image_bytes=img_bytes)
2. 训练框架(captcha_trainer)
- 支持网络结构:
- CNN5/CNNX(专为验证码优化)
- MobileNet/DenseNet121/ResNet50
- Bi-LSTM/GRU+CTC/CrossEntropy
- 性能指标:
- CNN5+Bi-LSTM+H64+CTC: CPU 5-10ms, GPU 1-2ms, 模型2MB
- CNN5+CrossEntropy: CPU 2-8ms, GPU 0-1ms, 模型1.5MB
3. 部署平台(captcha_platform)
- 支持多种后端:
- Tornado(推荐,最稳定)
- Flask
- Sanic
- gRPC(性能优越)
- 特性:
- 多模型部署
- 模型热拔插
- 版本控制
- 批量识别
- 智能模型分发
三、环境配置
1. 系统要求
- 操作系统:
- Ubuntu 16.04+
- Windows 7 SP1+
- MacOS
2. Python环境
- Python 3.7+
- 核心依赖:
- TensorFlow-GPU 1.15.0(暂不支持2.0+)
- OpenCV-Python 4.2.0.34
- Numpy 1.18.4+
- Pillow 7.1.2+
推荐使用虚拟环境:
virtualenv -p /usr/bin/python3 venv
source venv/bin/activate
pip install -r requirements.txt
3. CUDA/cuDNN配置
Ubuntu 16.04:
- 下载runfile格式的驱动和CUDA 9.0
- 关闭图形界面:
sudo service lightdm stop - 安装驱动:
sudo chmod a+x NVIDIA-Linux-x86_64-*.run
sudo ./NVIDIA-Linux-x86_64-*.run --no-x-check --no-nouveau-check --no-opengl-files
- 安装CUDA:
sudo sh cuda_9.0.176_384.81_linux.run
- 配置环境变量(~/.bashrc):
export PATH=/usr/local/cuda-9.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
Windows:
- 安装CUDA 10.0,不安装驱动和VS组件
- 下载对应cuDNN替换到CUDA安装目录
四、训练配置
1. 样本准备
- 命名格式:
标签_随机数.png(如:AB12_123456789.png) - 样本量建议:
- 简单特征(1-2种干扰):几百-几千
- 复杂特征(3种+干扰):几万-几十万
- 中文验证码:10w+起步
2. 配置文件关键参数
神经网络区:
ModelName: 项目名称Network: 网络选择(CNNX/ResNet50等)Decoder: 解码器类型(CTC/CrossEntropy)NeuronNum: RNN隐藏神经元数量(如64)
样本源配置区:
TrainPath: 训练样本路径ValidationPath: 验证样本路径(可选)ValidationSetNum: 验证集数量(默认300)
训练配置区:
TestNum: 测试数量BatchSize: 批次大小LearningRate: 学习率Epochs: 训练轮次
高级配置:
Category: 字符集定义- 默认:
ALPHANUMERIC_LOWER(不区分大小写) - 自定义:
['你','好','世','界']
- 默认:
ImageWidth/Height: 图片尺寸Pretreatment: 预处理方法ConcatFrames: GIF帧拼接BlendFrames: GIF帧融合
3. 训练流程
- 配置神经网络参数
- 设置项目名称
- 指定样本路径
- 配置训练参数
- 点击"Make Dataset"打包样本
- 点击"Start Training"开始训练
4. 样本复杂度评估
影响样本量的特征复杂度指标:
- 变形程度
- 旋转角度
- 模糊程度
- 背景干扰
- 前景干扰
- 字体种类
- 验证码位数
- 字符集大小
五、模型部署
1. 服务部署方式
Linux:
# Tornado(端口19952)
python3 tornado_server.py
# Flask(端口19951)
python flask_server.py
# 或使用gunicorn:
gunicorn -c deploy.conf.py flask_server:app
# Sanic(端口19953)
python3 sanic_server.py
# gRPC(端口50054)
python3 grpc_server.py
# 编译版
./captcha_platform_tornado
Windows:
直接运行对应server.py文件
2. API调用示例
Tornado/Flask/Sanic:
- 请求URL:
http://127.0.0.1:端口/captcha/v1 - 方法: POST
- Content-Type: application/json
- 请求体:
{
"image": "iVBORw0KGgoAAAAN...base64编码图像",
"model_name": "可选模型名",
"output_split": "多标签分隔符"
}
- 响应:
{
"message": "识别结果",
"code": 0,
"success": true,
"uid": "请求ID"
}
gRPC调用:
from grpc_pb2 import PredictRequest
from grpc_pb2_grpc import PredictStub
channel = grpc.insecure_channel('localhost:50054')
stub = PredictStub(channel)
response = stub.predict(PredictRequest(
image=base64_image,
split_char=',',
model_type='model_name'
))
3. 模型管理
- 添加模型:
- 将pb模型放入
graph路径 - 将yaml配置放入
model路径
- 将pb模型放入
- 卸载模型:
- 删除对应的yaml和pb文件
- 更新模型:
- 先放新pb模型,再放新yaml配置
六、高级技巧
1. 批量识别配置
通过FieldParam/CorpParams参数实现图片切割批量识别:
FieldParam:
CorpParams:
- start_pos: [118, 0] # 起始坐标
interval_size: [0, 0] # 间隔
corp_num: [1, 1] # 切割数量
corp_size: [60, 30] # 切割尺寸
- start_pos: [5, 40]
interval_size: [5, 5]
corp_num: [4, 2]
corp_size: [66, 66]
OutputCoord: True
2. 彩色验证码处理方案
-
颜色提取法:
- 使用HSV/K-means聚类分离颜色
- 弊端:特征丢失,识别率瓶颈约90%
-
不分离颜色方案:
- 方案1:同时预测颜色和内容(成本高,需人工标注)
- 方案2:每种颜色单独训练模型(成本中等)
- 方案3:所有颜色转换为一种颜色(最佳方案)
- 将不同颜色通过算法统一为一种颜色
- 样本成本最低,识别率98%+
- CPU识别时间5-8ms,模型大小3MB
七、资源链接
- 训练项目源码: https://github.com/kerlomz/captcha_trainer
- 部署项目源码: https://github.com/kerlomz/captcha_platform
- MuggleOCR PyPI: https://pypi.org/project/muggle-ocr
- 示例数据集: https://share.weiyun.com/5pzGF4V
八、注意事项
-
Windows服务器版使用编译版闪退时:
- 通过CMD运行查看报错
- 如报错
cv2 ImportError: Dll load failed:- 进入"我的电脑"-"属性"-"管理"
- "添加角色和功能"
- 勾选"桌面体验"并安装
- 重启系统
-
样本命名规范:
- 单标签:
标签_随机数.png(如:飞机_0123456789012.png) - 多标签:
标签1&标签2&标签3_随机数.png(如:飞机&鞋子&水杯_1231290424123.png)
- 单标签:
-
样本量最低要求:
- 不得少于一个Batch Size
- 建议至少满足1000+样本量