本项目针对分布式爬虫在实际运行中频繁遭遇的验证码拦截问题,构建了一套轻量化、本地可部署、专用于特定网站验证码识别的完整解决方案。
采用**“两阶段识别”**架构,将复杂的验证码识别任务拆解为:
- 定位 (Where):使用 YOLOv8 模型进行目标检测,精确定位验证码中每一个字符的边界。
- 识别 (What):利用由 dddd_trainer 训练出来的轻量化 CNN 模型对切割后的单字符进行分类识别。
相比直接端到端识别方案,“先分割再识别”显著降低了对训练样本量的需求,在小样本场景(600-1000张标注图)下即可达到极高的识别准确率。
Captcha_kill/
├── app.py # FastAPI 后端推理服务
├── app.yaml # 模型与路径配置文件
├── Front_page/ # Web 前端界面 (index.html, JS, CSS)
├── handle_code/ # YOLO 训练、数据集生成与预处理脚本
├── dddd_trainer/ # OCR 训练框架 (基于 ddddocr)
└── data/ # (可选) 数据集存放目录
建议使用 Python 3.8+,执行以下命令安装依赖:
pip install -r requirements.txt修改 Captcha_kill/app.yaml 文件中的模型路径。项目默认使用相对路径,请确保已下载所需的模型权重文件。
python Captcha_kill/app.py启动成功后,在浏览器访问 http://localhost:5000 即可进入可视化识别界面。
如果您需要针对新的验证码样式进行训练,可参考以下流程:
- 数据生成/采集:通过
handle_code/gptapi.py或网页抓取获取验证码。 - YOLO 训练:
- 使用标注工具标注字符位置。
- 运行
handle_code/train_yolo.py训练分割模型。
- 单字符切分:运行
handle_code/infer_and_crop.py使用训练好的 YOLO 模型自动切分出单字符数据集。 - OCR 训练:
- 利用切分出的单字符数据,在
dddd_trainer下运行项目。 - 训练并导出 ONNX 模型与二进制字符集。
- 利用切分出的单字符数据,在
- 轻量化:模型体积小,可在普通 CPU 环境下实现秒级推理。
- 高精度:两阶段架构避免了由于字符粘连、背景干扰导致的序列识别错误。
- 低成本:通过 YOLO 自动切片,使得 OCR 训练集能以 4-6 倍速度扩增,极大降低人工标注成本。