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识别了

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web渗透:php反序列化漏洞

反序列化漏洞(Deserialization Vulnerability)是一种在应用程序处理数据的过程中,因不安全的反序列化操作引发的安全漏洞;反序列化是指将序列化的数据(通常是字节流或字符串)转换回对象的过程,如…

【MySQL备份】lvm-snapshot篇

目录 1.简介 1.1.如何工作 1.2.应用场景 1.3.注意事项 1.4.优缺点 2.为什么选择lvm快照备份? 3.创建LVM 3.1.操作流程 3.2.正常安装MySQL后进行备份 3.3.MySQL运行一段时间后进行备份 3.3.1.准备lvm及文件系统//先添加一块磁盘 3.3.2.将数据迁移到LVM …

MySQL学习(5):SQL语句之数据查询语言:DQL

1.DQL语法 select 字段列表 from 表名列表 #DQL是可以进行多表查询的 where 条件列表 group by 分组字段列表 having 分组后条件列表 order by 排序字段列表 limit 分页参数 2.基本查询(select) 2.1查询多字段 select 字段1,字段2,字段3,......fro…

基于Volov7的安全帽检测系统

1 项目介绍 1.1 摘要 随着工业化和城市化的迅猛推进,工作场所的安全管理愈发受到重视。安全帽作为保护工人头部安全的关键装备,其实时监测和检测的重要性不言而喻。本文提出并深入研究了基于YOLOv7算法的安全帽佩戴检测技术,该技术旨在实现…

Day.js

Day.js 是什么? Day.js是一个极简的JavaScript库,可以为现代浏览器解析、验证、操作和显示日期和时间。 Day.js中文网 为什么要使用Day.js ? 因为Day.js文件只有2KB左右,下载、解析和执行的JavaScript更少,为代码留下更…

作物检测:YOLOv8+SwanLab

1. 项目介绍 基于深度学习的作物检测通过精准管理和数据驱动决策,能够提高作物产量和质量,优化农业资源利用,推动农业自动化进程,从而保障粮食安全。目前,作物检测领域大多针对单类作物进行检测。因此,本项…

SDIO学习(2)--SD卡 2.0协议

本文参考文档: 《SD Specifications Part 1 Physical Layer Simplified Specification Version 2.00》 1 SD卡简介 1.1 SD卡概念 1.2 SD卡外形和接口 Clk:时钟线,由SDIO主机产生 CMD:命令控制线,SDIO主机通过改…

基于C++标准库实现定时器类

基于C标准库实现定时器类 定时器类是多线程编程中经常设计到的工具类 简单的定时器原理其实很简单(是不是有点GNU is not unix的味道;): 创建一个新线程在那个线程里等待等待指定时长后做任务 python标准库中就有这么一个定时器类&#xf…

升级!升级!升级!MobPush基础标签推送全新升级,助力开发者精细化运营

“广播推送点击率不高,会员转化差” “新用户拉新后留存不高,次留、3日留存不达标” “用户的复购较低,黏性不高,导致GMV未达预期” 我们总是会听到运营人员关于目标达成过程中遇到这样或者那样的问题。这些问题汇总起来就回到…

STM32 HAL库 外部中断 实现按键控制LED亮灭

目录 1、为什么使用GPIO外部中断控制LED亮灭? 2、NVIC嵌套向量中断控制器 3、EXTI外部中断 4、项目的硬件排线 5、STM32CUBE_MX配置 6、HAL库代码 7、实际效果 1、为什么使用GPIO外部中断控制LED亮灭? 实现LED亮灭控制有很多方式,其中…

公文出错事非小,这些公文写作的常见错误,你中过招吗?

公文是企事业单位、相关部门内外沟通交流的重要工具,不少“笔杆子”经常需要与公文打交道,每天会接触大量的公文。然而在公文撰写的细微之处,稍有不慎,便可能犯下一些常见的错误。这些错误如同蚁穴,虽小却足以破坏公文…

stm32cubemx,adc采样的几种方总结,触发获取adc值的方法dma timer trigger中断

stm32cubemx adc采样的几种方总结,触发获取adc值的方法 timer trigger中断 方法1,软件触发方法2:,Timer触发ADC采集通过DMA搬运 触发获取adc值的方法 Regular Conversion launched by software 软件触发 调用函数即可触发ADC转换 Timer X Cap…

Python基于逻辑回归分类模型、决策树分类模型、LightGBM分类模型和XGBoost分类模型实现车辆贷款违约预测项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 随着经济的发展和人民生活水平的提高,汽车消费在居民消费中所占比例逐渐增加,汽…

克服指标管理痛点,实现数据价值最大化

在当下的企业管理中,由于数据量的激增,管理方式逐渐从基于经验转向基于数据。在此过程中,我们能够通过数据探查业务情况、分析数据,从而获取更优的决策支持数据。这通常通过数据报表或分析平台来实现,对于临时性场景&a…

护眼大路灯哪个牌子好用?五款好用的护眼灯分享

护眼大路灯哪个牌子好用?现在的孩子从幼儿园开始就开始学习,面临的用眼压力就很大,但想要孩子视力不受影响,大路灯是得好好安排起来,但动辄大几千的护眼灯真是让我们这些普通家庭的家长望而却步,有没有好用…

控制系统稳定性常见策略

提升控制系统稳定性是确保系统可靠运行的关键,以下是一些常见策略: 1. 控制算法优化 优化控制算法是提升系统稳定性的核心方法之一。常见的控制算法包括PID控制、模糊控制、自适应控制等。通过调整和优化这些算法的参数,可以显著提高系统的…

填报高考志愿时,学校、专业和城市怎么选择呢?

我的观点是: 专业>城市>学校 专业是兴趣导向,符合自己的价值观,失去了这种驱动力的专业学习,会变得非常艰难的,而且没有竞争力,所以我的排序第一位是专业。 其次是城市,最好是一线城市&…

划重点!炒伦敦金看k线图的要点

对于刚刚开始参与伦敦金交易,还在学习如何看K线的投资者来说,掌握一些看k线图的要点,对于更好地分析市场的行情走势,找到有利的入场机很有帮助,以下是一些关键的建议,希望能够供大家参考。 K线有阳线和阴线…

Coze搭建《测测你的本命宠物》

前言 本文讲解如何从零开始,使用扣子平台去搭建《测测你的本命宠物》 《测测你的本命宠物》:测测你的本命宠物 - 扣子 AI Bot (coze.cn) 欢迎大家去体验一下!!! 正文 接下来我们开始讲解制作这个bot的流程吧&#…

rclone 上传资料到 onedrive 遇到限速问题解决

原因分析 可能和脚本参数设置有关系,我的参数是: rclone copy "F:\阿里云盘\6666\局域网" "od:影视" --ignore-existing -u -v -P --transfers20 --ignore-errors --buffer-size128M --check-first --checkers10 --drive-acknowledge-abuse差不多8G大小的…