博客 / 詳情

返回

使用 JYPPX.DeploySharp 高效部署 PaddleOCR,解鎖多種高性能 OCR 文字識別方案

使用 JYPPX.DeploySharp 高效部署 PaddleOCR,解鎖多種高性能 OCR 文字識別方案

本文介紹如何通過 DeploySharp 框架在 .NET 環境下部署 PaddleOCR 模型,支持 OpenVINO、TensorRT、ONNX Runtime 等多種推理引擎,實現百毫秒級文字識別。


目錄

  • 一、前言
  • 二、核心技術原理解析
  • 三、DeploySharp 架構優勢
  • 四、支持的推理設備
  • 五、快速開始指南
  • 六、性能測試與分析
  • 七、常見問題解答
  • 八、軟件獲取
  • 九、技術支持

一、前言

OCR(光學字符識別)技術在數字化辦公、文檔管理、票據識別等場景中發揮着重要作用。百度飛槳開源的 PaddleOCR 作為業界領先的 OCR 框架,以其優異的識別精度和豐富的功能特性深受開發者喜愛。

一年前,我基於自己開發的 OpenVINO C# API 項目,在 .NET 框架下使用 OpenVINO 部署工具部署 PaddleOCR 系列模型,推出了 PaddleOCR-OpenVINO-CSharp 項目。藉助 OpenVINO 在 CPU 上的強大推理優化能力,該項目成功實現了在純 CPU 環境下完成圖片文字識別、版面分析及表格識別等功能,推理速度可控制在 300 毫秒以內。

隨着項目的發展和應用場景的多樣化,單一推理引擎已無法滿足所有需求。近期,我將 OpenVINO、TensorRT、ONNX Runtime 等主流推理工具進行了統一封裝,推出了 DeploySharp 開源項目。該項目的核心優勢在於:

  • 統一接口:通過底層接口抽象,實現一套代碼適配多種推理引擎
  • 靈活部署:開發者可根據實際硬件環境選擇最優推理方案
  • 性能優化:充分發揮各推理引擎的硬件加速能力

得益於 DeploySharp 底層接口統一的優勢,開發者現在可以用同一段代碼在 OpenVINO、TensorRT、ONNX Runtime 等多種推理引擎間自由切換。近期,我們完成了 PaddleOCR 模型的支持更新,為 .NET 開發者提供了一套完整的 OCR 解決方案。

目前,PaddleOCR 功能已集成至 DeploySharp 開源項目中(代碼已上傳至倉庫,NuGet 包正在籌備中)。為了讓大家快速體驗新版 PaddleOCR 的極致性能,我們特別準備了 JYPPX.DeploySharp.OpenCvSharp.PaddleOcr.TestDemo 演示程序,支持即開即用,無需複雜配置。


二、核心技術原理解析

2.1 PaddleOCR 工作流程

PaddleOCR 採用經典的「檢測-分類-識別」三階段流水線架構:

輸入圖片
    │
    ▼
┌─────────────┐
│ 文本檢測     │ → 檢測圖片中的文本區域位置
│ (Detection) │
└─────────────┘
    │
    ▼
┌─────────────┐
│ 文本方向分類 │ → 判斷文本方向(180度翻轉等)
│ (Classifier)│
└─────────────┘
    │
    ▼
┌─────────────┐
│ 文本識別     │ → 識別文本區域的具體內容
│ (Recognition)│
└─────────────┘
    │
    ▼
輸出識別結果

2.2 三階段模型詳解

階段 模型名稱 輸入 輸出 作用
檢測 PP-OCRv5_det 原始圖片 (3xHxW) 文本框座標 定位文本區域
分類 PP-OCRv5_cls 裁剪文本框 (3x80x160) 方向標籤 糾正文本方向
識別 PP-OCRv5_rec 裁剪文本框 (3x48xL) 文本內容 識別字符序列

2.3 性能優化策略

  1. 模型量化:使用 int8 量化減小模型體積,提升推理速度
  2. 動態批處理:支持 Batch Size > 1,提高 GPU 利用率
  3. 併發推理:支持多線程併發處理,充分利用多核性能
  4. 硬件加速:針對不同硬件選擇最優計算後端

三、DeploySharp 架構優勢

DeploySharp 的核心設計理念是「統一接口,靈活部署」,其架構如下圖所示:

