前言
大家有使用過.NET開發過OCR工具嗎?今天給大家推薦一個基於百度飛槳封裝的.NET版本OCR工具類庫:PaddleOCRSharp。
專案官方介紹
PaddleOCRSharp 是一個基於百度飛槳PaddleOCR的.NET版本OCR工具類庫。專案核心元件PaddleOCR.dll,由C++編寫,根據百度飛槳PaddleOCR的C++程式碼修改並最佳化而成。目前已經支援C++、.NET、Python、Golang、Rust等開發語言的直接API介面呼叫。專案包含文字識別、文字檢測、表格識別功能。本專案針對小圖識別不準的情況下做了最佳化,比飛槳原始碼識別準確率有所提高。包含總模型僅8.6M的超輕量級中文OCR,單模型支援中英文數字組合識別、豎排文字識別、長文字識別。同時支援中英文、純英文以及多種語言文字檢測識別。
OCR工具有什麼用?
OCR(Optical Character Recognition)工具可以將影像或掃描檔案中的文字內容轉換成可編輯的文字格式。這項技術可以幫助人們快速準確地將掃描檔案、圖片中的文字提取出來,從而進行編輯、儲存和分析。
百度飛槳PaddleOCR介紹
PaddleOCR旨在打造一套豐富、領先、且實用的OCR工具庫,助力開發者訓練出更好的模型,並應用落地。
專案支援的.NET版本
net35;net40;net45;net451;net452;net46;net461;net462;net47;net471;net472;net48;net481;
netstandard2.0;netcoreapp3.1;
net5.0;net6.0;net7.0;net8.0
專案原始碼
示例專案執行(PaddleOCRSharpDemo)
設定啟動專案
注意該示例專案只支援X64位程式。
.NET示例專案編譯
注意:如果因框架編譯問題無法編譯,請修改PaddleOCRSharp\PaddleOCRSharp.csproj檔案【或雙擊專案】,刪除當前電腦環境沒有的框架,只保留你想要的.NET框架。
<TargetFrameworks>
net35;net40;net45;net451;net452;net46;net461;net462;net47;net471;net472;net48;net481;
netstandard2.0;netcoreapp3.1;
net5.0;net6.0;net7.0;net8.0
</TargetFrameworks>
如我的本地環境沒有安裝.net8,那就刪除對應版本即可。
下載對應模型
OCR識別模型庫支援官方所有的模型,也支援自己訓練的模型。完全按照飛槳OCR介面搭橋。本專案部署自帶的一種輕量版8.6M模型庫、伺服器版模型庫(更準確,需要自行下載),可以自行更改模型庫適用實際需求。
下載地址:https://gitee.com/raoyutian/paddle-ocrsharp#%E6%A8%A1%E5%9E%8B
或者複製原始碼對應位置paddle-ocrsharp-dev\paddle-ocrsharp-dev\PaddleOCRSharp\PaddleOCRLib\inference
下面的模型到專案輸出目錄中:
將下載的模型放到對應檔案專案目錄下
/// <summary>
/// PaddleOCR識別引擎物件初始化
/// </summary>
/// <param name="config">模型配置物件,如果為空則按預設值</param>
/// <param name="parameter">識別引數,為空均按預設值</param>
public PaddleOCREngine(OCRModelConfig config, OCRParameter parameter = null) : base()
{
CheckEnvironment();
if (parameter == null) parameter = new OCRParameter();
if (config == null)
{
string root= GetRootDirectory();
config = new OCRModelConfig();
string modelPathroot = root + @"\inference";
config.det_infer = modelPathroot + @"\ch_PP-OCRv4_det_infer";
config.cls_infer = modelPathroot + @"\ch_ppocr_mobile_v2.0_cls_infer";
config.rec_infer = modelPathroot + @"\ch_PP-OCRv4_rec_infer";
config.keys = modelPathroot + @"\ppocr_keys.txt";
}
if (!Directory.Exists(config.det_infer)) throw new DirectoryNotFoundException(config.det_infer);
if (!Directory.Exists(config.cls_infer)) throw new DirectoryNotFoundException(config.cls_infer);
if (!Directory.Exists(config.rec_infer)) throw new DirectoryNotFoundException(config.rec_infer);
if (!File.Exists(config.keys)) throw new FileNotFoundException(config.keys);
Initialize(config.det_infer, config.cls_infer, config.rec_infer, config.keys, parameter);
}
無法載入 DLL“PaddleOCR.dll”: 找不到指定的模組
將下面的dll複製到對應的輸出目錄中:
|--libiomp5md.dll //第三方引用庫
|--mkldnn.dll //第三方引用庫
|--mklml.dll //第三方引用庫
|--opencv_world470.dll //第三方引用庫
|--paddle_inference.dll //飛槳庫
|--PaddleOCR.dll
本專案依賴VC++2017X64執行庫,請檢查機器上是否安裝VC++依賴庫。2.0.4及以上版本,免安裝VC++2017X64執行庫
示例專案執行截圖
檔案識別
截圖識別
剪下板表格
專案原始碼地址
更多專案實用功能和特性歡迎前往專案開源地址檢視?,別忘了給專案一個Star支援?。
優秀專案和框架精選
該專案已收錄到C#/.NET/.NET Core優秀專案和框架精選中,關注優秀專案和框架精選能讓你及時瞭解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和質量。坑已挖,歡迎大家踴躍提交PR推薦或自薦(讓優秀的專案和框架不被埋沒?
)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
加入DotNetGuide技術交流群
1、提供.NET開發者分享自己優質文章的群組和獲取更多全面的C#/.NET/.NET Core學習資料、影片、文章、書籍,社群組織,工具和常見面試題資源,幫助大家更好地瞭解和使用 .NET技術。
2、在這個群裡,開發者們可以分享自己的專案經驗、遇到的問題以及解決方案,傾聽他人的意見和建議,共同成長與進步。
3、可以結識更多志同道合的開發者,甚至可能與其他開發者合作完成有趣的專案。透過這個群組,我們希望能夠搭建一個積極向上、和諧友善的.NET技術交流平臺,為廣大.NET開發者帶來更多的價值。