一款高速的NET版的离线免费OCR

PaddleOCR.Onnx

一款基于Paddle的OCR,项目使用ONNX模型,速度更快。本项目同时支持X64和X86的CPU上使用。本项目是一个基于PaddleOCR的C++代码修改并封装的.NET的工具类库。包含文本识别、文本检测、基于文本检测结果的统计分析的表格识别功能,同时针对小图识别不准的情况下,做了优化,提高识别准确率。包含总模型仅8.6M的超轻量级中文OCR,单模型支持中英文数字组合识别、竖排文本识别、长文本识别。同时支持多种文本检测。项目封装极其简化,实际调用仅几行代码,极大的方便了中下游开发者的使用和降低了PaddleOCR的使用入门级别,同时提供不同的.NET框架使用,方便各个行业应用开发与部署。Nuget包即装即用,可以离线部署,不需要网络就可以识别的高精度中英文OCR。

目前不支持win7及以下操作系统。

dec56e08a169523b96128fddb22ad8bd.png

本项目目前支持以下NET框架:

net461;net462;net47;net471;net48;
netstandard2.0;netcoreapp3.1;
net5.0;net6.0;

OCR识别模型库支持官方所有的模型,也支持自己训练的模型。

本项目部署自带的一种轻量版8.6M模型库、服务器版模型库(更准确,需要自行下载),可以自行更改模型库适用实际需求。

PaddleOCR模型下载地址

模型需要转成ONNX格式才能被本项目所使用。

如果需要修改成服务器版模型库,参考代码如下:(假设服务器版模型库在运行目录的文件夹inferenceserver下)

OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";
if (ofd.ShowDialog() != DialogResult.OK) return;
var imagebyte = File.ReadAllBytes(ofd.FileName);Bitmap bitmap = new Bitmap(new MemoryStream(imagebyte));//自带轻量版中英文模型// OCRModelConfig config = null;//服务器中英文模型//OCRModelConfig config = new OCRModelConfig();//string root = Environment.CurrentDirectory;//string modelPathroot = root + @"\inferenceserver";//config.det_infer = modelPathroot + @"\ch_ppocr_server_v2.0_det_infer.onnx";//config.cls_infer = modelPathroot + @"\ch_ppocr_mobile_v2.0_cls_infer.onnx";//config.rec_infer = modelPathroot + @"\ch_ppocr_server_v2.0_rec_infer.onnx";//config.keys = modelPathroot + @"\ppocr_keys.txt";//英文和数字模型OCRModelConfig config = new OCRModelConfig();string root = Environment.CurrentDirectory;string modelPathroot = root + @"\en";config.det_infer = modelPathroot + @"\ch_PP-OCRv2_det_infer";config.cls_infer = modelPathroot + @"\ch_ppocr_mobile_v2.0_cls_infer.onnx";config.rec_infer = modelPathroot + @"\en_number_mobile_v2.0_rec_infer.onnx";config.keys = modelPathroot + @"\en_dict.txt";OCRParameter oCRParameter = new  OCRParameter ();OCRResult ocrResult = new OCRResult();//建议程序全局初始化一次即可,不必每次识别都初始化,容易报错。PaddleOCREngine engine = new PaddleOCREngine(config, oCRParameter);{ocrResult = engine.DetectText(bitmap );}if (ocrResult != null){MessageBox.Show(ocrResult.Text,"识别结果");}//不再用OCR时,请把PaddleOCREngine释放

.NET使用示例

OpenFileDialog ofd = new OpenFileDialog();ofd.Filter = "*.*|*.bmp;*.jpg;*.jpeg;*.tiff;*.tiff;*.png";if (ofd.ShowDialog() != DialogResult.OK) return;var imagebyte = File.ReadAllBytes(ofd.FileName);Bitmap bitmap = new Bitmap(new MemoryStream(imagebyte));OCRModelConfig config = null;OCRParameter oCRParameter = new  OCRParameter ();OCRResult ocrResult = new OCRResult();//建议程序全局初始化一次即可,不必每次识别都初始化,容易报错。PaddleOCREngine engine = new PaddleOCREngine(config, oCRParameter);{ocrResult = engine.DetectText(bitmap );}if (ocrResult != null){MessageBox.Show(ocrResult.Text,"识别结果");}//不再用OCR时,请把PaddleOCREngine释放

QQ交流群:818391797,318860399,有问题可以加QQ群咨询。

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

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

相关文章

spring 注解简单使用

一、通用注解 1、项目结构: 2、新建Person类,注解Component未指明id,则后期使用spring获取实例对象时使用默认id"person"方式获取或使用类方式获取 package hjp.spring.annotation.commen;import org.springframework.stereotype.C…

《假如编程是魔法之零基础看得懂的Python入门教程 》——(三)使用初始魔法跟编程魔法世界打个招呼吧

学习目标 完成显示魔法的使用——输出print完成传入魔法的使用——输入input使魔法生效——运行python文件 目录 第一篇:《假如编程是魔法之零基础看得懂的Python入门教程 》——(一)既然你选择了这系列教程那么我就要让你听得懂 第二篇&am…

查缺补漏系统学习 EF Core 6 (一)

推荐关注「码侠江湖」加星标,时刻不忘江湖事掌握 ORM 开发方式是每一个 .NET 开发者所必备的技能,而且 .NET 平台有很多优秀的 ORM 框架。很多人都会诟病 .NET 官方标配的 Entity Framework,感觉其笨重难用、性能低下。但其实经过多年发展&am…

【经典回放】JavaScript学习详细干货笔记之(一)

【经典回放】JavaScript学习详细干货笔记之(一) 【经典回放】JavaScript学习详细干货笔记之(二) 【经典回放】JavaScript学习详细干货笔记之(三) 目录 一、为什么要学JavaScript 二、JavaScript经典案例 …

TCP之三次握手和四次挥手过程

1 TCP包头里面的标志位 下图为TCP头部里面部分信息,入下标志位,每个标志位占一位。 标志位这里会涉及3个,ACK SYN FIN ACK:确认序号有效。 SYN:发起一个新连接。 FIN:释放一个连接。 2 三次握手过程 第一次握手 Client将标志位SYN置1,随机产生一个值seq=J,并将数…

gearman mysql编译_gearman初探(一、编译和安装)

gearman是一个任务分发系统,将计算比较耗时的任务分发给不同的机器专门进行计算,而任务发起的初始程序不必等待这些任务完成就可以返回而继 续执行。笔者最开始做PHP邮件发送的时候,因为邮件发送耗时比较长,这时PHP脚本就会被阻塞…

《假如编程是魔法之零基础看得懂的Python入门教程 》——(四)了解魔法百宝箱列表、字典及基本数据类型

学习目标 了解魔法世界中可更改容器——变量了解魔法世界的基本数值类型——字符串、整数了解魔法百宝箱——字典、列表了解列表如何添加值了解字典如何添加值了解字典与列表定义的不同符号 目录 第一篇:《假如编程是魔法之零基础看得懂的Python入门教程 》——&…

TCP协议之如何保证传输的可靠性

