内容一览:根据 PaddleOCR 进行集装箱箱号检测,缩短记载集装箱箱号的时刻,提高港口装卸功率。 要害词:PaddleOCR 文字辨认 在线教程

国际航运咨询分析机构 Alphaliner 在本年 3 月发布的一组数据,2021 年集装箱吞吐量排名前 30 的榜单中,上海港以 4702.5 万标箱的「成绩单」雄踞鳌头。

教程详解 | 用 PaddleOCR 进行集装箱箱号检测识别

全球百大集装箱港口,更是在 2021 年共完成集装箱吞吐量 6.76 亿 TEU。如此大规模的集装箱数量,使得箱号辨认的压力骤增, 传统的由人对集装箱号进行辨认记载的方式成本高、功率低,运营条件落后。

随着经济和社会的开展,在港口经营中引入人工智能,已经成为传统港口在市场竞争中蜕变升维的要害。

本文将从环境预备到模型练习,演示如何凭借 PaddleOCR,进行集装箱箱号检测辨认。

直接检查代码教程: openbayes.com/console/ope…

用少数数据实现箱号检测辨认使命

集装箱号是指装运出口货物集装箱的箱号,填写托运单时必填此项。 规范箱号的构成选用ISO6346 (1995) 规范,由 11 位编码组成,以箱号 CBHU 123456 7 为例,它包含 3 个部分:

第一部分由 4 个英文字母组成, 前 3 个字母表明箱主、经营人,第 4 个字母表明集装箱类型。CBHU 表明箱主和经营人为中远集运的规范集装箱。

第二部分由 6 位数字组成, 表明箱体注册码,是集装箱箱体持有的唯一标识。

第三部分为校验码,由前面 4 个字母和 6 位数字通过校验规矩运算得到,用于辨认在校验时是否发生过错。

教程详解 | 用 PaddleOCR 进行集装箱箱号检测识别
本教程根据PaddleOCR进行集装箱箱号检测辨认使命,运用少数数据分别练习检测、辨认模型,最后将他们串联在一起实现集装箱箱号检测辨认的使命

环境预备

  1. 在 OpenBayes 控制台启动一个「模型练习」的容器, 环境挑选 PaddlePaddle 2.3,资源挑选 RTX 3090 或其他 GPU 类型。

暂无渠道账号的,请拜访以下地址先行注册: openbayes.com/console/sig…

  1. 在 Jupyter 中打开一个 Terminal 窗口,然后履行如下指令
cd PaddleOCR-release-2.5 #进入PaddleOCR-release-2.5文件夹
pip install -r requirements.txt #安装PaddleOCR所需依靠
python setup.py install #安装PaddleOCR

数据集介绍

本教程运用集装箱箱号数据集 (ContainerNumber-OCR Dataset),该数据包含 3003 张分辨率为 19201080 的集装箱图画。

检查数据集具体信息,请拜访: openbayes.com/console/ope…

  1. PaddleOCR 检测模型练习标示规矩如下,中心用 “\t” 分隔:
" 图画文件名                    json.dumps编码的图画标示信息"
ch4_test_images/img_61.jpg    [{"transcription": "MASA", "points": [[310, 104], [416, 141], [418, 216], [312, 179]]}, {...}]

其间 json.dumps 编码前的图画标示信息是包含多个字典的 list ,字典中的 points 表明文本框 4 个点的坐标 (x, y),从左上角的点开端顺时针排列。

transcription 表明当前文本框的文字,当其内容为“###”时,表明该文本框无效,在练习时会跳过。

  1. PaddleOCR 辨认模型练习标示规矩如下,中心用 “\t” 分隔:
" 图画文件名                 图画标示信息 "
train_data/rec/train/word_001.jpg   简略可依靠
train_data/rec/train/word_002.jpg   用科技让复杂的世界更简略

数据整理

3.1 检测模型所需数据预备

将数据集 3000 张图片按 2:1 划分成练习集和验证集,运转以下代码:

from tqdm import tqdm
finename = "all_label.txt"
f = open(finename)
lines = f.readlines() 
t = open('det_train_label.txt','w')
v = open('det_eval_label.txt','w')
count = 0
for line in tqdm(lines):
   if count < 2000:
       t.writelines(line)
       count += 1
   else:
       v.writelines(line)
f.close()
t.close()
v.close()

3.2 辨认模型所需数据预备

根据检测部分的注释,裁剪数据集尽可能只包含文字部分图片作为辨认的数据,运转以下代码:

教程详解 | 用 PaddleOCR 进行集装箱箱号检测识别
完好代码详见: openbayes.com/console/ope…

实验

由于数据比较少,为了模型更好和更快的收敛,这儿选用 PaddleOCR 中的 PP-OCRv3 模型进行检测和辨认。

PP-OCRv3 在 PP-OCRv2 的基础上,中文场景端到端 Hmean 目标比较于 PP-OCRv2 提高 5% , 英文数字模型端到端作用提高 11% 。

具体优化细节请参考 PP-OCRv3 技术陈述。

4.1 检测模型

4.1.1 检测模型装备

PaddleOCR 供给了许多检测模型, 在途径 PaddleOCR-release-2.5/configs/det 下可找到模型及其装备文件。如我们选用模型 ch_PP-OCRv3_det_student.yml,装备文件途径为:PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

运用前需对其进行必要的设置,如练习参数、数据集途径等。将部分要害装备展现如下:

#要害练习参数
use_gpu: true #是否运用显卡
epoch_num: 1200 #练习epoch个数
save_model_dir: ./output/ch_PP-OCR_V3_det/ #模型保存途径
save_epoch_step: 200 #每练习200epoch,保存一次模型
eval_batch_step: [0, 100] #练习每迭代100次,进行一次验证
pretrained_model: ./PaddleOCR-release
2.5/pretrain_models/ch_PP-OCR_V3_det/best_accuracy.pdparams #预练习模型途径
#练习集途径设置
Train:
  dataset:
    name: SimpleDataSet
    data_dir: /input0/images #图片文件夹途径
    label_file_list:
      - ./det_train_label.txt #标签途径

4.1.2 模型微调

在 notebook 中运转如下指令对模型进行微调,其间 -c 传入的为装备好的模型文件途径:

leOCR-release-2.5/tools/train.py \
    -c PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml

运用默认超参数,模型 ch_PP-OCRv3_det_student 在练习集上练习 385 个 epoch 后,模型在验证集上的 hmean 到达:96.96% ,尔后再无明显增加:

[2022/10/11 06:36:09] ppocr INFO: best metric, hmean: 0.969551282051282, precision: 0.9577836411609498,
recall: 0.981611681990265, fps: 20.347745459258228, best_epoch: 385

4.2 辨认模型

4.2.1 辨认模型装备

PaddleOCR 供给了许多辨认模型。在途径 PaddleOCR-release-2.5/configs/rec 下可找到模型及其装备文件。

如我们选用模型 ch_PP-OCRv3_rec_distillation,其装备文件途径在: PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

运用前需对其进行必要的设置,如练习参数、数据集途径等。 将部分要害装备展现如下:

#要害练习参数
use_gpu: true #是否运用显卡
epoch_num: 1200 #练习epoch个数
save_model_dir: ./output/rec_ppocr_v3_distillation #模型保存途径
save_epoch_step: 200 #每练习200epoch,保存一次模型
eval_batch_step: [0, 100] #练习每迭代100次,进行一次验证
pretrained_model: ./PaddleOCR-release-2.5/pretrain_models/PPOCRv3/best_accuracy.pdparams #预练习模型途径
#练习集途径设置
Train:
  dataset:
    name: SimpleDataSet
    data_dir: ./RecTrainData/ #图片文件夹途径
    label_file_list:
      - ./rec_train_label.txt #标签途径

4.2.2 模型微调

在 notebook 中运转如下指令对模型进行微调,其间 -c 传入的为装备好的模型文件途径:

%run PaddleOCR-release-2.5/tools/train.py \
    -c PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml

运用默认超参数,模型 ch_PP-OCRv3_rec_distillation 在练习集上练习 136 个 epoch 后,模型在验证集上的精度到达:96.11% ,尔后再无明显增加:

[2022/10/11 20:04:28] ppocr INFO: best metric, acc: 0.9610600272522444, norm_edit_dis: 0.9927426548965615,
Teacher_acc: 0.9540291998159589, Teacher_norm_edit_dis: 0.9905629345025616, fps: 246.029195787707, best_epoch: 136

成果展现

5.1 检测模型推理

在 notebook 中运转如下指令运用微调过的模型检测测验图片中的文字,其间:

  • Global.infer_img 为图片途径或图片文件夹途径
  • Global.pretrained_model 为微调过的模型
  • Global.save_res_path 为推理成果保存途径
%run PaddleOCR-release-2.5/tools/infer_det.py \
    -c PaddleOCR-release-2.5/configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_student.yml \
    -o Global.infer_img="/input0/images" Global.pretrained_model="./output/ch_PP-OCR_V3_det/best_accuracy" Global.save_res_path="./output/det_infer_res/predicts.txt"

5.2 辨认模型推理

在 notebook 中运转如下指令运用微调过的模型检测测验图片中的文字,其间:

  • Global.infer_img为图片途径或图片文件夹途径
  • Global.pretrained_model 为微调过的模型
  • Global.save_res_path 为推理成果保存途径
%run PaddleOCR-release-2.5/tools/infer_rec.py \
    -c PaddleOCR-release-2.5/configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml \
    -o Global.infer_img="./RecEvalData/" Global.pretrained_model="./output/rec_ppocr_v3_distillation/best_accuracy" Global.save_res_path="./output/rec_infer_res/predicts.txt"

5.3 检测辨认模型串联推理

5.3.1 模型转化

在串联推理前首要需要将练习保存的模型转化成推理模型,分别履行如下检测指令即可。 其间:

  • -c 传入要转化模型的装备文件途径
  • -o Global.pretrained_model 为要被转化的模型文件
  • Global.save_inference_dir 为转化得到推理模型的储存途径
    教程详解 | 用 PaddleOCR 进行集装箱箱号检测识别

5.3.2 模型串联推理

转化结束后,PaddleOCR 供给了检测和辨认模型的串联东西,可以将练习好的任一检测模型和任一辨认模型串联成两阶段的文本辨认系统。

输入图画通过文本检测、检测框矫正、文本辨认、得分过滤四个首要阶段输出文本位置和辨认成果。

履行代码如下,其间:

  • image_dir 为单张图画或者图画调集的途径
  • det_model_dir 为检测 inference 模型的途径
  • rec_model_dir 为辨认 inference 模型的途径

可视化辨认成果默认保存到 ./inference_results 文件夹里面。

%run PaddleOCR-release-2.5/tools/infer/predict_system.py \
--image_dir="OCRTest" \
--det_model_dir="./output/det_inference/" \
--rec_model_dir="./output/rec_inference/Student/"

教程详解 | 用 PaddleOCR 进行集装箱箱号检测识别
检查完好教程,请拜访: openbayes.com/console/ope…

关于 PaddleOCR 和 OpenBayes

PaddleOCR 是一种根据百度飞桨的 OCR 东西库,包含总模型仅 8.6M 的超轻量级中文 OCR,同时支撑多种文本检测、文本辨认的练习算法、服务部署和端侧部署。

更多详情请拜访: github.com/PaddlePaddl…

了解 OpenBayes

OpenBayes 是国内抢先的机器智能研究机构,供给算力容器、主动建模、主动调参等多项 AI 开发相关的基础服务。

同时 OpenBayes 还上线了数据集、教程、模型等众多主流揭露资源, 供开发者快速学习并创立理想的机器学习模型。

现在拜访 openbayes.com 并注册 即可享用 600 分钟/周的 RTX 3090 以及 300 分钟/周 的 CPU 免费计算时

注:每周赠送的资源将于每周一下午到账

检查并运转完好教程,拜访以下链接: openbayes.com/console/ope…

—— 完 ——