深度学习识别文字验证码

深度学习验证码识别

项目地址:https://github.com/MgArcher/VerificationCodeRecognition/edit/master/README.md

1. 技术背景

本系统采用 CRNN (Convolutional Recurrent Neural Network) 架构。它结合了卷积神经网络(CNN)提取视觉特征、循环神经网络(RNN)处理序列特征,并使用 CTC Loss 解决变长字符序列的对齐问题。


2. 环境准备

确保你的开发环境满足以下要求:

  • Python: 3.6+
  • 深度学习框架: PyTorch 2.0+
  • 推理加速: ONNX Runtime
# 克隆仓库后安装依赖
pip install -r requirements.txt

3. 数据集准备

验证码识别属于监督学习,需要带标签的数据。

  • 获取数据:可以下载预设数据集
  • 数据存放:将图片放入 data 文件夹。
  • 命名规范:图片采用 标签_唯一标识.jpg 命名(例如:aqqh_157845.jpg)。
  • 自定义读取:如需更改读取逻辑,请修改 tool/dataloader.py

4. 模型训练 (Training)

训练过程会自动记录准确率(acc)和损失值(total_loss)。

核心配置 (train.py):

class Opt():
    trainRoot = r"data"         # 训练集路径
    cuda = True                # 是否使用 GPU 加速
    pretrained = ''            # 预训练模型路径(断点续训)
    alphabet_path = 'tool/charactes_keys.txt' # 字符字典

执行训练:

python train.py

提示:训练过程中,当 acc 接近 100% 且 val_acc(验证集准确率)稳定时,模型即可停止训练。


5. 推理与部署 (Inference)

A. 原生 PyTorch 推理

直接加载 .pth 权重文件进行识别,适合开发阶段调试。

python var_torch.py
  • 耗时参考:约 31ms。

B. 模型转换与 ONNX 加速

为了提高生产环境的响应速度,我们将模型转换为 ONNX 格式,这能显著降低推理耗时(从 30ms 提升至 8ms 左右)。

1. 导出 ONNX 模型:

python export.py

2. 使用 ONNX 推理:

python var_onnx.py

6. 实现原理深度解析

  1. 特征提取:通过 CNN 层对输入的验证码图片进行缩放和特征映射。
  2. 序列建模:双向 LSTM (Bi-LSTM) 捕捉字符之间的上下文关系。
  3. CTC 解码
    • 训练时:自动计算预测序列与真实标签的损失,无需对字符进行手动分割。
    • 推理时:将模型输出的冗余序列(如 ----aa----qq----)合并为最终结果(aqqh)。

💡 进阶小贴士

  • 字符字典:如果你的验证码包含特殊符号或中文,请务必更新 tool/charactes_keys.txt
  • 推理性能:在 CPU 环境下,ONNX 的性能通常优于原生 PyTorch 3~4 倍。
  • 数据增强:如果识别率遇到瓶颈,尝试在 dataloader.py 中增加随机噪声或仿射变换。