┌─────────────────────────────────────────────────────────┐
│                    應用層 (Application)                  │
│            PaddleOCR 文字識別 / 其他模型應用              │
└─────────────────────────────────────────────────────────┘
                            │
                            ▼
┌─────────────────────────────────────────────────────────┐
│                 DeploySharp 抽象接口層                    │
│  統一的模型加載 / 推理執行 / 資源管理接口                 │
└─────────────────────────────────────────────────────────┘
                            │
            ┌───────────────┼───────────────┐
            ▼               ▼               ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│   OpenVINO    │ │   TensorRT    │ │ ONNX Runtime  │
│   Engine      │ │   Engine      │ │    Engine     │
│  (CPU 優化)   │ │ (GPU 加速)    │ │ (跨平台支持)   │
└───────────────┘ └───────────────┘ └───────────────┘
            │               │               │
            ▼               ▼               ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│  Intel CPU    │ │  NVIDIA GPU   │ │ 多種硬件設備   │
│               │ │               │ │ (CPU/GPU/DML) │
└───────────────┘ └───────────────┘ └───────────────┘

主要優勢:

  • 零代碼切換:更換推理引擎無需修改業務代碼
  • 資源高效利用:自動管理模型生命週期和計算資源
  • 擴展性強:易於添加新的推理引擎支持
  • 生產就緒:經過充分測試,可直接用於生產環境

四、支持的推理設備

本演示程序支持多種主流推理後端,覆蓋從入門級設備到高性能服務器的各種場景:

推理引擎 支持設備 適用場景 性能特點
OpenVINO CPU 無 GPU 環境、Intel 處理器 CPU 優化,啓動快,穩定
TensorRT CUDA 11/12 NVIDIA GPU 高性能場景 GPU 加速,極致性能,需模型轉換
ONNX Runtime CPU CPU 跨平台部署 通用性強,性能中等
ONNX Runtime CUDA CUDA 12 NVIDIA GPU 環境部署 GPU 加速,開箱即用
ONNX Runtime TensorRT CUDA 12 NVIDIA GPU 高性能場景 GPU 加速 + TensorRT 優化
ONNX Runtime DML DML GPU Windows 平台多廠商 GPU 支持 AMD/NVIDIA/Intel GPU

性能提示:首次加載模型和推理時會較慢,這是正常現象(模型初始化和 JIT 編譯)。首次運行時請避免頻繁操作,待模型預熱完成後性能將顯著提升。


五、快速開始指南

5.1 程序界面概覽

運行程序後,主界面如下圖所示:

image-20260128211529014

核心操作説明:

操作項 説明 注意事項
推理後端 選擇使用的推理引擎 切換後需重新加載模型
模型路徑 預置模型路徑,一般無需修改 支持自定義模型路徑
圖像路徑 選擇待識別的圖片 支持 JPG/PNG/BMP 等格式
加載模型 加載指定模型到內存 首次使用必須執行
推理圖片 執行單次圖片識別 首次需預熱
時間測試 連續推理十次並統計平均耗時 用於性能評估
併發數量 調整推理併發線程數 修改後需重新加載模型
BatchSize 批量處理大小 可動態調整

5.2 OpenVINO 推理

OpenVINO 是 Intel 推出的開源工具套件,針對 CPU 和Intel IGPU進行了深度優化,特別適合無 GPU 環境下的高性能推理。

CPU使用步驟:

1.運行程序

程序主界面

2.在「推理後端」下拉框中選擇 OpenVINO

3.點擊「加載模型」

4.點擊「推理圖片」開始識別

image-20260128221119962

IGPU使用步驟:

英特爾集顯使用流程與上述一致,主要是設備要選擇GPU0

image-20260128221345165

混合設備使用步驟:

英特爾OpenVINO支持CPU+IGPU混合設備推理,即AUTO模式,OpenVINO會根據設備情況自主選擇,使用方式與上述一致,主要是設備要選擇AUTO

image-20260128221535531

適用場景:

  • 服務器環境部署
  • 低功耗設備
  • Intel CPU 用户
  • 對啓動速度要求高的場景

5.3 ONNX Runtime CPU 推理

ONNX Runtime 是微軟推出的跨平台推理引擎,支持多種硬件加速後端,CPU 模式無需任何依賴即可使用。

