脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

2024-06-05 15:33ElaineTiger Python

OCR英文全称是Optical Character Recognition,中文叫做光学字符识别,是通过扫描等光学技术与计算机技术结合的方式直接从影像中提取各类数据,省去人工录入,节约成本,这篇文章主要介绍了Python PaddleOCR模型训练及使用超详细教程,需要的朋

Part1. OCR原理及开源项目对比

OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。是通过扫描等光学技术与计算机技术结合的方式直接从影像中提取各类数据,省去人工录入,节约成本。

原理:
为了识别一张图片中的文字,通常包含两个步骤:
1)文本检测:检测出图片中文字所在的位置;
2)文字识别:识别包含文字的图片局部,预测具体的文字。

以下为对Github上几个开源ocr项目的对比,主要分为几个方面:新手友好度、使用便捷性、OCR识别效果。

项目名称 优点 缺点
1.cnocr 安装使用方便,对环境的要求不高,检测精准度和识别准确率较高 语言方面有局限性,仅能识别中文简体繁体、英文、数字等,如需识别更高专业度的公式或其他语言需要进行自己的训练。
2.easyocr 安装调用方便,支持识别监测多种语言,识别的精确度尚可 对中文检测的准确度一般,对排版规整的印刷体都有较好的表现,但对于稍有畸变或包含其他字体的图像其效果一般;识别的速度较慢,模型较大,EasyOCR的内存占用较高。
3.mmocr 功能完善,包括文本检测、文本识别、以及端到端的文本识别任务都有给出对应的方法以及详细的说明文档 基于openmmlab的环境安装配置较为繁琐,不适合快速上手
4.paddleocr 方便进行自己的训练:官方给到的训练集非常全,也有常用的合成、标注工具。基本满足个性化训练的场景应用,不需要再自己花时间找,一键下载就行,文档中也有详细的说明;识别准确率较高、速度快 基于paddle框架,并不是目前所使用的主流框架,对未使用过的小白或是需要进行后续开发可能不是很友好,项目整体比较复杂,学习成本较高
5.tesseract tesseract具有良好的可扩展性,用户可以使用自定义训练数据来训练和优化OCR模型,Tesseract还提供了API和接口,方便用户进行二次开发和集成 不是专门针对中文场景且相关文档主要是英文,经过测试感觉其对于复杂字形和字体的识别准确性较低,与其他OCR相比,Tesseract的准确率可能相对较低

Part2. PaddleOCR介绍

Python PaddleOCR模型训练及使用超详细教程

官方网址:https://github.com/PaddlePaddle/PaddleOCR

PaddleOCR是基于PaddlePaddle深度学习框架的开源OCR工具,但它提供了推理模型/训练模型/预训练模型,用户可以直接使用推理模型进行识别,也可以对训练模型或预训练模型进行再训练。支持约80种语言的文本识别,并具有较高的准确性和速度。

PaddleOCR的官方文档就更加的友好,有好几种语言可供选择,讲述的也更为详细,包括从什么是ocr开始到模型的各种细节都有提到。也经常有更新和维护。

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

PaddleOCR其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。以下是其优点:

  • 高精度:PaddleOCR采用深度学习算法进行训练,可以在不同场景下实现高精度的文字检测和文字识别。
  • 多语种支持:PaddleOCR支持多种语言的文字识别,包括中文、英文、日语、韩语等。同时,它还支持多种不同文字类型的识别,如手写字、印刷体、表格等。
  • 高效性:PaddleOCR的训练和推理过程都采用了高效的并行计算方法,可大幅提高处理速度。同时,其轻量化设计也使得PaddleOCR能够在移动设备上进行部署,适用于各种场景的应用。
  • 易用性:PaddleOCR提供了丰富的API接口和文档说明,用户可以快速进行模型集成和部署,实现自定义的OCR功能。同时,其开源代码也为用户提供了更好的灵活性和可扩展性。
  • 鲁棒性:PaddleOCR采用了多种数据增强技术和模型融合策略,能够有效地应对图像噪声、光照变化等干扰因素,并提高模型的鲁棒性和稳定性。

Part3. PaddleOCR模型训练环境搭建

语言环境:python

PaddleOCR可通过CPU或GPU进行训练,对应环境配置如下:

Python PaddleOCR模型训练及使用超详细教程

安装模块列表(win11):

① 安装PaddlePaddle:pip install PaddlePaddle
先安装PaddlePaddle再安装PaddleOCR
需要注意的是:
如果机器安装的是 CUDA,执行:pip install paddlepaddle-gpu
如果机器是 CPU,执行: pip install PaddlePaddle

② 安装PaddleOCR whl包:pip install PaddleOCR

③ 安装图形标注工具:pip install PPOCRLabel 或在官网下载
https://github.com/PaddlePaddle/PaddleOCR/tree/release/2.7

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

如果用GPU训练,还需安装CUDA和CUDNN:

④ 安装CUDA:训练中用于加速GPU功能使用和计算
打开终端输入nvidia-smi,看CUDA Version的版本,只要下载这个版本或者这个以下的就可以
NVIDIA官网(https://developer.nvidia.com/cuda-toolkit-archive)
下载CUDA Toolkit并安装

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

⑤ 安装CUDNN : 进入以下网址,需要进行注册下载
NVIDIA官网(https://developer.nvidia.com/cudnn)

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

下载后将cudnn解压为一个文件夹,将以下文件复制到cuda的根目录下

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

在系统高级设置中添加如下环境变量:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\bin 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\include 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\lib 
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.2\libnvvp

Part4. 制作数据集

Python PaddleOCR模型训练及使用超详细教程

PPOCRLabel就是跟PaddleOCR配套的标注工具
前面在介绍环境搭建过程中已下载,直接可以使用

1. 先查看下载的ppocrlabel库所在位置:pip show ppocrlabel

Python PaddleOCR模型训练及使用超详细教程

2. 在PPOCRLabel文件夹下有两个.py文件是制作数据集所需的

Python PaddleOCR模型训练及使用超详细教程

3. PPOCRLabel根目录下,终端运行: python PPOCRLabel.py --lang ch
python PPOCRLabel.py --lang ch # 启动【普通模式】,用于打【检测+识别】场景的标签
python PPOCRLabel.py --lang ch --kie True # 启动【KIE 模式】,用于打【检测+识别+关键字提取】场景的标签

4. 打开后点击文件,点击打开目录选择需要打标签的数据集文件夹,点击左下角自动标注

Python PaddleOCR模型训练及使用超详细教程

5. 然后从第一张开始检查。漏打标的按下Q框出字体;打标文字错误的,点击方框,在右边框里修改,并对每一个方框给出关键词列表(点击编辑点击更改box关键词信息)。支持矩形标注和多点标注,最后删除无用信息,点确认后,切换下一张快捷键为D,如下图所示。

Python PaddleOCR模型训练及使用超详细教程

相关快捷键:

Python PaddleOCR模型训练及使用超详细教程

6. 导出标记结果及识别结果
全部打标完成之后,点击文件选择导出标记结果,再点击文件选择导出识别结果,完成后文件夹里多出四个文件crop_img、fileState、Label、rec_gt。

  • crop_img中的图片用来训练文字识别模型
  • fileState记录图片的打标完成与否
  • Label为训练文字检测模型的标签
  • rec_gt为训练文字识别模型的标签

Python PaddleOCR模型训练及使用超详细教程

命名为train_data文件夹存放的是打标签生成的文件和图片
其结构如下图所示

Python PaddleOCR模型训练及使用超详细教程

7. 将数据集划分(训练集/验证集/测试集)
PPOCRLabel根目录下,终端运行:python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 –-datasetRootPath xx --detRootPath xx --recRootPath xx

参数说明:

  • trainValTestRatio 是训练集、验证集、测试集的图像数量划分比例,根据实际情况设定,默认是6:2:2
  • datasetRootPath 是PPOCRLabel标注的完整数据集存放路径。默认路径是 …/train_data/
  • 就是步骤6的结果文件夹train_data文件夹。
  • detRootPath 是输出训练文字检测的数据集存放路径。默认路径是 …/train_data/det
  • recRootPath 是输出训练文字识别的数据集存放路径。默认路径是 …/train_data/rec

输入指令之后,在train_data文件夹下会出现两个文件:
其中det是用来训练文字检测的数据集,
rec是用来训练文字识别的数据集。

Python PaddleOCR模型训练及使用超详细教程

Part5. 训练模型

1. 按需下载文本检测、文本识别的配置文件和训练模型
官方网址:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

2. 在PaddleOCR-release-2.7目录下新建pretrain_models文件夹,存放前面下载的配置文件和训练模型

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

3. 训练文字检测模型

3.1 手动修改配置文件ch_PP-OCRv3_det_cml.yml
已列出需要修改的參數,完整參數説明請參考
官方文档https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/config.md

Python PaddleOCR模型训练及使用超详细教程

3.2 开始训练
在PaddleOCR-release-2.7根目录下,执行命令开始训练:
python tools/train.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml
模型训练完之后会在文件夹下保存训练好的模型,具体保存的文件夹路径依据配置文件:
save_model_dir: ./output/ch_PP-OCR_v3_det/ # 设置输出训练模型路径

训练过程中产生的模型称为检查点(checkpoints)模型,包含完整参数,用于恢复训练及二次训练。一 个检查点模型包含三个文件:
.pdopt:训练优化器参数
.pdparams:训练网络参数
.states:训练状态

Python PaddleOCR模型训练及使用超详细教程

4. 训练文字识别模型(跟训练文字检测模型步骤几乎一样)

4.1 手动修改配置文件ch_PP-OCRv3_rec_distillation.yml
下面列出需要修改的參數,修改的地方和文字检测修改的类似。

Python PaddleOCR模型训练及使用超详细教程

4.2 开始训练
在PaddleOCR-release-2.7根目录下,执行命令开始训练:
python tools/train.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml
模型训练完之后会在文件夹下保存训练好的模型,具体保存的文件夹路径依据配置文件:
save_model_dir: ./output/rec_ppocr_v3_distillation/

5. 断点训练
如果训练程序中断,希望加载训练中断的模型从而恢复训练,可以通过指定Global.checkpoints指定要加载的模型路径:
python tools/train.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml -o Global.checkpoints=./your/trained/model
注意:Global.checkpoints的优先级高于Global.pretrained_model的优先级,即同时指定两个参数时,优先加载Global.checkpoints指定的模型

6. 模型微调
官方讲解较详细:https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/finetune.md

Part6. 转换成推理模型并应用

1. 转换成推理模型

推理模型是可以直接被调用进行识别和检测。推理模型体积更小,在预测部署、加速推理上性能优越、灵活方便,但不能用于恢复训练及二次训练。

执行以下命令将训练好的检测、识别模型导出为推理模型:

python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_det_cml.yml -o Global.pretrained_model=./output/ch_PP-OCR_v3_det/latest Global.save_inference_dir=./inference_model/det_model/

python tools/export_model.py -c pretrain_models/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model=./output/rec_ppocr_v3_distillation/latest Global.save_inference_dir=./inference_model/rec_model/

参数说明:

  • -c 指定导出模型使用的配置文件,需与训练时使用的配置文件相同
  • -o 指定配置文件中的某个参数,即在不修改配置文件的情况下修改参数
  • Global.pretrained_model 此处是指要导出模型的参数文件路径
  • Global.save_inference_dir 指导出模型的保存路径

结果:

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

2. 模型使用

import cv2
from paddleocr import PaddleOCR
paddleocr = PaddleOCR(lang='ch', show_log=False, enable_mkldnn=True,
                      det_model_dir=f'D:\\PaddleOCR-release-2.7\\inference_model\\det_model\\Teacher',
                      rec_model_dir=f'D:\\PaddleOCR-release-2.7\\inference_model\\rec_model\\Teacher') # 推理模型路径
img = cv2.imread('ch2.jpg')  # 打开需要识别的图片
result = paddleocr.ocr(img)
for i in range(len(result[0])):
    print(result[0][i][1][0])   # 输出识别结果

识别结果:

Python PaddleOCR模型训练及使用超详细教程

Python PaddleOCR模型训练及使用超详细教程

以上就是PaddleOCR模型训练及使用方法,如有错处欢迎指正!

到此这篇关于PaddleOCR模型训练及使用详细教程的文章就介绍到这了,更多相关PaddleOCR模型训练内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/qq_41273999/article/details/135692215

延伸 · 阅读

精彩推荐
  • Python自己使用总结Python程序代码片段

    自己使用总结Python程序代码片段

    这篇文章主要介绍了自己使用总结Python程序代码片段,本文收集了如反向读取文件、往文件中所有添加指定的前缀、匿名函数作为返回值、将二进制数转为...

    Python教程网3032020-07-11
  • Pythonpython中super()函数的理解与基本使用

    python中super()函数的理解与基本使用

    super( )函数是用来调用父类的一个方法,super( )函数还用来解决多重继承的问题,下面这篇文章主要给大家介绍了关于python中super()函数的相关资料,文中通过示...

    tigeriaf5852021-12-26
  • Python安装不同版本的tensorflow与models方法实现

    安装不同版本的tensorflow与models方法实现

    这篇文章主要介绍了安装不同版本的tensorflow与models方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    Airs_Gao8062021-09-07
  • Pythonselenium+python自动化78-autoit参数化与批量上传功能的实现

    selenium+python自动化78-autoit参数化与批量上传功能的实现

    这篇文章主要介绍了selenium+python自动化78-autoit参数化与批量上传,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可...

    上海-悠悠6292021-09-14
  • PythonPython基于百度AI的文字识别的示例

    Python基于百度AI的文字识别的示例

    本篇文章主要介绍了Python基于百度AI的文字识别的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    EaseMob沈冲12002021-02-03
  • Python对numpy中向量式三目运算符详解

    对numpy中向量式三目运算符详解

    今天小编就为大家分享一篇对numpy中向量式三目运算符详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    grey_csdn9522021-04-15
  • Pythonpycharm使用anaconda全过程

    pycharm使用anaconda全过程

    这篇文章主要介绍了pycharm使用anaconda全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...

    罗小爬EX9052023-03-02
  • Pythonpython机器学习实战之K均值聚类

    python机器学习实战之K均值聚类

    这篇文章主要为大家详细介绍了python机器学习实战之K均值聚类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    大牙湾8272020-12-27