一、问题 TCP协议之如何保证传输的可靠性?我们先看下TCP的头部图片和TCP头部的字段 /*TCP头定义,共20个字节*/ typedef struct _TCP_HEADER {short m_sSourPort;       // 源端口号16bitshort m_sDestPort;       // 目的端口号16bitunsigned int …

【工具篇】在Mac上开发.Net Core需要的工具

微信公众号:趣编程ACE关注可了解更多的.NET日常开发技巧,如需帮助,请后台留言;[如果觉得本公众号对您有帮助,欢迎关注]在Mac上开发.Net Core需要的工具如果您是一个.NET 开发者,想从Windows切换到Mac上开发.NET或者您已…

【Pix4d精品教程】Pix4Dmapper完整航测内业操作流程手把手图文教程

1. 作业流程图 2. 原始资料准备 原始资料包括影像数据、POS数据以及控制点数据。 确认原始数据的完整性,检查获取的影像中有没有质量不合格的相片。同时查看POS数据文件,主要检查航带变化处的相片号,防止POS数据中的相片号与影像数据相片号不对应,出现不对应情况应手动调…

mysql semi join_MySQL 5.6 Semi join优化之materialization strategy

8月 24, 2014 |Nix.Huang考虑如下查询:select * from Countrywhere Country.code IN (select City.Countryfrom Citywhere City.Population > 7*1000*1000)and Country.continentEurope这个子查询是非相关子查询,我们能和外层循环独立的执行它&#x…

【ArcGIS风暴】何为动态投影?这次全面为您揭开ArcGIS中动态投影的神秘面纱!

本课程配套蓝光视频: 【ArcGIS风暴】GIS动态投影问题 GISer们都见过以下警告,该警告的原因是当前加载的数据的坐标系和当前数据框坐标系不一致导致的,核心问题是地理坐标系不一致。如当前数据的坐标系是GCS_Xian_1980,而数据框的坐标系有可能是WGS_1984等,总之跟要加载的数…

《假如编程是魔法之零基础看得懂的Python入门教程 》——(五)我的魔法竟然有了一丝逻辑

学习目标 了解魔法世界中的结构表现——缩进了解魔法世界的逻辑判断——if了解魔法世界的多次逻辑判断——ifelse嵌套了解魔法世界中的逻辑运算——且 and 与或 or 推荐 1.《备受好评的看得懂的C语言入门教程》 目录 第一篇:《假如编程是魔法之零基础看得懂的P…

类和类之间的关系

一、类和类之间的关系 UML类图中,常见以下几种关系: 1、泛化(Generalization) 是一种继承关系,比如动物类和老虎类,老虎继承动物,子类如何特化父类的所有特征和行为 箭头指向:带三角箭头的实线&#xff0…

查缺补漏系统学习 EF Core 6 - 实体配置

推荐关注「码侠江湖」加星标,时刻不忘江湖事这是 EF Core 系列的第二篇文章,上一篇文章讲解了 EF Core 的一些基础概念,这一篇文章主要围绕实体属性的配置。点击上方或后方蓝字,阅读 EF Core 系列合集。实体配置配置实体的目的&am…

mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联

延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据。为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针?如果存的是物理地址指针不就不需要二次查找了吗,根据myisam和inn…

Android之在笔记本电脑adb devices识别不了oppo A9手机(设备管理器ADB Interface里面有个黄色感叹号)

1 问题 记本电脑adb devices识别不了oppo A9手机(设备管理器ADB Interface里面有个黄色感叹号) 图片如下 2 分析 很明显这里是驱动问题,ADB Interface有感叹号提示,所以这里需要解决驱动问题 3 解决办法 1)可以尝试…

《假如编程是魔法之零基础看得懂的Python入门教程 》——(六)精简魔法更强大

学习目标 了解对相似逻辑的简化编写——循环 推荐 1.《备受好评的看得懂的C语言入门教程》 目录 第一篇:《假如编程是魔法之零基础看得懂的Python入门教程 》——(一)既然你选择了这系列教程那么我就要让你听得懂 第二篇:《假…

Tiny模板语言(VelocityPlus)初步入门

2019独角兽企业重金招聘Python工程师标准>>> 1 关于用户手册 本文主要介绍如何在模板中使用Tiny模板语言,通过查阅本手册,可以对Tiny模板语言 TTL(Tiny Template Language)的用法有一个较全面的认识,并学会如何有效地使用Tiny模板…

『技术群里聊些啥』.NET 如何计算文件 MD5 哈希

前言有网友在交流群中询问,文件 MD5 是全部读取到内存后计算出来的,还是拿到流就可以计算出来了:原理上来说,MD5 需要对全部内容做运算,所以应该是获取所有内容后再计算的。但是,如果全部读取到内存后再计算…