一個基於百度飛槳封裝的.NET版本OCR工具類庫 - PaddleOCRSharp

追逐時光者發表於2023-11-08

前言

大家有使用過.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支援?。

https://gitee.com/raoyutian/paddle-ocrsharp

優秀專案和框架精選

該專案已收錄到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開發者帶來更多的價值。

歡迎加入DotNetGuide技術交流群?

相關文章