paddleOcr训练一个属于自己的模型

自己配置开发环境的时候踩了不少坑,现在记录下来,以后需要了可以直接找到现成的代码,也希望能够帮到有需要的小伙伴

目录

  • (一)、运行环境搭建
    • 1、Anaconda部分
      • Anaconda安装
      • Anaconda创建虚拟环境指令
      • Anaconda Prompt工作路径的切换
    • 2、 PaddleOcr部分
      • paddleocr 安装
      • 点击这里实现下载:
      • paddleocr其他依赖库安装
    • 3、Paddle部分
      • paddle2.5.1安装CPU版本
    • 4、 验证环境
  • (二)、训练属于自己的模型
    • 1、数据准备
      • (1)、数据标注
      • (2)、数据集制作
    • 2、训练文字检测模型
      • (1)、下载模型训练文件:
      • (2)、 配置模型文件
      • (3)、开始训练
      • (4)、测试训练模型
    • 3、训练文字识别模型
      • (1)、 配置模型文件
      • (2)、模型训练
      • (3)、模型测试
    • 4、转换成推理模型
    • 5、推理模型应用
  • 三、总结
      • (1)、File No found文件没找到:
        • 01、paddleocr里面的文件没找到
        • 02、paddle里面的文件没找到
      • (2)Import Error:
      • (3)Os相关的报错
  • 四、参考博客

(一)、运行环境搭建

1、Anaconda部分

Anaconda安装

本站有很多安装教程,我就不再重复造车轮了,选了一个讲的比较详细的,可以参考使用Anaconda安装教程

Anaconda创建虚拟环境指令

在开始菜单搜索Anaconda,点击以下应用进入anaconda终端。

在这里插入图片描述

输入以下代码用来创建虚拟环境,Al_Ocr为虚拟环境命名,可以自己取名字,后面是要安装的python版本。

conda create -n Al_Ocr python=3.8

如图
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

#进入虚拟环境指令
activate Al_Oc


#离开虚拟环境指令
deactivate

Anaconda Prompt工作路径的切换

因为我遇到的情况需要切换代码执行路径,所以也记录一下切换方法

# 切换到根目录
cd /
# 切换到D盘
D:
# 切换到D盘指定目录
cd D:\Anaconda\envs\Al_Ocr\Lib\site-packages\PaddleOCR-release-2.5

在这里插入图片描述

2、 PaddleOcr部分

paddleocr 安装

点击这里实现下载:

paddleocr下载

下载完成之后解压缩到当前虚拟环境中的sitepakges目录下,比如我这个目录是

D:\Anaconda\envs\Al_Ocr\Lib\site-packages\paddleocr

paddleocr其他依赖库安装

打开anaconda终端,进入PaddleOC目录下激活环境并输入以下指令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

3、Paddle部分

paddle2.5.1安装CPU版本

python -m pip install paddlepaddle==2.5.1 -i https://mirror.baidu.com/pypi/simpl

【顺利就不用看这里】如果出现以下错误可以换地址重新安装

ERROR: HTTP error 403 while getting https://pypi.tuna.tsinghua.edu.cn/packages/0

报上面的错误信息换成下面的地址下载和安装

python -m pip install paddlepaddle==2.5.1 -i https://pypi.douban.com/simpl

需要先升级:

python.exe -m pip install --upgrade pi

4、 验证环境

进入以下网址下载官方模型:

https://hub.nuaa.cf/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md

官网模型下载链接直达

需要下载两个模型用来进行验证,分别为文本检测模型文本识别模型,选择下载推理模型

文本检测模型

文本检测推理模型
文本识别模型

文本识别推理模型

模型下载后为两个压缩包,在PaddleOCR根目录下新建文件夹inference_model

在这里插入图片描述
将下载好的模型解压缩在刚刚新建的文件夹,处理好是这样的层级

在这里插入图片描述

打开anaconda终端激活环境Al_Ocr进入到paddleocr目录下运行以下指令,其中image_dir所要识别的图片路径det_model_dir为刚才下载的文字检测模型rec_model_dir为刚才下载的文字识别模型

python tools/infer/predict_system.py  --image_dir="D:\OCR\New_model\cut1\test.jpg" --det_model_dir="./inference_model/ch_PP-OCRv3_det_infer/" --rec_model_dir="./inference_model/ch_PP-OCRv3_rec_infer"

原图如下:
在这里插入图片描述
在这里插入图片描述
如果出现上面的界面,说明环境搭建成功,接下来就是训练自己的模型了

(二)、训练属于自己的模型

1、数据准备

(1)、数据标注

在Anaconda Prompt终端进入paddleOC根目录下,再输入
cd PPOCRLabel 进入目录,

cd PPOCRLabel

输入以下代码打开打标软件

python PPOCRLabel.py --lang ch

如果报错说PPCORLabel没找到,就去安装一下PPOCORLabel库

pip install PPOCRLabel

#如果运行了这一步,后面切换执行文件时应该在.\site-packages\PPOCRLabel,而不是.\site-packages\paddleocr\PPOCRLabel,如果还想按照之前的地址执行就需要把PPOCRLabel文件夹复制到paddleocr文件夹下

打开后点击文件,点击打开目录选择需要打标签的数据集文件夹,我这以刚刚的截图为例。如下图所示。

在这里插入图片描述

选择自动标注点击ok等待自动标注完成

在这里插入图片描述

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

在这里插入图片描述
全部打标完成之后,点击文件选择导出标记结果,再点击文件选择导出识别结果,完成后再文件夹多出四个文件fileState,Label,rec_gt, crop_img。其中crop_img中的图片用来训练文字识别模型fileState记录图片的打标完成与否Label训练文字检测模型的标签rec_gt训练文字识别模型的标签

在这里插入图片描述
打标签告一段落。下面进行数据集的制作

(2)、数据集制作

在PaddleOCR根目录下建立train_data文件夹并且将打标签生成的文件和图片放在该文件夹下
在这里插入图片描述
打开Anaconda Prompt终端进入PPOCRLabel的文件夹下,输入以下代码进行数据集的划分

python gen_ocr_train_val_test.py --trainValTestRatio 6:2:2 --datasetRootPath ../train_data/drivingData

输入指令之后,在train_data文件夹下会出现以下文件,其中det是用来训练文字检测的数据集rec是用来训练文字识别的数据集。此时可以删去drivingData。
在这里插入图片描述

在这里插入图片描述

此时文字检测和文字识别的数据集就都制作好了。

2、训练文字检测模型

(1)、下载模型训练文件:

模型下载链接直达

https://hub.nuaa.cf/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md

在上面网站下载官方训练模型,注意不是推理模型。

文本检测模型:
在这里插入图片描述

文本识别模型:

在这里插入图片描述
下载之后在paddleocr根目录下建立pretrain_models文件夹,并将训练模型解压至该文件夹下。如下图所示:

在这里插入图片描述

(2)、 配置模型文件

下面配置模型文件。

打开模型配置文件,如下图所示,我一般用ch_det_res18_db_v2.0.yml这个配置文件。

在这里插入图片描述

对于配置文件的说明可以查看官网的说明文件,链接放在这里了

配置文件说明

https://hub.nuaa.cf/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/config.md

我们需要手动更改的有以下几个地方:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述配置好了之后就可以开始训练了

(3)、开始训练

打开anaconda prompt终端,激活环境进入到paddleocr根目录下。输入以下指令开始模型训练。

python tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml

在这里插入图片描述在这里插入图片描述在这里插入图片描述

如果报错说yaml没找到的话我们手动安装一下即可

pip install pyyaml

(4)、测试训练模型

模型训练完之后会在文件夹下保存训练好的模型,具体保存的文件夹看配置文件,这就是模型保存的路径。

save_model_dir: ./output/ch_db_res18/

打开文件夹,文件组成大概如下图所示。

在这里插入图片描述
我们使用best_accuracy.pdparams进行我们的模型测试。

在anaconda prompt终端中输入以下指令进行测试。 其中Global.pretrained_model是我们训练好并且需要测试的模型Global.infer_img为所要检测的图片路径

python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o Global.pretrained_model=output/ch_db_driving/best_accuracy.pdparams Global.infer_img="D:\Anaconda\envs\Al_Ocr\Lib\site-packages\paddleocr\train_data\det\test\1.jpg"

测试结果图片没有

文字检测模型的训练和测试就告一段落,下面进行文字识别模型的训练和测试。

3、训练文字识别模型

(1)、 配置模型文件

    在第三节已经下载了文字识别的模型所以不再多叙述。文字识别我一般使用的配置文件为ch_PP-OCRv3_rec.yml

在这里插入图片描述
修改的地方和文字检测修改的差不多。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(2)、模型训练

打开anaconda prompt终端,激活环境进入到paddleocr根目录下。输入以下指令开始模型训练。

python tools/train.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml

训练完之后模型保存路径和文件组成和文字检测差不多,不再多叙述。

(3)、模型测试

在anaconda prompt终端中输入以下指令进行测试。 其中Global.pretrained_model是我们训练好并且需要测试的模型,Global.infer_img为所要检测的图片路径。

python tools/infer_rec.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml -o Global.pretrained_model=output/rec/best_accuracy.pdparams Global.infer_img=“D:\Anaconda\envs\Al_Ocr\Lib\site-packages\paddleocr\train_data\rec\test\3.jpg”

文字识别模型的训练和测试就告一段落。

4、转换成推理模型

在anaconda prompt终端中输入以下指令进行测试。 其中Global.pretrained_model是我们训练好并且需要推理的模型Global.save_inference_dir为所要保存推理模型的位置。推理模型是可以直接被调用进行识别和检测。分别把训练好的文字检测模型和文字识别模型推理。

文字检测模型推理

 python tools/export_model.py -c "./configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml" -o Global.pretrained_model="./output/ch_db_driving/latest.pdparams" Global.save_inference_dir="./inference_model/det/"

文字识别模型推理

python tools/export_model.py -c "./configs/rec/PP-OCRv3/ch_PP-OCRv3_rec.yml" -o Global.pretrained_model="./output/rec_mobile_pp-OCRv2/latest.pdparams" Global.save_inference_dir="./inference_model/rec/"

输入上面指令后推理模型将会出现在paddleoce根目录下文件夹inference_model,他的文件结构如下图所示。

在这里插入图片描述
其中detrec即是我们的推理模型,可以用predict_system.py进行验证。打开anaconda终端输入以下指令

python tools/infer/predict_system.py --image_dir="D:\Anaconda\envs\Al_Ocr\Lib\site-packages\paddleocr\train_data\drivingData\0.jpg" --det_model_dir="./inference_model/det/" --rec_model_dir="./inference_model/rec"

识别图片会保存到inference_results文件夹下

5、推理模型应用

把模型训练出来之后还要对其进行应用,怎么去利用模型来实现我们需要的效果也是非常关键的一部分。

通过以下代码可以将咱们训练的模型在程序中调用,file_path为所要识别的图片路径,result为识别结果,texts是将结果中的纯文字部分提取出来进行下一步处理。

from paddleocr import PaddleOCR, draw_ocr
 
ocr = PaddleOCR(use_angle_cls=True, rec_model_dir='./inference_model/rec',
                    det_model_dir='./inference_model/det')
result = ocr.ocr(file_path, cls=True)
result = result[0]
texts = [line[1][0] for line in result]

三、总结

这一路搭建环境遇到了很多的坑,总结下来有三类:

(1)、File No found文件没找到:

01、paddleocr里面的文件没找到

有ppocr、PPOCRLabel,总之就是paddleocr下的任意文件没找到都会报错,解决办法就是去官网下载压缩包,解压

02、paddle里面的文件没找到

这个一定要根据自己机器的配置来,cpu版的装gpu版的包就会各种报错,解决办法就是卸载重装一遍

(2)Import Error:

这个一般都是因为包没找到,以及版本不兼容,建议通过requirements.txt安装

(3)Os相关的报错

这个是跟文件名以及分隔符与系统不匹配导致的,可以尝试往这个方向去解决

四、参考博客

这篇博客一来是记录了我自己实践的一些经验,踩的一些坑,为了避免后面换了一个设备搭建环境时再踩一遍,二来也做一个备份,我看到了一篇写的特别详细的教程,怕因为各种原因找不着了,所以改了改做成了自己的,方便后面找他

PaddleOCR训练属于自己的模型详细教程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/127274.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xilinx primitives(原语)

Xilinx的原语分为10类,包括:计算组件,IO端口组件,寄存器/锁存器,时钟组件,处理器组件,移位寄存器,配置和检测组件,RAM/ROM组件,Slice/CLB组件,G-t…

微信号绑定50个开发者小程序以后超额如何删除不用的

我们在开发微信小程序的时候,当前开发者工具登录的必须是该小程序的开发者才能进行小程序的开发,添加开发者的步骤是: 添加开发者 1、进入微信开放平台,然后扫码进入管理平台 2、找到下图所示位置 3:、输入要添加的微信账号&am…

工商银行卡安全码怎么看

工商银行的安全码,作为一项至关重要的安全措施,旨在保护用户的银行账户和交易安全。为了查看工商银行的安全码用户需要按照以下步骤操作: 首先,用户需要使用电脑或手机访问工商银行的网上银行平台。在平台首页,用户需要…

Git 入门使用

一、Git 入门 1.1 Git简介 Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git是由Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。 Git是目前世界上最先进的分布式版本控制系统,没有之一&a…

千城千站系统源码+SEO关键词推广优化 万能通用版 带完整的搭建教程

大家好啊,源码小编来给大家分享一款超级好用的千城千站系统源码。其实最近大家会发现做SEO排名做的最好的就是千城千站系统,排名好,流量高,其实这都是用千城千站系统做的。而这一套系统搭建起来十分简单,只要把里面的内…

LCD英文字模库(16x8)模拟测试程序

字模 字模,就是把文字符号转换为LCD能识别的像素点阵信息。 电子发烧友可能都熟悉字模的用途。就是调用者通过向LCD模块发送字模数据,LCD根据字模数据在LCD面板上相应的像素描绘出图形或文字。 现在,大部分的LCD都内置了字模库&#xff0c…

【脑源成像】术前癫痫的电源成像 评价:现状与未来展望

