/Chinese_Captcha_Recognizition

本项目会自己训练OCR模型,来模型汉字验证码,包含1-n个汉字的验证码。

Primary LanguagePython

本项目主要使用CnOCR来训练自己的OCR模型,用于汉字验证码破解。

验证码介绍

三汉字验证码

  1. 生成验证码,使用脚本生成,参考src/preprocess/gen_captcha_v1.py文件,完整数据参考data/corpus文件夹
  2. 验证码样本如下:

4003.jpg

三汉字验证码共标注9033个样本,按训练集与验证集8:2划分,其中训练集样本7162个,验证集样本1827个。

四汉字验证码

  1. 生成验证码,使用脚本生成,参考src/preprocess/gen_captcha_v2.py文件,完整数据参考data/4char_corpus文件夹
  2. 验证码样本如下:

四汉字验证码共标注2047个样本,按训练集与验证集8:2划分,其中训练集样本1646个,验证集样本399个。

破解思路

  1. 利用Label Studio标注平台或者自己写的标注平台来人工标注验证码
  2. 保证标注的数据集的数量与质量,一般汉字验证码需要几千个以上的标注样本
  3. 使用CnOCR来训练自己的OCR模型
  4. 使用训练好的模型来识别验证码

模型训练

使用CnOCR工具包来训练自己的OCR模型,主要步骤如下:

  1. 对图片进行标注,形成标注数据,标注平台可以使用Label Studio或者自己写的标注平台(参考src/image_tagging目录)
  2. 使用src/prepocess/get_train_val_data.py得到训练数据train.tsv与验证数据dev.tsv
  3. 模型训练命令:
cnocr train -m densenet_lite_136-gru --index-dir data/4char_captcha --train-config-fp docs/examples/train_config_gpu.json

模型效果验证

导出onnx模型,命令如下:

cnocr export-onnx -m densenet_lite_136-gru -v /workspace/code/CnOCR/data/4char_captcha/label.txt -i /workspace/code/CnOCR/runs/CnOCR-Rec/pgyahgqm/checkpoints/cnocr-v2.3-densenet_lite_136-gru-epoch=093-val-complete_match-epoch=0.9148.ckpt -o /workspace/code/CnOCR/runs/CnOCR-Rec/pgyahgqm/checkpoints/ch_captcha.onnx

模型评估,命令如下:

cnocr evaluate -p /workspace/code/CnOCR/runs/CnOCR-Rec/pgyahgqm/checkpoints/ch_captcha.onnx -v /workspace/code/CnOCR/data/4char_captcha/label.txt -i ./data/4char_captcha/dev.tsv --image-folder ./data/4char_captcha/4char_corpus
验证码类型 验证码数量 正确率 cer
三汉字 1827 91.24% 0.032
四汉字 399 88.72% 0.031

可视化: OCR识别页面

功能:实现验证码图片的上传与OCR识别

验证码上传与识别页面

参考网站

  1. CnOCR脚本工具: https://cnocr.readthedocs.io/zh-cn/stable/command/
  2. OCR入门(一)OCR模型训练实战:破解汉字验证码: https://zhuanlan.zhihu.com/p/2845583696