目录
一、背景
在项目进行中,遇到了一个比较棘手的问题,爬虫遇到网站有验证码识别校验的情况。当时第一步是寻找了相关的python识别包直接去识别,第一个找的就是paddleocr这个包,但效果不是很好。可能是因为验证码图片上的干扰线太多导致的。调研后跟着也官方文档尝试了一下paddleocr的训练。
二、训练流程
2.1、下载paddleocr项目
两种方式,从GitHub上克隆paddleocr的项目到本地或者从GitHub上下载zip包再解压
git clone http://github.com/PaddlePaddle/PaddleOCR.git
2.2、创建相关文件夹
paddleocr
pretrain_models
tranMyOCR
rec
test
xxx.png
train
xxx1.png
xxx2.png
codeChar.txt
rec_gt_train.txt
rec_gt_test.txt
其中:
pretrain_models文件夹存放下载的预训练模型;
paddleocr是克隆下来的项目文件夹;
tranMyOCR是我们训练主文件夹;
rec文件夹用来标识我们训练的模型类别,常用的有det、cls、rec等;
test文件夹下存放验证集;
train文件夹下存放训练集;
codeChar.txt是所有希望能被正确识别的字符;
rec_gt_train.txt列出了所有训练集数据与标签集合;
xxx.jpg 1a4d
rec_gt_test.txt列出了所有测试集数据与标签集合;
test文件夹下存放验证集:
train文件夹下存放训练集:
codeChar.txt文件内容:
./tranMyOCR/rec/train/
rec_gt_train.txt文件内容:
rec_gt_test.txt文件内容:
2.3、下载rec预训练模型
本文示例使用的是en_pp-ocrv3_rec版本的实验的,可能v4版本效果更好,需要自行去尝试。下载后移入到事先建好的pretrain_models文件夹下,再解压即可。
https://paddleocr.bj.bcebos.com/PP-OCRv3/english/en_PP-OCRv3_rec_train.tar
2.4、修改训练配置文件
rec模型训练配置文件路径:./configs/rec/PP-OCRv3 下的en_PP-OCRv3_rec.yml文件,同目录下有中文、英文分别。不明白有什么区别,不过我想既然要训练的是字符验证码,那肯定是要使用英文模型训练配置文件。
配置文件中涉及到修改的参数有:
Global:
use_gpu:是否开启GPU训练
epoch_num:训练轮数
print_batch_step:多少轮输出一次日志
save_model_dir:最终模型保存路径
save_epoch_step:多少轮保存一次模型
eval_batch_step:一个区间,没搞懂
pretrained_model:预训练模型路径
save_inference_dir:导出inference模型路径,导出时候需要用到
character_dict_path:字符字典路径
use_space_char:是否正常识别空格
Train:
dataset:
data_dir:训练集数据文件夹
label_file_list:训练标签文件路径,也就是rec_gt_train.txt文件的路径
loader:
shuffle: false
batch_size_per_card: 每轮训练数量吧
drop_last: false
num_workers: 指定多少个线程训练吧
Eval:
dataset:
data_dir:验证集数据文件夹
label_file_list:验证标签文件路径,也就是rec_gt_test.txt文件的路径
2.5、训练
进入到paddleocr项目文件夹下,打开命令行后执行训练命令。
# 训练
python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_new.yml
# 若训练配置文件没有配置pretrained_model
python tools/train.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy
2.6、保存inference
训练完成后的保存到save_model_dir配置下的模型不能直接使用,需要转换成inference模型后,才能让paddleocr使用。打开命令行执行下面转换命令即可。
# 导出inference模型
python tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml
# 若训练配置文件没有配置pretrained_model、save_inference_dir
python tools/export_model.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy Global.save_inference_dir=./inference/rec_crnn/
2.7、预测
# 识别图片
python tools/infer_rec.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml Global.infer_img=./tranMyOCR/rec/test/gz4a.png
# 若训练配置文件没有配置pretrained_model
python tools/infer_rec.py -c configs/rec/PP-OCRv3/en_PP-OCRv3_rec_zk.yml -o Global.pretrained_model=./pretrain_models/en_PP-OCRv3_rec_train/best_accuracy Global.infer_img=./tranMyOCR/rec/test/gz4a.png