使用步驟:

  1. 運行程序
  2. 在「推理後端」下拉框中選擇 ONNX Runtime CPU
  3. 點擊「加載模型」
  4. 點擊「推理圖片」開始識別

ONNX Runtime CPU 選擇界面

適用場景:

  • 跨平台部署需求
  • 無 GPU 加速環境
  • 需要快速原型驗證

5.4 ONNX Runtime CUDA 推理

CUDA 是 NVIDIA 提供的並行計算平台,可充分利用 GPU 的並行計算能力實現顯著加速。

配置步驟

  1. 安裝 CUDA 驅動

    • 訪問 NVIDIA CUDA 官網
    • 下載並安裝 CUDA 12.x 版本(測試環境:CUDA 12.3)
  2. 複製依賴文件

    將以下 CUDA 相關 DLL 文件複製到程序運行目錄:

    CUDA 依賴文件

  3. 啓動推理

    運行程序,在「推理後端」下拉框中選擇 ONNX Runtime CUDA

    ONNX Runtime CUDA 選擇界面

依賴説明:

NuGet 包名 版本
Microsoft.ML.OnnxRuntime.Gpu.Windows 1.23.0
Microsoft.ML.OnnxRuntime.Managed 1.23.0

適用場景:

  • 擁有 NVIDIA 顯卡的設備
  • 對推理速度有較高要求
  • 需要快速部署無需模型轉換

5.5 ONNX Runtime TensorRT 推理

TensorRT 是 NVIDIA 推出的高性能深度學習推理優化器,結合 CUDA 加速可達到極致性能。

配置步驟

依賴文件複製方式與 CUDA 模式一致。

使用步驟

  1. 運行程序
  2. 在「推理後端」下拉框中選擇 ONNX Runtime TensorRT
  3. 點擊「加載模型」
  4. 點擊「推理圖片」開始識別

ONNX Runtime TensorRT 選擇界面

重要提示:首次運行推理時,TensorRT 會自動對 ONNX 模型進行優化編譯,此過程可能需要數分鐘,請耐心等待。編譯後的引擎文件會被緩存,後續推理速度將大幅提升。

依賴説明:

NuGet 包名 版本
Microsoft.ML.OnnxRuntime.Gpu.Windows 1.23.2
Microsoft.ML.OnnxRuntime.Managed 1.23.2

適用場景:

  • 對推理速度要求極高的生產環境
  • NVIDIA GPU 設備
  • 可接受首次運行較長的編譯時間

5.6 ONNX Runtime DML 推理

DirectML(DML)是 Windows 平台的高性能硬件加速接口,支持 AMD、NVIDIA 和 Intel 多廠商顯卡。

配置步驟

將 DML 相關 DLL 文件複製到程序運行目錄:

DML 依賴文件

使用步驟

  1. 運行程序
  2. 在「推理後端」下拉框中選擇 ONNX Runtime DML
  3. 點擊「加載模型」
  4. 點擊「推理圖片」開始識別

ONNX Runtime DML 選擇界面

適用場景:

  • Windows 平台用户
  • AMD 顯卡用户
  • 需要統一接口支持多品牌顯卡

5.7 TensorRTSharp 推理

TensorRTSharp 是對 NVIDIA TensorRT 的 C# 封裝,提供原生的 TensorRT 引擎加載和推理能力,支持 FP16 精度進一步提升性能。

環境準備

詳細的安裝和配置指南請參考:

https://mp.weixin.qq.com/s/D0c6j5MmraJO4Eza7tWm1A

TensorRTSharp 支持 CUDA 11 和 CUDA 12 兩個系列,請根據系統安裝的 CUDA 版本選擇對應的 DLL 文件。

配置步驟

  1. 替換 DLL 文件

    根據安裝的 CUDA 版本,將對應的 TensorRT DLL 文件複製到程序目錄:

    TensorRT DLL 文件

  2. 模型轉換

    使用 trtexec 工具將 ONNX 模型轉換為 TensorRT 引擎文件:

    trtexec 轉換工具

模型轉換指令

文本檢測模型(Det):

trtexec.exe --onnx=PP-OCRv5_mobile_det_onnx.onnx \
  --minShapes=x:1x3x32x32 \
  --optShapes=x:4x3x640x640 \
  --maxShapes=x:8x3x960x960 \
  --fp16 \
  --memPoolSize=workspace:1024 \
  --sparsity=disable \
  --saveEngine=PP-OCRv5_mobile_det_f16_onnx.engine

