针对你提供的开源项目,我为你整理了一份专业且易读的点击选择文字验证码识别实战教程。这份教程将复杂的深度学习流程拆解为“检测”与“匹配”两个核心环节,非常适合整合进你的教学案例中。


🎯 深度学习实战:点选验证码识别全流程教程

项目地址:https://github.com/zxinED/Text_select_captcha

1. 核心原理:分治法

点选验证码的识别并不是一步到位的,而是将其拆解为两个经典 CV 问题:

  1. 目标检测 (Target Detection):确定背景图中“字”在哪里(坐标)。
  2. 图像匹配 (Image Matching):利用孪生网络 (Siamese Network) 确定背景图里的字与提示条里的字哪个最相似,从而完成排序。

一、 环境搭建

本项目支持 Windows 环境下的 Python 3.6/3.8/3.10。

# 1. 下载项目并安装依赖
pip install -r requirements.txt

# 2. 验证基础运行
python demo.py

二、 核心环节一:YOLOv5 目标检测

任务:找出图中所有的汉字和目标提示词。

  • 模型选型:采用轻量级的 yolov5s6,兼顾速度与精度。
  • 标注规范
    • char 类别:背景图中需要被点击的文字。
    • target 类别:顶部或底部提示框中作为题目的文字。
  • 训练输出:训练完成后导出为 .onnx 或加密的 .bin 格式。

三、 核心环节二:Siamese 孪生网络匹配

任务:不再识别汉字具体是什么,而是判断两张小图的“相似度”。

  • 原理:将两张图片输入同一个卷积神经网络提取特征向量,计算两者的欧氏距离。距离越近,代表是同一个字的概率越大。
  • 优势
    • 小样本友好:无需收集几千个汉字的数据集,只需训练模型判断“是否相同”。
    • 泛化能力强:即使遇到生僻字,只要模型学会了提取特征,依然能匹配成功。

四、 部署与调用

你可以直接在 Python 脚本中调用,或启动 API 服务。

1. Python 原生调用

from src.captcha import TextSelectCaptcha

# 初始化模型
# sign=True 使用加密模型,sign=False 使用自定义 ONNX
cap = TextSelectCaptcha(per_path='pre_model_v2.bin', yolo_path='best_v2.bin', sign=True)

# 执行识别
result = cap.run("docs/res.jpg")
print(f"点击顺序坐标:{result}")

2. FastAPI 服务化

为了方便你的 Web 平台调用,可以启动后端服务:

python service.py

启动后访问 http://127.0.0.1:8000/docs 即可看到交互式接口文档。


五、 推理加速:为什么选择 ONNX?

本项目将模型转换为 ONNX (Open Neural Network Exchange) 格式,具有以下显著优势:

  • 跨平台:可以在不同框架(PyTorch/TensorFlow)间无缝转换。
  • 低消耗:在 1核2G 的低配服务器上也能流畅运行(300ms 左右)。
  • 高性能:在 CPU 上比原生 PyTorch 运行速度更快。

六、 进阶技巧:防风控点击

识别出坐标后,建议不要直接点击中心点,应配合 DrissionPagePyppeteer 实现真人模拟:

  1. 随机偏移:在识别出的矩形框内随机选择点击点。
  2. 贝塞尔曲线:模拟鼠标从当前位置移动到目标位置的平滑曲线。

💡 教程总结

本教程通过 YOLOv5 定位 + Siamese 匹配 的方案,实现了 96% 以上的高准确率。这种“不识别语义,只识别相似度”的逻辑,是应对多变验证码的高级策略。