Skip to content

Altria-Pendr/CaptchaCodeRecognizeForLidaUniversity-yinghua-

Repository files navigation

本仓库内代码是用于解决以下网站的图形验证码 https://lidapoly.haiqikeji.com/ https://lidapoly.leykeji.com/ https://lidapoly.zjxkeji.com/ 等yinghua推出的网课平台验证码 准确率如果粗略看待有百分之98左右

Python 验证码识别仓库

当前默认方案是固定尺寸验证码上的 CNN + 多个字符分类头

  • 输入尺寸固定为 90x40
  • 标签从文件名前缀读取,例如 abcd_1775923311005.jpg
  • 默认字符集是 0-9a-z
  • 当前公开训练集与验证集都是 4 位验证码
  • 模型产物只保留 PyTorch checkpoint,即 .pt

目录结构

github_python_captcha_ocr/
  captcha_ocr/
    __init__.py
    checkpoint.py
    config.py
    data.py
    decoding.py
    losses.py
    model.py
    training.py
  data/
    train/
    validation/
  models/
    best_4digit.pt
  train_cnn_heads.py
  validate_cnn_heads.py
  requirements.txt
  README.md

数据说明

本目录内的数据已经按用途整理好:

  • data/train/:训练集,来源于原始目录中的 img/
  • data/validation/:验证集,来源于原始目录中的 check/

文件命名规则:

<label>_<timestamp>.jpg

例如:

fanb_1775843643468.jpg

其中:

  • fanb 是标签
  • _ 后面的数字只是时间戳或样本标识

脚本默认只读取 .jpg 文件,并从文件名前缀提取标签。

环境安装

建议先进入本目录,再安装依赖:

pip install -r requirements.txt

依赖只包含训练和推理必须项:

  • torch
  • numpy
  • pillow

快速训练

快速冒烟:

python train_cnn_heads.py --epochs 1 --max-samples 256 --batch-size 64

默认行为:

  • 训练集来自 data/train
  • 验证集来自 data/validation
  • 默认只保留 4 位标签样本
  • 最优模型保存到 models/best_4digit.pt

正式训练

python train_cnn_heads.py --epochs 20 --batch-size 64 --output models/best_4digit.pt

如果你想启用轻量增强:

python train_cnn_heads.py --epochs 20 --batch-size 64 --augment

训练日志中最重要的内容是:

  • Saved best checkpoint to ...
  • 最后打印的 Best val_exact=... from epoch ...

因为实际保存的是验证集指标最好的 checkpoint,不一定是最后一轮。

验证模型

python validate_cnn_heads.py --weights models/best_4digit.pt --data-dir data/validation

验证脚本会输出:

  • Loss
  • Exact match
  • Char accuracy
  • Length accuracy
  • 部分错误样例

如果只想做一次小规模检查:

python validate_cnn_heads.py --weights models/best_4digit.pt --data-dir data/validation --max-samples 64

单图预测

从验证集中选一张图片:

python train_cnn_heads.py --predict data/validation\\114j_1775919971174.jpg --weights models/best_4digit.pt

输出格式:

Prediction: 114j

常用训练参数

train_cnn_heads.py 里常用的参数如下:

  • --data-dir:训练集目录,默认 data/train
  • --val-data-dir:验证集目录,默认 data/validation
  • --epochs:训练轮数
  • --batch-size:批大小
  • --max-samples:只取部分训练样本做快速实验
  • --augment:开启轻量增强
  • --output:最优 checkpoint 输出路径
  • --resume-from:从已有 checkpoint 恢复训练
  • --device:强制指定 cpucuda

实现说明

当前实现保留了两个模式:

  • 固定长度模式
    • 默认开启
    • 只训练长度等于 --max-length 的样本
    • 当前公开数据默认就是这个模式
  • 可变长度模式
    • 使用 --no-exact-length-only 打开
    • 会启用长度头和对齐感知损失
    • 适合未来接入含 3 位或混合长度样本的数据

模型内部使用 PAD 类来表示某些字符头位置上没有字符,这样同一个结构也能兼容较短标签。

常见问题

No usable images found under ...

  • 检查数据目录是否存在
  • 检查目录中是否是 .jpg 文件
  • 检查文件名是否符合 <label>_<timestamp>.jpg
  • 检查标签字符是否只包含数字和小写字母

train_cnn_heads.py 训练时报显存不足

  • 降低 --batch-size
  • 改用 --device cpu

验证指标比训练时低很多

  • 先确认使用的是 models/best_4digit.pt
  • 再确认验证目录是否为 data/validation
  • 如果训练时开了增强,验证阶段属于关闭增强的正常行为

About

this is used to recognize Yinghua System or Shanghai Lida University online lesson

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages