当前位置: 首页 > news >正文

OCR训练和C#部署英文字符训练

      PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。以下是其优点:

高精度:PaddleOCR采用深度学习算法进行训练,可以在不同场景下实现高精度的文字检测和文字识别。

多语种支持:PaddleOCR支持多种语言的文字识别,包括中文、英文、日语、韩语等。同时,它还支持多种不同文字类型的识别,如手写字、印刷体、表格等。

高效性:PaddleOCR的训练和推理过程都采用了高效的并行计算方法,可大幅提高处理速度。同时,其轻量化设计也使得PaddleOCR能够在移动设备上进行部署,适用于各种场景的应用。

易用性:PaddleOCR提供了丰富的API接口和文档说明,用户可以快速进行模型集成和部署,实现自定义的OCR功能。同时,其开源代码也为用户提供了更好的灵活性和可扩展性。

鲁棒性:PaddleOCR采用了多种数据增强技术和模型融合策略,能够有效地应对图像噪声、光照变化等干扰因素,并提高模型的鲁棒性和稳定性。

总之,PaddleOCR具有高精度、高效性、易用性和鲁棒性等优点,为用户提供了一个强大的OCR解决方案。

一、环境安装

1.Anaconda安装
        打开Anaconda官网去下载然后安装,这个在网上很多教程根据他们安装就行
 2.cuda,cudnn安装  

去这里找入口安装对应的cuda和cudnn版本  cuda各个版本的Pytorch下载网页版,模型转化工具,免费gpt链接_cuda国内镜像下载网站-CSDN博客

和yolov5配置跑通基本流程一样

ppocr环境

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

二、下载训练源码:

GitHub - PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)icon-default.png?t=N7T8https://github.com/PaddlePaddle/PaddleOCR/tree/main

最好下载这个 其他版本可能报错

这个版本的没有标注的程序所以你还需要下载一个r2.6的把里面的PPOCRlabel复制到你下载的main版本的OCR。

验证环境是否跑通

        进入往下翻GitHub - PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)icon-default.png?t=N7T8https://github.com/PaddlePaddle/PaddleOCR/tree/main

下载压缩然后放到下方文件夹中

打开py终端输入指令

python tools/infer/predict_system.py  --image_dir="C:\Users\User\Desktop\test.jpg" --det_model_dir="./inference_model/en_PP-OCRv3_det_infer/" --rec_model_dir="./inference_model/en_PP-OCRv3_rec_infer"

效果大概就是这个样子 

环境没问题的话就可以开始制作自己的数据集训练了

三、数据集制作

如果你的环境没问题,那么进入PPOCRLabel中直接右键运行,

网上又说用这个   python PPOCRLabel.py --lang ch指令的,我用不了这个,报错,所以这个指令用不了的可以直接右键run   PPOCRLabel.py 文件即可

如果报错

就在 PPOCRLabel.py 文件头上加入

import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

  然后右键运行 PPOCRLabel.py

  打开后是这样的

 

导入图片,再点击自动保存

旁边改成你需要标注的字符

标注后你的数据集文件夹中会生成这些文件

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

其中crop_img中的图片用来训练文字识别模型,

fileState记录图片的打标完成与否,

Label为训练文字检测模型的标签,

rec_gt为训练文字识别模型的标签。

如果是文字文本识别标注那你可以直接点击左下角那里进行自动标注

然后数据集划分

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

在终端运行上述指令 文件路劲在PPOCRLabel文件中

运行后数据集就会被划分

生成的det   和rec文件打开后为如下

四、开始训练字符模型

下载训练模型

GitHub - PaddlePaddle/PaddleOCR: Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices) - PaddlePaddle/PaddleOCRicon-default.png?t=N7T8https://github.com/PaddlePaddle/PaddleOCR/tree/main

最好三个都下载下来,也可以只下载检测和识别两个

下载好解压,放入

配置训练文件

打开后你需要手动修改数据集路径

这里有一个是多少代保存一次,你可以设置为一代保存一次 改为1即可

py终端运行如下指令就可以开始运行了

python tools/train.py -c configs/det/ch_PP-OCRv3/ch_PP-OCRv3_det_dml.yml

运行完毕了模型会报错在这里

五、测试

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/iter_epoch_400.pdparams Global.infer_img="C:\Users\User\Desktop\PaddleOCR-release-2.6\train_data\det\test\0201_1 (3).jpg"

六、训练rec识别模型

和上面的检测det模型的训练方式一样

这里更改多少代 保存一次

七、运行

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

八、然后测试

和上面的方法一样,只是把模型换成rec模型

python tools/infer_det.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o Global.pretrained_model=output/en_db_driving/iter_epoch_400.pdparams Global.infer_img="C:\Users\User\Desktop\PaddleOCR-release-2.6\train_data\det\test\0201_1 (3).jpg"

你可以用如下代码进行批量推理和模型测试

中间那个是分类模型 你可以在官网上直接下载

from paddleocr import PaddleOCR
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont
from paddleocr import PaddleOCR, draw_ocr
import os
import skimagefont = cv2.FONT_HERSHEY_SIMPLEX# 参数依次为`ch`, `en`, `french`, `german`, `korean`, `japan`。
ocr = PaddleOCR(use_angle_cls=True, lang="en", use_gpu=False,rec_model_dir='./models/en_PP-OCRv3_rec_infer/',cls_model_dir='./models/ch_ppocr_mobile_v2.0_cls_infer/',det_model_dir='./models/en_PP-OCRv3_det_infer/')  # need to run only once to download and load model into memory
def OCRsspt_en(img_path,out_path):for filename in os.listdir(img_path):img = os.path.join(img_path,filename)print(filename)# ims = np.ndarray(range(img))# img_flor=cv2.imread(ims,flags=1)# img_flor=Image.open(img)# img_flor = skimage.io.imread(img)result = ocr.ocr(img, cls=True)# 显示结果image = Image.open(img).convert('RGB')boxes = [line[0] for line in result[0]]txts = [line[1][0] for line in result[0]]scores = [line[1][1] for line in result[0]]im_show = draw_ocr(image, boxes, txts, scores, font_path='./simfang.ttf')im_show = Image.fromarray(im_show)output_path = os.path.join(out_path, f"{os.path.splitext(filename)[0]}s.bmp")im_show.save(output_path)print(txts)print("####################OK#####################")img_path = "H:\\DL\\OCRrelse\\PaddleOCR-release-2.6\\train_DATA\\jpegs"
out_path = "H:\\DL\\OCRrelse\\PaddleOCR-release-2.6\\inference_results\\dete"
OCRsspt_en(img_path,out_path)

效果如下

九、C#部署(不完善)

官方部署包  https://github.com/sdcb/PaddleSharp

1.你需要下载ocr的包以及其他工具包

将你训练的两个模型导入进去,根据官方的部署包进行修改,读取模型

就像这样

然后就可以进行ocr识别了

需要其他操作,都可以自己加

相关文章:

OCR训练和C#部署英文字符训练

PaddleOCR是一个基于飞桨开发的OCR(Optical Character Recognition,光学字符识别)系统。其技术体系包括文字检测、文字识别、文本方向检测和图像处理等模块。以下是其优点: 高精度:PaddleOCR采用深度学习算法进行训练…...

webpack【实用教程】

基础配置 配置的拆分和合并 通常 webpack 的配置文件会有3个 webpack.common.js 公共配置(会被另外两个配置文件导入并合并)webpack.dev.js 开发环境的配置webpack.prod.js 生产环境的配置 开发环境的本地服务 在 webpack.dev.js 中配置 devServer:…...

如何使用C++进行文件读写操作

在C中&#xff0c;我们可以使用标准库中的 <fstream>&#xff08;文件流&#xff09;来进行文件的读写操作。以下是一些基本的文件读写操作的示例。 读取文件 cpp复制代码 #include <fstream> #include <iostream> #include <string> int main() { s…...

Tensorflow Lite移动平台编译

Android平台编译 如果不做定制化操作,我们不需要自己编译TensorFlow Lite Android库。我们可以直接使用位于MavenCentral的TensorFlow Lite AAR。但是在某些情况下,我们需要本地编译TensorFlow Lite。例如,您可能正在构建一个包含operations selected from TensorFlow的自定…...

2024年6月24日-6月30日(ue5肉鸽视频p16-p25)

试过重点放在独立游戏上&#xff0c;有个indienova独立游戏团队是全职的&#xff0c;由于他们干了几个月&#xff0c;节奏暂时跟不上&#xff0c;紧张焦虑了。五一时也有点自暴自弃了&#xff0c;实在没必要&#xff0c;按照自己的节奏走即可。精力和时间也有限&#xff0c;放在…...

LeetCode.面试题17.24.最大子矩阵详解

问题描述 给定一个正整数、负整数和 0 组成的 N M 矩阵&#xff0c;编写代码找出元素总和最大的子矩阵。 返回一个数组 [r1, c1, r2, c2]&#xff0c;其中 r1, c1 分别代表子矩阵左上角的行号和列号&#xff0c;r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵…...

云动态摘要 2024-06-28

给您带来云厂商的最新动态&#xff0c;最新产品资讯和最新优惠更新。 最新优惠与活动 [新客专享]WeData 限时特惠 腾讯云 2024-06-21 数据分类分级管理&#xff0c;构建数据安全屏障 &#xff0c;仅需9.9元&#xff01; 云服务器ECS试用产品续用 阿里云 2024-04-14 云服务器…...

六、资产安全—信息分级资产管理与隐私保护(CISSP)

目录 1.信息分级 2.信息分级方法 3.责任的层级 4.资产管理 5.隐私数据管理角色 6.数据安全控制 7.数据保护方案 8.使用安全基线 六、资产安全—数据管理(CISSP): 五、身份与访问管理—身份管理和访问控制管理(CISSP): 1.信息分级 信息分级举列: 2.信息分级方…...

香港服务器托管对外贸行业必要性和优势

在当今全球化的经济环境下&#xff0c;外贸企业面临着前所未有的机遇与挑战。其中&#xff0c;服务器托管的选择对于外贸企业的运营效率和市场拓展具有举足轻重的作用。香港服务器&#xff0c;凭借其独特的地理位置、优质的网络环境和卓越的服务性能&#xff0c;一直是外贸企业…...

Vue Router 导航守卫,多次执行的解决方案

Vue Router 是 Vue.js 官方提供的路由器,它用于处理单页应用(SPA)中的路由导航。在 Vue Router 中,导航守卫是非常重要的功能,它可以在路由跳转之前或之后执行一些特定的操作。但是,如果你不小心,导航守卫可能会多次执行,这可能会导致一些问题。本文将介绍如何避免导航…...

SpringBoot集成道历(实现道历日期查询)

官网地址&#xff1a;官网地址https://6tail.cn/calendar/api.html 1、导入依赖 <dependency><groupId>cn.6tail</groupId><artifactId>lunar</artifactId><version>1.3.9</version></dependency><dependency><group…...

面对.rmallox勒索病毒:如何有效防范及应对

引言&#xff1a; 在当今数字化社会&#xff0c;网络安全问题日益严重&#xff0c;勒索病毒成为企业和个人不可忽视的威胁之一。最近出现的.rmallox勒索病毒更是给全球各地的用户带来了严重的数据安全问题。本文将探讨.rmallox勒索病毒的特点、感染方式及应对策略&#xff0c;…...

嘉立创学习

1.两个设置&#xff0c;一般用左边那个 2.焊盘分类 基本焊盘 热风盘&#xff1a;也叫花焊盘&#xff08;负片&#xff09; 隔离焊盘&#xff1a;外面那圈黑色&#xff0c;用作隔离&#xff08;负片&#xff09; 钢网层&#xff1a;&#xff08;锡膏&#xff09; 阻焊层&…...

ECharts 响应式设计

ECharts 响应式设计 ECharts 是一个由百度开源的,基于 JavaScript 的可视化库,它提供了一系列丰富的图表类型和灵活的配置选项,使得数据可视化变得简单而高效。在当今数据驱动的世界中,ECharts 已经成为许多开发者和设计师的首选工具,用于创建交互式和视觉吸引力强的图表…...

基于java语言+springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码

基于java语言springboot技术架构开发的 互联网智能3D导诊系统源码支持微信小程序、APP 医院AI智能导诊系统源码 一、智慧导诊系统开发原理 导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。 1、基于规则推理的方法通过人工建立症状、疾病和科室之间的对应规则实现…...

MySQL事务——Java全栈知识(31)

1、事务的特性 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务是不可分割的最小操作单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 一致性&#xff08;Consistency&#xff09;&#xff1a;事务完成时&#xff0c;必须使所有的数据都保持一致状态。 隔离…...

2毛钱不到的2A同步降压DCDC电压6V频率1.5MHz电感2.2uH封装SOT23-5芯片MT3520B

前言 2A&#xff0c;2.3V-6V输入&#xff0c;1.5MHz 同步降压转换器&#xff0c;批量价格约0.18元 MT3520B 封装SOT23-5 丝印AS20B5 特征 高效率&#xff1a;高达 96% 1.5MHz恒定频率操作 2A 输出电流 无需肖特基二极管 2.3V至6V输入电压范围 输出电压低至 0.6V PFM 模式可在…...

Ubuntu安装、更新和删除软件

Ubuntu安装、更新和删除软件 问题命令行直接安装、更新和删除软件命令行直接安装软件命令行直接更新软件命令行直接删除软件 手动下载后命令行安装、更新和删除软件手动下载后命令行安装软件手动下载后命令行更新软件手动下载后命令行删除软件 手动下载后在桌面环境下安装、更新…...

消息队列kafka中间件详解:案例解析(第10天)

系列文章目录 1- 消息队列&#xff08;熟悉&#xff09;2- Kafka的基本介绍&#xff08;掌握架构&#xff0c;其他了解&#xff09;3- Kafka的相关使用&#xff08;掌握kafka常用shell命令&#xff09;4- Kafka的Python API的操作&#xff08;熟悉&#xff09; 文章目录 系列文…...

Linux高级编程——线程

pthread 线程 概念 &#xff1a;线程是轻量级进程&#xff0c;一般是一个进程中的多个任务。 进程是系统中最小的资源分配单位. 线程是系统中最小的执行单位。 优点&#xff1a; 比多进程节省资源&#xff0c;可以共享变量 进程会占用&am…...

技术学习的奥秘与乐趣

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 在当今快速发展的科技时代&#xff0c;学习技术已经成为了许多人追求的重要目标之一。无论是为了个人发展&#…...

创新前沿:Web3如何颠覆传统计算机模式

随着Web3技术的快速发展&#xff0c;传统的计算机模式正面临着前所未有的挑战和改变。本文将深入探讨Web3技术的定义、原理以及它如何颠覆传统计算机模式&#xff0c;以及对全球科技发展的潜在影响。 1. 引言&#xff1a;Web3技术的兴起与背景 Web3不仅仅是技术创新的一种&…...

一文弄懂梯度下降算法

1、引言 在上一篇文章中&#xff0c;我们介绍了如何使用线性回归和成本损失函数为房价数据找到最拟合的线。不过&#xff0c;我们也看到&#xff0c;测试多个截距值可能既繁琐又低效。在本文中&#xff0c;我们将深入探讨梯度下降算法&#xff0c;这是一种更加强大的技术&…...

确认偏差:金融市场交易中的隐形障碍

确认偏差&#xff0c;作为一种深刻影响交易员决策与表现的心理现象&#xff0c;其核心在于个体倾向于寻求与既有信念相符的信息&#xff0c;而自动过滤或轻视与之相悖的资讯。这种认知偏见严重扭曲了交易者的决策过程&#xff0c;导致他们过分依赖符合既有观念的数据&#xff0…...

Linux系统之部署linkding书签管理器

Linux系统之部署linkding书签管理器 一、linkding介绍1.1 linkding简介1.2 linkding特点二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本四、部署Node.js 环境4.1 下载Node.js安装包4.2 解压Node.js安装包4.3 …...

springcloud-gateway 路由加载流程

问题 Spring Cloud Gateway版本是2.2.9.RELEASE&#xff0c;原本项目中依赖服务自动发现来自动配置路由到微服务的&#xff0c;但是发现将spring.cloud.gateway.discovery.locator.enabledfalse 启动之后Gateway依然会将所有微服务自动注册到路由中&#xff0c;百思不得其解&a…...

