一款高速的NET版的離線免費OCR

明月心技術學堂發表於2022-05-12

PaddleOCR.Onnx

一款基於Paddle的OCR,專案使用ONNX模型,速度更快。本專案同時支援X64和X86的CPU上使用。本專案是一個基於PaddleOCR的C++程式碼修改並封裝的.NET的工具類庫。包含文字識別、文字檢測、基於文字檢測結果的統計分析的表格識別功能,同時針對小圖識別不準的情況下,做了優化,提高識別準確率。包含總模型僅8.6M的超輕量級中文OCR,單模型支援中英文數字組合識別、豎排文字識別、長文字識別。同時支援多種文字檢測。專案封裝極其簡化,實際呼叫僅幾行程式碼,極大的方便了中下游開發者的使用和降低了PaddleOCR的使用入門級別,同時提供不同的.NET框架使用,方便各個行業應用開發與部署。Nuget包即裝即用,可以離線部署,不需要網路就可以識別的高精度中英文OCR。

 目前不支援win7及以下作業系統。

微信公眾號:明月心技術學堂,

本專案目前支援以下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,"識別結果");
 }

.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,"識別結果");
 }

QQ交流群:818391797,318860399,有問題可以加QQ群諮詢。


相關文章