Electric source imaging for presurgical epilepsy evaluation: current status and future prospects 术前癫痫的电源成像 评价:现状与未来展望论文下载:算法程序下载:摘要1 项目介绍1.1. 选择要综述的文章2. 电源成像的基本原理4. ESI的实践方面4.1脑…

Nodejs沙箱绕过

目录 JavaScript和Nodejs介绍 沙箱(sandbox) 简单的介绍一下vm模块 下面介绍几种绕过方式 方法1:利用Function构造函数沙箱逃逸,执行命令 方法2:利用argument.callee.caller实现 方法3:利用ES6的 pro…

虚幻引擎 5.1 中全新的增强型输入操作系统

教程链接 https://www.youtube.com/watch?vCYiHNbAIp4s 前提 虚幻引擎5.1之后,项目设置里的input选项,默认会有一条警告,告知旧的input系统已经不能用了。 做法 在content文件夹下新建一个input按钮 input文件夹里面分成两部分内容 1.…

Java必考面试题,谈谈你对 Spring AOP 的理解

大家好,我是伍六七。 今天我们来学习 Spring 框架中最重要的概念之一:AOP。 这是一个 Java 程序员必考的面试题,大家好好理解。我们开始正文。 AOP 的概念 Spring AOP 是 Java 程序员们面试经常被问到的一个问题,但 AOP&#…

高等数学教材啃书汇总重难点(三)微分中值定理与导数的应用

本章节包含多个知识点,一些列微分中值定理是考研证明题的重头戏,而洛必达和泰勒展开则是方法论的天花板难度,虽然对于小题的考察难度较低,整体上仍需重点复习 首先是考研大纲包含的内容: 1.理解并会用罗尔(Rolle)定理、…

万字详解Java的三大特性:封装 | 继承 | 多态

前言:面向对象程序设计的三大特征就是:封装,继承,多态。在前文介绍了类和对象后,我们就可以继而学习什么是封装,怎么用类的子类来实现继承和多态 目录 一.面向对象的特性 1.封装性 2.继承性 3.多态性…

Find My行李箱|苹果Find My技术与行李箱结合,智能防丢,全球定位

行李箱,亦称旅行箱、拉杆箱。是出门时所携带用以放置物品的箱子,它是行李的其中一种类型。通常行李箱是用来放置旅途上所需要的衣物、个人护理用品、纪念品和贵重物品。旅游出差我们离不开行李箱,可是一旦行李箱丢失将造成很大不便&#xff0…

蓝桥杯双周赛算法心得——串门(双链表数组+双dfs)

大家好,我是晴天学长,树和dfs的结合,其邻接表的存图方法也很重要。需要的小伙伴可以关注支持一下哦!后续会继续更新的。💪💪💪 1) .串门 2) .算法思路 串门(怎么存图很关键&#xf…

基于springboot学生心理咨询评估系统的设计与实现 全套代码 全套文档 附带视频知道教程

springboot学生心理咨询评估系统,springboot vue mysql (毕业论文10784字以上,共30页,程序代码,MySQL数据库) 代码下载: 链接:https://pan.baidu.com/s/1MjiwuWdkVHFQ4toPP1vVrA?pwd4eck 提取码:4eck 【运行环境】 IDEA, JDK1.8, Mysql, Node, Vue …

阿里云服务器ECS经济型e实例和u1有什么区别?

阿里云服务器ECS经济型e实例和通用算力型u1实例有什么区别?如何选择?ECS经济型e实例是共享型云服务器,通用算力型u实例是企业级独享型云服务器,e实例性价比高,现在2核2G3M带宽一年99元,云服务器u1价格相对要…

浅析SR隧道路径批量构造方法

为什么要仿真PCE LSP下发隧道路径? 在大型的多区域网络中,路径计算非常复杂。在某些场景下,为了完成路径计算,需要在控制器上部署特殊的计算组件,并需要不同区域中的节点之间协作。这使得网元在进行路径计算时效率低&…

直播实时数仓基于DataLeap开放平台在发布管控场景的业务实践

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 背景 业务背景 随着字节业务的高速增长,业务场景越来越丰富,业务基于数据做的决策也越来越多,对数据的时效性要求也越来越高。…

layui table合计 totalRow 保留4位小数\ 异步请求数据的表格 新增行之后 如何更新数据

layui table合计 totalRow 保留4位小数: 例: totalRowMethod:(column: any, dataSource: any[]) > { let total 0; dataSource.forEach((item) > { total total Number(item[column.key]); …

Vite依赖预构建

本文使用的包管理工具是 npm 开发工具是 vscode 本文作为对 vite的了解性内容即可,实际开发中并不会做太多的工作 依赖预构建干了啥 首先vite会找到对应的依赖, 然后调用 esbuild(对js语法进行处理的一个库), 将其他规范的代码转换成 esmodu…