文本分類模型(Cls):

trtexec.exe --onnx=PP-OCRv5_mobile_cls_onnx.onnx \
  --minShapes=x:1x3x80x160 \
  --optShapes=x:8x3x80x160 \
  --maxShapes=x:64x3x80x160 \
  --fp16 \
  --memPoolSize=workspace:1024 \
  --sparsity=disable \
  --saveEngine=PP-OCRv5_mobile_cls_f16_onnx.engine

文本識別模型(Rec):

trtexec.exe --onnx=PP-OCRv5_mobile_rec_onnx.onnx \
  --minShapes=x:1x3x48x48 \
  --optShapes=x:8x3x48x1024 \
  --maxShapes=x:64x3x48x1024 \
  --fp16 \
  --memPoolSize=workspace:1024 \
  --sparsity=disable \
  --saveEngine=PP-OCRv5_mobile_rec_f16_onnx.engine

開始推理

模型轉換完成後,在程序中選擇對應的 .engine 文件即可開始推理:

TensorRT 引擎文件選擇

適用場景:

  • 追求極致推理性能
  • NVIDIA GPU 環境
  • 允許離線模型轉換

六、性能測試與分析

6.1 性能測試工具

演示程序內置了完整的性能測試工具,支持兩種測試模式:

  1. 整體耗時統計:計算從圖片輸入到結果輸出的完整端到端耗時
  2. 詳細階段分析:記錄預處理、推理、後處理各階段的具體耗時

整體耗時統計

詳細性能記錄

6.2 TensorRTSharp 性能示例

以下為使用 TensorRTSharp 在 4 併發配置下的性能測試數據:

Inference time: 53 ms

---- Detection ----

Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         2.01              6.37              0.57              8.96
2         2.23              5.51              0.68              8.43

---- Classification ----

Device/Worker 0:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         1.84              6.89              0.00              8.73
2         1.99              6.97              0.01              8.96

Device/Worker 1:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         1.79              6.66              0.00              8.46
2         1.66              7.60              0.00              9.26

Device/Worker 2:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         1.61              5.31              0.00              6.92
2         1.51              8.01              0.00              9.53

Device/Worker 3:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         1.24              7.73              0.00              8.98
2         1.82              8.35              0.00              10.17

---- Recognition ----

Device/Worker 0:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         0.00              41.97             1.42              43.39
2         0.00              14.50             2.30              16.81

Device/Worker 1:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         0.00              47.40             6.81              54.21
2         0.00              19.42             2.76              22.18

Device/Worker 2:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         0.00              38.10             3.42              41.52
2         0.00              22.36             3.37              25.73

Device/Worker 3:
Inference Time Records:
Index    Preprocess(ms)    Inference(ms)    Postprocess(ms)    Total(ms)
1         0.00              109.94            4.58              114.52
2         0.00              26.59             4.55              31.14

6.3 性能對比總結

下表為使用洗髮水圖片,跑10次的平均時間測試:

推理引擎 設備 平均耗時 設備類型
OpenVINO CPU 288ms Intel(R) Core(TM) Ultra 9 288V 8核
OpenVINO IGPU 99ms Intel(R) Arc(TM) 140V GPU (16GB)
OpenVINO 混合 AUTO:IGPU+CPU 100ms Intel(R) Core(TM) Ultra 9 288V 8核
Intel(R) Arc(TM) 140V GPU (16GB)
ONNX Runtime CPU 656ms AMD Ryzen 7 5800H with Radeon Graphics 8核
ONNX Runtime DML GPU 114ms NVIDIA GeForce RTX 3060 Laptop GPU
ONNX Runtime DML IGPU 331ms Intel(R) Arc(TM) 140V GPU (16GB)
ONNX Runtime CUDA GPU 93ms NVIDIA GeForce RTX 3060 Laptop GPU
ONNX Runtime TensorRT GPU 52ms NVIDIA GeForce RTX 3060 Laptop GPU
TensorRTSharp GPU 51ms NVIDIA GeForce RTX 3060 Laptop GPU

