C# 使用 PaddleOCRSharp 识别 图片中的文字、 使用QRCoder生成二维码
使用PaddleOCRSharp识别图片中的文字
在只用PaddleOCRSharp之前用过另外一种识别:Tesseract。它识别速度是非常快的,但是准确率堪忧,而且使用的时候需要区分语言,这里权当一些经验交流,不是说Tesseract不好。
PaddleOCRSharp资料汇总:
开源工具开发者博客:https://www.cnblogs.com/raoyutian/p/15938913.html
GitHub:https://github.com/raoyutian/PaddleOCRSharp
Gitee:https://gitee.com/raoyutian/paddle-ocrsharp
如何使用PaddleOCRSharp在GitHub源码中有一个PaddleOCRDemo项目是有完整的代码实现,里面功能比较齐全

VS版本:VS2022,使用其他版本无法加载源码
而且作者也写了一篇博客 https://www.cnblogs.com/raoyutian/p/15912470.html。
1.将源码编译成对应的.Net 版本引入到项目中
在作者给出的示例中是直接使用的Nuget包进行的管理,我在尝试的时候没有使用成功,所以采用了引用Dll的方式。
这里有一个版本的问题。如果是4.0的最新版本的话识别速度会比较慢,而老版本3.0版本会比较快,更换模型需要自己去GitHub主页下载对应的模型复制到PaddleOCRLib\inference文件夹下,改对应的调用代码。

解决办法
复制到PaddleOCRLib\inference

修改调用代码


