一款高速的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.pswp.cn/news/287745.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287745.shtml
英文地址,請注明出處:http://en.pswp.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…

selenium+python筆記3

#!/usr/bin/env python # -*- coding: utf-8 -*- """ desc:學習unittest的用法 注意setUp/setUpClass,tearDown/tearDownClass的區別 ① setUp():每個測試函數運行前運行 ② tearDown():每個測試函數運行完后執行 ③ setUpClass():必須使用classmeth…

【學生選課系統經典】C#與SQLSERVER連接:ASP.NET網站(服務器端,IIS發布)

實驗任務描述 1 用C#訪問SQLSERVER數據庫(兩種安全模式); 2 用C#完成數據庫指定表上的數據顯示; 3 用C#完成數據庫指定表上的數據插入、刪除和更新; 4 用C#完成數據庫用戶驗證。 此處使用ASP.NET工程來完成這個項目,和Windows應用不同的是:這個項目是在服務器上、依靠IIS服…

TCP包頭、UDP包頭、IP包頭、和MAC幀包頭詳細字段和包頭大小

1 TCP頭 TCP是一種可靠的、面向連接的字節流服務,頭部定義如下。 /*TCP頭定義,共20個字節*/ typedef struct _TCP_HEADER {short m_sSourPort;       // 源端口號16bitshort m_sDestPort;       // 目的端口號16bitunsigned int m_uiSequNum; …

經典面試題:用戶反映你開發的網站訪問很慢可能會是什么原因

原文鏈接:http://blog.csdn.net/lv_victor/article/details/53148421 問題場景:某個用戶向你反映說你開發的網站訪問速度很慢,但是該用戶訪問其他問題很正常,分析下原因、有哪些工具分析原因、怎么解決問題? 最近面試兩…

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

學習目標 完成顯示魔法的使用——輸出print完成傳入魔法的使用——輸入input使魔法生效——運行python文件 目錄 第一篇:《假如編程是魔法之零基礎看得懂的Python入門教程 》——(一)既然你選擇了這系列教程那么我就要讓你聽得懂 第二篇&am…

查缺補漏系統學習 EF Core 6 (一)

推薦關注「碼俠江湖」加星標,時刻不忘江湖事掌握 ORM 開發方式是每一個 .NET 開發者所必備的技能,而且 .NET 平臺有很多優秀的 ORM 框架。很多人都會詬病 .NET 官方標配的 Entity Framework,感覺其笨重難用、性能低下。但其實經過多年發展&am…

mysql 5.5 mysqldump_mysql 5.5 mysqldump 原文翻譯

根據mysql 5.5第6.4章節理解和自己翻譯水平有限如有紕漏請指教,原文如下.6.4 使用mysqldump備份(Using mysqldump for Backups)首先多余的不用說了備份用來干什么大家都清楚。mysqldump備份分兩種輸出形式:1. 無--tab選項,輸出標準的SQL格式。輸出包含CR…

【經典回放】JavaScript學習詳細干貨筆記之(一)

【經典回放】JavaScript學習詳細干貨筆記之(一) 【經典回放】JavaScript學習詳細干貨筆記之(二) 【經典回放】JavaScript學習詳細干貨筆記之(三) 目錄 一、為什么要學JavaScript 二、JavaScript經典案例 …

Java Attach API

catalog 1. instrucment與Attach API 2. BTrace: VM Attach的兩種方式 3. Sun JVM Attach API 1. instrucment與Attach API JDK5中增加了一個包java.lang.instrucment,能夠對JVM底層組件進行訪問。在JDK 5中,Instrument 要求在運行前利用命令行參數或者系…

TCP之三次握手和四次揮手過程

1 TCP包頭里面的標志位 下圖為TCP頭部里面部分信息,入下標志位,每個標志位占一位。 標志位這里會涉及3個,ACK SYN FIN ACK:確認序號有效。 SYN:發起一個新連接。 FIN:釋放一個連接。 2 三次握手過程 第一次握手 Client將標志位SYN置1,隨機產生一個值seq=J,并將數…

Handler 機制分析

android 子線程和UI線程的交互主要使用Handler的方法進行通信。本文分析Handler機制 Handler 如何使用? Handler的使用比較簡單 public class MainActivity extends Activity{private Handler handler new Handler() { public void handleMessage(Message msg) { …

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數據中的相片號與影像數據相片號不對應,出現不對應情況應手動調…

關于構造函數和this調用的思考

文中一系列思考和內容引發自以下問題:我需要在一個類的構造函數中調用另一個對象的構造函數,并使用this初始化其中的一個引用成員。 主要遇到的問題: 1. 構造函數的初始化列表中能訪問this嗎? 很明顯c創建一個對象分為兩部分&…

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等,總之跟要加載的數…