性能測試徵集:我們歡迎廣大開發者分享各自的測試數據。請在評論區提供您的測試配置(硬件型號、併發數、Batch Size)和實測耗時,後續我們將整理成性能基準對比表。


七、常見問題解答

Q1: 首次推理為什麼特別慢?

A: 首次推理時需要進行以下操作:

  • 模型加載到內存
  • 推理引擎初始化
  • JIT 編譯(部分引擎)

這是正常現象,後續推理速度會顯著提升。


Q2: 如何選擇合適的推理引擎?

A: 根據硬件環境和需求選擇:

場景 推薦引擎
無 GPU,有Intel CPU,追求穩定性 OpenVINO
有Intel GPU,需要跨平台 OpenVINO
無 GPU,需要跨平台 ONNX Runtime CPU
有 NVIDIA 顯卡,快速部署 ONNX Runtime CUDA
有 NVIDIA 顯卡,追求性能 ONNX Runtime TensorRT / TensorRTSharp
Windows 平台,AMD 顯卡 ONNX Runtime DML

Q3: 切換推理引擎時為什麼需要重新加載模型?

A: 不同推理引擎對模型格式的內部表示和優化策略不同,因此需要重新解析和加載模型。點擊「加載模型」即可完成切換。


Q4: BatchSize 和併發數量有什麼區別?

A: 兩個參數的作用不同:

  • BatchSize:單次推理處理的圖片數量,提升 GPU 利用率
  • 併發數量:同時運行的推理引擎數量,設置幾個就會生成幾個推理引擎進行同時推理,提升多核/CPU 利用率

調整 BatchSize 不需要重新加載模型,但調整併發數量後需要重新加載。


Q5: TensorRT 模型轉換失敗怎麼辦?

A: 檢查以下幾點:

  1. 確保 CUDA 版本與 TensorRT 版本匹配
  2. 檢查 ONNX 模型文件是否完整
  3. 確認 trtexec 參數中輸入尺寸範圍合理
  4. 如顯存不足,減小 --memPoolSize 參數

Q6: 推理結果為空或識別不準確怎麼辦?

A: 常見原因和解決方法:

  1. 圖片質量:檢查圖片是否模糊、傾斜或光照不足
  2. 輸入尺寸:確保圖片尺寸符合模型輸入要求
  3. 語言支持:確認模型是否支持目標語言
  4. 模型版本:嘗試使用不同版本的 PaddleOCR 模型

八、軟件獲取

8.1 源碼下載

DeploySharp 項目已完全開源,可通過以下方式獲取:

主倉庫:

https://github.com/guojin-yan/DeploySharp.git

PaddleOCR 演示程序:

https://github.com/guojin-yan/DeploySharp/tree/DeploySharpV1.0/applications/JYPPX.DeploySharp.OpenCvSharp.PaddleOcr

8.2 可執行程序

如需直接獲取編譯好的可執行程序,請加入技術交流羣,從羣文件下載最新版本。


九、技術支持

9.1 反饋與交流

  • GitHub Issues:在項目倉庫提交 Issue 或 Pull Request
  • QQ 交流羣:加入 945057948,獲取實時技術支持

QQ羣二維碼

9.2 相關資源

  • PaddleOCR 官方項目:https://github.com/PaddlePaddle/PaddleOCR
  • OpenVINO 官方文檔:https://docs.openvino.ai/
  • TensorRT 官方文檔:https://docs.nvidia.com/deeplearning/tensorrt/
  • ONNX Runtime 官方文檔:https://onnxruntime.ai/docs/

結語

通過 DeploySharp 框架,我們成功實現了 PaddleOCR 在 .NET 環境下的高效部署。無論是純 CPU 環境下的穩定運行,還是 GPU 加速下的極致性能,開發者都可以根據實際需求靈活選擇。

未來,我們將持續優化框架性能,支持更多模型類型和推理引擎,為 .NET 開發者提供更完善的 AI 模型部署解決方案。


作者:Guojin Yan
最後更新:2026年1月


【文章聲明】

本文主要內容基於作者的研究與實踐,部分表述藉助 AI 工具進行了輔助優化。由於技術侷限性,文中可能存在錯誤或疏漏之處,懇請各位讀者批評指正。如果內容無意中侵犯了您的權益,請及時通過公眾號後台與我們聯繫,我們將第一時間核實並妥善處理。感謝您的理解與支持!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.