基于深度学习的空间逻辑推理验证码系统,100% 离线运行。
模型接收验证码图片 + 文字指令(如「点击图中最小的红色球体」),输出目标坐标 (x, y)。
图片(600x300) → 轻量CNN → 256维图像特征 ┐
├→ FC → (x, y)
指令文本 → 字嵌入 + Conv1d → 96维文本特征 ┘
在 2000 张样本(85/15 划分)上:
| 指标 | 数值 |
|---|---|
| 平均像素误差 | 7.99 px |
| 中位数 | 6.71 px |
| P95 | 16.01 px |
| 准确率 @ 30px | 99.0% |
| 准确率 @ 40px | 100% |
按颜色 / 形状分组均在 98%+ @30px。详见 eval_model.py。
# 1. 安装依赖 (NVIDIA GPU 推荐)
pip install -r requirements.txt
# GPU 版 PyTorch (CUDA 12.6):
pip install torch torchvision -f https://mirrors.aliyun.com/pytorch-wheels/cu126
# 2. 训练 (默认使用 cuda:0)
python train_model.py --epochs 30 --batch 64 --gpu 0
# 3. 评估准度
python eval_model.py
# 4. 启动服务
python app.py仅 CPU 也可运行:
python train_model.py(自动回退到 CPU)
train_model.py
| 参数 | 默认 | 说明 |
|---|---|---|
--data |
spatial_data |
数据目录 |
--epochs |
30 |
训练轮数 |
--batch |
64 |
批大小 |
--lr |
2e-3 |
学习率 |
--gpu |
0 |
GPU 索引(无 CUDA 时回退 CPU) |
predict.py
python predict.py --image path/to.jpg --order "点击图中最小的红色球体"
python predict.py --test # 全量测试, 输出平均误差| 方法 | 路径 | 说明 |
|---|---|---|
| GET | / |
验证码页面 |
| GET | /review |
CV 检测结果审查页 |
| GET | /api/next |
获取验证码 {image, order} |
| GET | /api/image/{name} |
获取图片 |
| POST | /api/verify |
验证 {x, y, image, order} → {ok, dist} |
| 文件 | 说明 |
|---|---|
app.py |
Flask Web 服务(含页面 + API + CV 兜底) |
train_model.py |
模型定义 + 训练(支持 GPU/AMP) |
predict.py |
模型推理 |
eval_model.py |
准度评估(容差/分组统计) |
spatial_solver.py |
CV 求解器(标注与服务端兜底) |
captcha_generator.py |
本地验证码生成器(脱离外部 API) |
spatial_data/ |
数据集(dataset.json + images/)+ 预训练 model.pt |
- Python 3.10+(在 3.13 + PyTorch 2.13 + CUDA 12.6 上测试通过)
- 推荐 NVIDIA GPU(DirectML / CPU 也兼容)
- 显存 ≥ 2GB(batch=64 时占用约 500MB)
MIT