双减期末考试成绩怎么公布?

考试一直是衡量学生学习成果的重要手段。不过&#xff0c;随着"双减"政策的实施&#xff0c;我们就不得不重新审视传统的成绩公布方式。期末考试成绩&#xff0c;这个曾经让无数学生心跳加速的数字&#xff0c;如今该如何以一种更加合理、公正的方式呈现给学生和家长…...

2, 搭建springCloud 项目 测试demo

上篇文章 新建了父依赖服务&#xff0c;这篇文章就建两个demo测试服务。 因为后面需要做服务间的通讯测试&#xff0c;所以至少需要建两个服务 建个子模块 同样的方式建连个demo服务 给java 和resources目录添加属性 在resources目录下建一个applications.yml文件&#xff0c;…...

RabbitMQ消息积压比较厉害,然后突然丢弃

RabbitMQ中的消息积压陡降通常表明某些突发事件或操作已经显著减少了队列中的消息数量。这种现象可能由多种原因引起&#xff0c;以下是一些可能的原因及其解释&#xff1a; 消费者处理速度突然增加 原因: 你的消费者&#xff08;消费者应用或服务&#xff09;可能在某个时间点…...

QT中的样式表.qss文件

一、前言 qt中样式表的改变有几种方法&#xff0c;第一种就是直接在ui界面对应的组件右键修改样式表&#xff0c;还有一种就是直接在程序里面修改样式表&#xff0c;我知道的还有一种就是qss文件&#xff0c;这个文件就是将在程序中写的修改样式表的语句写道qss文件中&#xff…...

b2c网站建设策略/推广公司运营模式

原标题&#xff1a;Java Restful API 文档生成工具 smart-doc | 软件推介授权协议&#xff1a;Apache-2.0开发语言&#xff1a;Java软件作者&#xff1a;上官胡闹背景在当今各种盛行的前后端分离、restful service开发过程中&#xff0c;接口文档是必不 可少的。对于前后端分离…...

好看的网站首页/如何创建自己的卡网

虽然到现在为止&#xff0c;留言中还没有一个人看好 Dojo &#xff0c;但是我还是准备继续写下去&#xff0c;不保证能写完&#xff0c;也许哪天不想写了&#xff0c;或者另有所爱了&#xff0c;可能就结束了&#xff0c;呵呵。 另外&#xff0c;相对于效率&#xff0c;我还是更…...

网站建设新疆/网站如何做推广

257. 二叉树的所有路径 - 力扣&#xff08;LeetCode&#xff09; 回溯法枚举&#xff0c;或者dfs就可以&#xff1a; class Solution { public:vector<string> res;string t "->";void backtrack(TreeNode* root, string s){if(!root->left &&…...

南京市建设厅网站/宁波seo快速排名

Reachability是苹果官方给的检查网络状态的库,想必每个基于网络的应用都会用它来检查网络状态吧,当然笔者也不例外.可是正当自信满满的我&#xff0c;用这个库用的不亦乐乎的时候,突然发现我写的基于网络的程序工作的不是那么流畅了,尤其是仔细检查以后确定是因为用了Reachabil…...

做网站怎么添加关键词/东莞网络推广

1、配置文件 2、调用 有两种使用方式 1)如果需要以固定速率执行&#xff0c;只要将注解中指定的属性名称改成fixedRate即可&#xff0c;以下方法将以一个固定速率5s来调用一次执行&#xff0c;这个周期是以上一个任务开始时间为基准&#xff0c;从上一任务开始执行后5s再次调…...

品牌网站源码asp/营销培训讲师

以前写的做个总结&#xff0c;留念 1&#xff0c;MBRBOOTKIT –鬼影?0?3鬼影系列?0?3特点&#xff1a;只支持XP 系统&#xff0c;基于国外的开源版本修改。?0?3从MBR里&#xff0c;挂中断13H,驻留高端内存&#xff0c;挂NTLDR 加载&#xff0c;对NTOS的函数进行HOOK,在NT…...