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

2023-11-09 06:01:13

前言

大家有使用過.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

或者複製原始碼對應位置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執行庫

範例專案執行截圖

檔案識別

截圖識別

剪下板表格

專案原始碼地址

更多專案實用功能和特性歡迎前往專案開源地址檢視