2. 初始化PaddleOCREngine
```
private PaddleOCREngine engine;
OCRModelConfig config = null;
//OCR参数
OCRParameter oCRParameter = new OCRParameter();
oCRParameter.cpu_math_library_num_threads = 10;//预测并发线程数
oCRParameter.enable_mkldnn = true;//web部署该值建议设置为0,否则出错,内存如果使用很大,建议该值也设置为0.
oCRParameter.cls = false; //是否执行文字方向分类;默认false
oCRParameter.det = true;//是否开启方向检测,用于检测识别180旋转
oCRParameter.use_angle_cls = false;//是否开启方向检测,用于检测识别180旋转
oCRParameter.det_db_score_mode = true;//是否使用多段线,即文字区域是用多段线还是用矩形,
oCRParameter.max_side_len = 1500;
oCRParameter.rec_img_h = 48;
oCRParameter.rec_img_w = 320;
oCRParameter.det_db_thresh = 0.3f;
oCRParameter.det_db_box_thresh = 0.618f;
//初始化OCR引擎
engine = new PaddleOCREngine(config, oCRParameter);
//模型配置,使用默认值
StructureModelConfig structureModelConfig = null;
//表格识别参数配置,使用默认值
StructureParameter structureParameter = new StructureParameter();
structengine = new PaddleStructureEngine(structureModelConfig, structureParameter);
3. 调用DetectText识别文字
OCRResult ocrResult = engine.DetectText(imagebyte);
4. 使用QRCoder生成二维码
public static Bitmap GetQRCodeImage(string qrCode)
{ //获取含水印的二维码图像对象
QRCodeGenerator generator = new QRCodeGenerator();
QRCodeData data = generator.CreateQrCode(qrCode, QRCodeGenerator.ECCLevel.M); //qrCode是二维码内容,ECCLevel用于设置容错率
QRCode code = new QRCode(data);
//Bitmap icon = new Bitmap("水印文件路径");
//定义二维码中央水印图标,文件路径一定要是绝对路径,如果是Web工程,可用Server.MapPath函数获取绝对路径
//icon:由于这里没水印图片,所以用null
Bitmap qrImage = code.GetGraphic(10, Color.Black, Color.White,null, 15, 6, true);
//获得含水印的二维码图像信息,如不需要水印可以调用另外函数:Bitmap qrImage = code.GetGraphic(10);
return qrImage;
}
如果在使用中遇到: System.DIINotFoundException: 无法动载DLL PaddleOCR.dll找不到指定的模块。

需要将下面这些dll(文件在开源作者PaddleOCRSharp\PaddleOCRLib文件夹里面)复制到debug文件夹中:
libiomp5md.dll
mkldnn.dll
mklml.dll
opencv_world470.dll
paddle_inference.dll
PaddleOCR.dll
C# 使用 PaddleOCRSharp 识别 图片中的文字、 使用QRCoder生成二维码的更多相关文章
- java--实现将文字生成二维码图片,并在中间附上logo,下方附上文字
前段时间因为工作需要,要实现将一段文字或者url生成二维码,然后中间附上logo,下方正中间附上文字的功能. 上网找了几篇教程学习了下,由于没有保存借鉴的博文链接,所以就没po上参考文章的链接啦,感谢 ...
- HTML5实现扫描识别二维码/生成二维码
扫描识别二维码 思路: 1. 操作摄像头,获取图片.HTML5 WEBRTC的navigator.getUserMedia方法去实时获取摄像头资源. 2. 利用canvas使用相关算法分析图片识别图 ...
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
- Node.js在指定的图片模板上生成二维码图片并附带底部文字说明
在Node.js中,我们可以通过qr-image包直接在后台生成二维码图片,使用方法很简单: var qr = require('qr-image'); exports.createQRImage = ...
- java后台中处理图片辅助类汇总(上传图片到服务器,从服务器下载图片保存到本地,缩放图片,copy图片,往图片添加水印图片或者文字,生成二维码,删除图片等)
最近工作中处理小程序宝箱活动,需要java画海报,所以把这块都快百度遍了,记录一下处理的方法,百度博客上面也有不少坑! 获取本地图片路径: String bgPath = Thread.current ...
- qrcode.js的识别解析二维码图片和生成二维码图片
qrcode只通过前端就能生成二维码和解析二维码图片, 首先要引入文件qrcode.js,下载地址为:http://static.runoob.com/download/qrcodejs-04f46c ...
- 【java】google的zxing架包生成二维码和读取二维码【可带文字和logo】
承接RC4生成不重复字符串的需求之后,因为优惠码要方便用户使用的缘故,所以思来想去,觉得还是直接生成二维码给用户直接扫比较实用,也不用用户专门记录冗长的优惠码编号. ================= ...
- java 通过Qrcode生成二维码添加图片logo和文字描述
/** * 二维码创建 * @author yhzm * */ public class printServiceImpl extends BaseService { public void barC ...
- ios 中生成二维码和相册中识别二维码
iOS 使用CIDetector扫描相册二维码.原生扫描 原生扫描 iOS7之后,AVFoundation让我们终于可以使用原生扫描进行扫码了(二维码与条码皆可)AVFoundation可以让我们从设 ...
- 关于zxing生成二维码,在微信长按识别不了问题
在做校园学生到校情况签到系统时,我采用了zxing作为二维码生成工具.在测试的时候使用微信打开连接发现.我长按我的二维码之后,总是不会出现以下这种识别二维码的选项. 这就大大的降低了用户的体验,只能大 ...
随机推荐
- Docker Harbor的安装配置
1.先安装docker-compose curl -L http://github.com/docker/compose/releases/download/1.21.2/docker-compose ...
- 七牛云 + PicGo
下载PicGo https://github.com/Molunerfinn/PicGo/releases/tag/v2.3.1 七牛云配置 1.AccessKey和SecretKey:可以在七牛云控 ...
- 【论文阅读】Causal Imitative Model for Autonomous Driving
Sensor/组织: EPFL Sharif University of Technology Status: Finished Summary: 看看框架图就行.高效缓解因果混淆问题,将因果作为学习 ...
- KES数据库实践指南:探索KES数据库的事务隔离级别
引言 前两篇文章我们详细讲解了如何安装KES金仓数据库,并提供了快速查询和搭建基于coze平台的智能体的解决方案.今天,我们的焦点将放在并发控制机制和事务隔离级别上. 本文将通过一系列实验操作,深入探 ...
- throws和try catch的区别
1.throws是表明方法抛出异常,需要调用者来处理,如果不想处理就一直向外抛,最后会有jvm来处理: 2.try catch 是自己来捕获别人抛出的异常,然后在catch里面去处理: 一般情况下,第 ...
- ABP框架开发实例教程-生成框架代码
ABP是"ASP.NET Boilerplate Project (ASP.NET样板项目)"的简称.ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB ...
- 在SelfHost项目中获取客户端IP地址
在SelfHost项目中,获取客户端的IP地址比OwinSelfHost项目要复杂一些,可以通过以下方法获得: base.Request.Properties["System.Service ...
- DownUnderCTF 2024 - Forensics
DownUnderCTF 2024 - Forensics Baby's First Forensics 他们整个上午都在试图破坏我们的基础设施!他们正试图获得更多关于我们秘密袋鼠的信息!我们需要您的 ...
- Restful和WebService区别
简介 Restful是一种架构风格,其核心是面向资源,更简单: 而webService底层SOAP协议,主要核心是面向活动: 两个都是通过web请求调用接口 RESTful是什么 REST就是(REp ...
- 七天.NET 8操作SQLite入门到实战 - (3)第七天Blazor学生管理页面编写和接口对接
前言 本章节的主要内容是完善Blazor学生管理页面的编写和接口对接. 七天.NET 8 操作 SQLite 入门到实战详细教程 第一天 SQLite 简介 第二天 在 Windows 上配置 SQL ...