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 skimage

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

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

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

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

相关文章

台式电脑没有音响?你还可以用这 7 个软件把手机变成音响

台式电脑没有音响?你还可以用这 7 个软件把手机变成音响 怎么让手机当电脑音响 怎么让电脑连接手机的麦克风 手机怎么变电脑麦克风 1.AudioRelay 官网audiorelay加点net提供 Windows 和 Android 应用程序下载 再打开作为 Client 的 Android 端,它会自…

大型企业组网如何规划网络

大型企业组网是一个复杂的过程,它需要细致的规划和设计,以确保网络能够满足企业的业务需求,同时保证性能、安全性和可扩展性。以下是规划大型企业网络的一些关键步骤和考虑因素: 1. 需求分析 业务需求:与各个业务部门…

如何进行员工 OKR 反馈?

目标和关键结果框架是一种协作性的目标设定方法,帮助团队设定理想的目标(目标),并有具体的、可衡量的行动项目,称为关键结果。实施 OKR 为一个富有成效的、以目标为导向的环境奠定了基础,从而消除了提供反馈…

电脑开机就一直在开机界面转圈,怎么回事?

前言 前段时间小白去给一位朋友修电脑。她说这个电脑很奇怪,有时候开机很快就进入电脑界面,但有时候开机一直在那转圈,半天也不见进入。 Windows7系统的小伙伴应该也有遇到过类似的问题,就是电脑一直在Windows的logo界面&#xf…

Halcon 重叠区域 显示汉字 图像分割

一 如何填充区域之间的GAP或分割重叠区域 read_image(Image,fabrik)*区域生长法将图像分割成相同强度的区域,并将其划分成大小为行*列的矩形。 为了确定两个相邻的矩形是否属于相同的区域, *仅使用其中心点的灰度值。 如果灰度值差小于等于公差&#xff…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图,需要使用Java生成一个图片, 并以base64编码的形式返回给前端展示。 使用Graphics2D类,来进行画图,其中需要画方框、原型、插入图标、写入文字等,同时需要设置透明度等细节点 环境:Jdk17&#…

NAS—网络附加存储

关键词:私有化存储、Nas、云盘、群晖、Tailscale、 前言 身处于互联网时代的我们,几乎每时每刻都在与计算机打交道,而软件则作为我们和计算机之间沟通的桥梁,因此可以认为软件的作用是:将计算机能力进行包装&#xf…

期货散户应该如何有效的管理仓位呢?

期货散户应该如何有效的管理仓位呢?首先,他们要意识到自己所做的决定是很重要的。其次,还要注意自己的风险承受能力。最后,要做好风险管理,以便避免出现任何问题。 1:散户如何管理仓位 散户在进行期货交易时,要想有效地管理仓位,需要遵循一…

Windwos +vs 2022 编译openssl 1.0.2 库

一 前言 先说 结论&#xff0c;编译64位报错&#xff0c;查了一圈没找到解决方案&#xff0c;最后换了32位的。 使用qt访问web接口&#xff0c;因为是https&#xff0c;没有openssl库会报错 QNetworkReply* reply qobject_cast<QNetworkReply*>(sender());if (reply){…

vivo 互联网自研代码评审 VCR 落地实践

作者&#xff1a;vivo 互联网效能平台团队- Chi Wei 本文介绍了vivo工程效能团队基于 Gitlab、Gerrit等开源工具搭建的VCR平台&#xff0c;代码评审idea插件开发及开发过程中遇到的挑战、困难&#xff0c;并分享了相应的应对策略和优化方案。 代码评审是软件质量保证一种活动&…

5年成为10亿级大单品,海天如何策划黄豆酱的极致产品力?

在当今的调味品市场中&#xff0c;酱料作为一个重要的细分品类&#xff0c;正迅速成为消费者日常饮食中不可或缺的一部分。随着人们对烹饪品质和口味多样化的追求不断提升&#xff0c;酱料市场的前景愈发广阔。而在这片广阔的市场中&#xff0c;海天味业&#xff0c;作为中国调…

ElasticSearch-Windows系统ElasticSearch(ES)的下载及安装

前言 下载ElasticSearch 可以进入ElasticSearch官方下载地址&#xff0c;选择与电脑系统相对应的版本&#xff1b;博主已经上传资源&#xff0c;或者点此直接免费下载&#xff0c;本次演示版本为8.14.1。 注意&#xff1a; Elasticsearch 5 需要 Java 8 以上版本&#xff1b;…

Excel 宏录制与VBA编程 ——VBA编程技巧篇一 (Union方法、Resize方法、Cells方法、UseSelect方法、With用法)

Uniom方法 使用Union方法可以将多个非连续区域连接起来成为一个区域&#xff0c;从而可以实现对多个非连续区域一起进行操作。 Resize方法 使用Range对象的Resize属性调整指定区域的大小&#xff0c;并返回调整大小后的单元格区域。 Cells方法 Cells属性返回一个Range对象。 Us…

基于Java的大学生租房系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架&#xff0c;MVC模式 工具&#xff1a;Vscode&#xff0c;MySQL&#xff0c;B/S架构…

计算机网络之OSI七层体系结构

目录 1.物理层 1.1物理层组成 1.2物理层功能 1.3物理层服务 1.4物理层标准 1.5物理层接口 2.数据链路层 2.1基于物理层的问题 2.2数据链路层功能 2.3数据链路层服务 2.4数据链路层协议 3.网络层 3.1基于DL层的问题 3.2网络层功能 3.3网络层服务 3.4网络层协议 …

根据肥胖类型选择减调方向收获窈窕身材

我们生活中胖子很多&#xff0c;从胖到瘦的人也不少&#xff0c;但瘦了后对自己身材满意的人却是不多的&#xff0c;很多人瘦了也只是减掉了身上的赘肉而已&#xff0c;大体的身形却是没有变化的&#xff0c;因此&#xff0c;并不感到满意。因为他们本身的形体是固定的&#xf…

拼多多面试总结

文章目录 一面自我介绍提问算法反问结果 二面提问算法反问结果 主管面主管面试准备算法题其他个人提问准备 提问数据库普通索引和覆盖索引的区别索引是什么&#xff1f;索引怎么加快数据库查询的&#xff1f;索引具体怎么实现的&#xff1f;以B树为例&#xff0c;节点放了什么&…

java生成excel,uniapp微信小程序接收excel并打开

java引包&#xff0c;引的是apache.poi <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version></dependency> 写一个测试类&#xff0c;把excel输出到指定路径 public s…

leetcode494. 目标和

1.思想方法 2.代码 class Solution { public int findTargetSumWays(int[] nums, int target) {int sum 0;for(int num : nums)sum num;if(sum < Math.abs(target) || (targetsum)%2 ! 0)return 0;int x (targetsum) / 2,n nums.length;//基于滚动数组的方法int[] dp…

JavaWeb-day28_HTML

今日内容 零、 复习昨日 一、HTML 零、 复习昨日 一、Web开发 前端三大件 HTML ,页面展现CSS , 样式JS (JavaScript) , 动起来 二、HTML 2.1 HTML概念 ​ 网页&#xff0c;是网站中的一个页面&#xff0c;通常是网页是构成网站的基本元素&#xff0c;是承载各种网站应用的平台…