基于 PaddleOCR 的多视角集装箱箱号检测识别
基于 PaddleOCR 的多视角集装箱箱号检测识别
一、项目介绍
集装箱号是指装运出口货物集装箱的箱号,填写托运单时必填此项。标准箱号构成基本概念:采用 ISO6346(1995)标准
标准集装箱箱号由 11 位编码组成,如:CBHU 123456 7,包括三个部分:
第一部分由 4 位英文字母组成。前三位代码主要说明箱主、经营人,第四位代码说明集装箱的类型。列如 CBHU 开头的标准集装箱是表明箱主和经营人为中远集运
第二部分由 6 位数字组成。是箱体注册码,用于一个集装箱箱体持有的唯一标识
第三部分为校验码由前 4 位字母和 6 位数字经过校验规则运算得到,用于识别在校验时是否发生错误。即第 11 位编号
本教程基于PaddleOCR进行集装箱箱号检测识别任务,使用少量数据分别训练检测、识别模型,最后将他们串联在一起实现集装箱箱号检测识别的任务
效果展示:
二、环境准备
首先点击左侧套件选择 PaddleOCR 进行下载。
三、数据集介绍
本教程所使用的集装箱箱号数据集,该数据包含 3003 张分辨率为 1920×1080 的集装箱图像
1、PaddleOCR 检测模型训练标注规则如下,中间用"\t"分隔:
其中 json.dumps 编码前的图像标注信息是包含多个字典的 list,字典中的 points 表示文本框的四个点的坐标(x, y),从左上角的点开始顺时针排列。 transcription 表示当前文本框的文字,当其内容为“###”时,表示该文本框无效,在训练时会跳过。
2、PaddleOCR 识别模型训练标注规则如下,中间用"\t"分隔:
四、数据整理
4.1 检测模型所需数据准备
将数据集 3000 张图片按 2:1 划分成训练集和验证集,运行以下代码
4.2 识别模型所需数据准备
我们根据检测部分的注释,裁剪数据集尽可能只包含文字部分图片作为识别的数据,运行以下代码
五、实验
由于数据集比较少,为了模型更好和更快的收敛,这里选用 PaddleOCR 中的 PP-OCRv3 模型进行检测和识别。PP-OCRv3 在 PP-OCRv2 的基础上,中文场景端到端 Hmean 指标相比于 PP-OCRv2 提升 5%, 英文数字模型端到端效果提升 11%。详细优化细节请参考 PP-OCRv3 技术报告。
5.1 检测模型
5.1.1 检测模型配置
PaddleOCR 提供了许多检测模型,在路径PaddleOCR-2.6.0/configs/det
下可找到模型及其配置文件。如我们选用模型ch_PP-OCRv3_det_student.yml
,其配置文件路径在:PaddleOCR-2.6.0/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml
。使用前需对其进行必要的设置,如训练参数、数据集路径等。将部分关键配置展示如下:
文件直接放在更目录里,自行替换即可 /home/aistudio/ch_PP-OCRv3_det_student.yml
5.1.2 模型微调
在 notebook 中运行如下命令对模型进行微调,其中 -c 传入的为配置好的模型文件路径
使用默认超参数,模型ch_PP-OCRv3_det_student
在训练集上训练 100 个 epoch 后,模型在验证集上的 hmean 达到:90.96%,此后再无明显增长
5.2 识别模型
5.2.1 识别模型配置
PaddleOCR 也提供了许多识别模型,在路径PaddleOCR-2.6.0/configs/rec
下可找到模型及其配置文件。如我们选用模型 ch_PP-OCRv3_rec_distillation,其配置文件路径在:PaddleOCR-2.6.0/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml
。使用前需对其进行必要的设置,如训练参数、数据集路径等。将部分关键配置展示如下:
文件直接放在更目录里,自行替换即可 /home/aistudio/ch_PP-OCRv3_rec_distillation.yml
5.2.2 模型微调
在 notebook 中运行如下命令对模型进行微调,其中 -c 传入的为配置好的模型文件路径
使用默认超参数,模型ch_PP-OCRv3_rec_distillation
在训练集上训练 50 个 epoch 后,模型在验证集上的精度达到:91.11%,此后再无明显增长
六、结果展示
6.1 检测模型推理
在 notebook 中运行如下命令使用微调过的模型检测测试图片中的文字,其中:
Global.infer_img
为图片路径或图片文件夹路径,Global.pretrained_model
为微调过的模型,Global.save_res_path
为推理结果保存路径
6.2 识别模型推理
在 notebook 中运行如下命令使用微调过的模型检测测试图片中的文字,其中:
Global.infer_img
为图片路径或图片文件夹路径,Global.pretrained_model
为微调过的模型,Global.save_res_path
为推理结果保存路径
部分结果展示:
6.3 检测识别模型串联推理
6.3.1 模型转换
在串联推理前首先需要将训练保存的模型转换成推理模型,分别执行如下检测命令即可。其中,-c
传入要转换模型的配置文件路径,-o Global.pretrained_model
为要被转换的模型文件,Global.save_inference_dir
为转换得到推理模型的储存路径
6.3.2 模型串联推理
转换完毕后,PaddleOCR 提供了检测和识别模型的串联工具,可以将训练好的任一检测模型和任一识别模型串联成两阶段的文本识别系统。输入图像经过文本检测、检测框矫正、文本识别、得分过滤四个主要阶段输出文本位置和识别结果。执行代码如下,其中image_dir
为单张图像或者图像集合的路径,det_model_dir
为检测 inference 模型的路径,rec_model_dir
为识别 inference 模型的路径。可视化识别结果默认保存到 ./inference_results 文件夹里面。
结果展示:
以 1-122720001-OCR-AS-B01.jpg 测试样例进行展示:
多视角识别结果为:EITU1786393
七.总结
本项目做了基于 PaddleOCR 的多视角集装箱箱号检测识别,使用少量数据分别训练检测、识别模型,最后将他们串联在一起实现集装箱箱号检测识别的任务。其中集装箱号是指装运出口货物集装箱的箱号,填写托运单时必填此项。标准箱号构成基本概念:采用 ISO6346(1995)标准。
从结果上看,基于 PaddleOCR 的多视角集装箱箱号检测识别取得了不错的效果,但也存在一些改进地方。
数据集样本量和丰富度不够
训练不充分,因为算力和时间限制,本人就简单训练了 100 epochs 左右停止了。
模型参数调优(目前默认参数)等等
源项目链接:https://aistudio.baidu.com/aistudio/projectdetail/5766320?contributionType=1
欢迎关注 fork 三连
版权声明: 本文为 InfoQ 作者【汀丶】的原创文章。
原文链接:【http://xie.infoq.cn/article/cd384ef57c51f0b00823d9000】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论