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

news2024/10/10 6:21:43

      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)

效果如下

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

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

相关文章

基于Cisco的校园网络拓扑搭建

特此说明:请先看评论区留言哦~ 一、基础配置 1.新建拓扑图 2.服务器配置 3.PC端配置 4.核心交换机配置 a.CORE-S1 Switch>enable Switch#configure terminal Switch(config)#hostname CORE-S1 CORE-S1(config)#vlan 10 CORE-S1(config-vlan)#vlan 20 CO…

【低功耗设计】功耗模型和PTPX功耗分析流程

本文目录 功耗的构成1.静态功耗2.动态功耗1)内部功耗(internal power)2)翻转功耗(switch power) 功耗的分析功耗分析流程averaged power analysistime-based power analysis 从芯片设计到芯片量产的过程中功…

论文导读 | Manufacturing Service Operations Management近期文章精选

编者按 在本系列文章中,我们梳理了顶刊Manufacturing & Service Operations Management5月份发布有关OR/OM以及相关应用的文章之基本信息,旨在帮助读者快速洞察行业/学界最新动态。 推荐文章1 ● 题目:Robust Drone Delivery with Weath…

Web渗透:php反序列化漏洞

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

YOLOv10使用教程及导读

首先推荐一下我的YOLOv8/v10项目,仅需一个v8的钱(69.9),付费进群,即可获取v8/v10的全部改进,欢迎进群。 1 YOLOv10简介 论文链接:https://arxiv.org/pdf/2405.14458 官方代码链接:ht…

springboot集成达梦数据库,打包后,tomcat中启动报错

背景&#xff1a;springboot集成达梦数据库8&#xff0c;在工具idea中正常使用&#xff0c;但是打包后&#xff0c;无法启动&#xff0c;报错 pom引入的依赖 但是这种情况&#xff0c;只有在idea中启动没问题的解决方法 需要修改引入的依赖&#xff0c;再次打包就可以 <d…

数据库课程知识点总结

数据库概述 数据库基本特点&#xff1a;数据结构化&#xff0c;数据独立性&#xff0c;数据冗余小&#xff0c;易扩充&#xff0c;统一管理和控制&#xff0c;永久存储&#xff0c;有组织&#xff0c;可共享 三级模式 模式&#xff1a;一个数据库只有一个模式&#xff0c;是对…

【从0实现React18】 (六) 完成commit提交流程并初步实现react-dom包,完成首屏渲染测试

前面&#xff0c;我们提到 React 更新流程有四个阶段&#xff1a; 触发更新&#xff08;Update Trigger&#xff09;调度阶段&#xff08;Schedule Phase&#xff09;协调阶段&#xff08;Reconciliation Phase&#xff09;提交阶段&#xff08;Commit Phase&#xff09; 之前…

IEEE JSTSP综述:从信号处理领域分析视触觉传感器的研究

触觉传感器是机器人系统的重要组成部分&#xff0c;虽然与视觉相比触觉具有较小的感知面积&#xff0c;但却可以提供机器人与物体交互过程中更加真实的物理信息。 视觉触觉传感是一种分辨率高、成本低的触觉感知技术&#xff0c;被广泛应用于分类、抓取、操作等领域中。近期&a…

JavaWeb——MySQL:DDL

目录 3.DQL&#xff1a;查询 3.5 分页查询 ​编辑 总结&#xff1a; 3. DQL&#xff1a;查询 查询是使用最多、最频繁的操作&#xff0c;因为前面的修改以及删除&#xff0c;一般会交给数据库专业的人员&#xff0c;对于非数据库专业人员来说&#xff0c;老板一般会放心的…

vue3使用v-html实现文本关键词变色

首先看应用场景 这有一段文本内容&#xff0c;是项目的简介&#xff0c;想要实现将文本中的关键词进行变色处理 有如下关键词 实现思路 遍历文本内容&#xff0c;找到关键词&#xff0c;并使用某种方法更改其字体样式。经过搜寻资料决定采用v-html实现&#xff0c;但是v-h…

数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)

数据库管理210期 2024-06-22 数据库管理-第210期 HaloDB-Oracle兼容性测试02&#xff08;20240622&#xff09;1 表增加列2 约束3 自增列4 虚拟列5 表注释6 truncat表总结 数据库管理-第210期 HaloDB-Oracle兼容性测试02&#xff08;20240622&#xff09; 作者&#xff1a;胖头…

一些css记录

background-blend-mode 定义了背景层的混合模式&#xff08;图片与颜色&#xff09;。菜鸟教程地址 例如&#xff1a; filter 滤镜 background-clip 背景颜色出现位置&#xff0c;是否包含边框 border-box | padding-box | content-box 有点像盒子模型 border-image-sou…

【Linux】使用ntp同步时间

ntp介绍 NTP&#xff08;Network Time Protocol&#xff0c;网络时间协议&#xff09;是一种用于同步计算机时间的协议&#xff0c;工作在UDP的123端口上。它是一种客户端-服务器协议&#xff0c;用于同步计算机的时钟。通过连接到网络上的时间服务器&#xff0c;计算机可以获…

记因hive配置文件参数运用不当导致 sqoop MySQL导入数据到hive 失败的案例

sqoop MySQL导入数据到hive报错 ERROR tool.ImportTool: Encountered IOException running import job: java.io.IOException: Hive exited with status 64 报错解释&#xff1a; 这个错误表明Sqoop在尝试导入数据到Hive时遇到了问题&#xff0c;导致Hive进程异常退出。状态码…

【数据结构】--顺序表

&#x1f47b;个人主页: 起名字真南 &#x1f47e;个人专栏: [数据结构初阶] [C语言] 目录 1 线性表2 顺序表2.1 概念和结构2.2 顺序表的实现2.2.1 头文件的定义2.2.2 初始化2.2.3 检查空间大小2.2.4 尾插2.2.5 打印2.2.6 头插2.2.7 查找指定数据2.2.8 头删2.2.9 尾删 2倍 1 线…

浏览器扩展V3开发系列之 chrome.contextMenus 右键菜单的用法和案例

【作者主页】&#xff1a;小鱼神1024 【擅长领域】&#xff1a;JS逆向、小程序逆向、AST还原、验证码突防、Python开发、浏览器插件开发、React前端开发、NestJS后端开发等等 chrome.contextMenus 允许开发者向浏览器的右键菜单添加自定义项。 在使用 chrome.contextMenus 之前…

基于 Redis 实现秒杀资格判断,提升并发性能

在互联网电商平台上&#xff0c;秒杀活动往往会吸引大量用户同时抢购&#xff0c;如何高效地处理高并发请求&#xff0c;保证用户体验&#xff0c;是一个重要的技术挑战。本文将介绍如何基于 Redis 实现秒杀资格的判断&#xff0c;提高并发性能。 基本思路 秒杀活动的核心流程…

SpringBoot整合MongoDB JPA使用

一、整合MongoDB SpringDataMongoDB是 SpringData家族成员之一&#xff0c;MongoDB的持久层框架&#xff0c;底层封装了 mongodb-driver。mongodb-driver 是 MongoDB官方推出的 Java连接 MongoDB的驱动包&#xff0c;相当于JDBC驱动。 SpringBoot整合 MongoDB&#xff0c;引入…