Paddle OCR vs Tesseract:詳細的 OCR 比較
PaddleOCR 提供最先進的中文字元辨識技術 - 但在 .NET 應用程式中處理單一圖像需要五個 NuGet 套件、連接至中國百度伺服器的異步模型下載(約 100MB)、每次圖像載入都需要 OpenCvSharp 依賴,並且首次運行的冷啟動時間為 3-5 秒。 這是來自 .NET 項目使用以 Python 為主的深度學習系統的代價。 對於需要處理大量 CJK 任務且中文腳本的準確性是硬性要求且已經具備 GPU 基礎設施的情況下,這筆代價是值得付出的。 對於其他情況,這是項目不需要的額外負擔。
了解 PaddleOCR
PaddleOCR 是百度基於其自有的深度學習框架 PaddlePaddle 開發的開源 OCR 系統。 該項目從根本上設計給 Python 開發人員使用,.NET 社區通過一個由 Zhou Jie (sdcb) 在 GitHub 上維護的社區包裝器 Sdcb.PaddleOCR 來存取它。
識別管道依序連結三個神經網路:使用可微分二值化 (DB) 的文字檢測模型來識別文字區域的邊界框、確定文字方向的方向分類器,以及使用卷積復發神經網路 (CRNN) 的識別模型,將檢測到的區域像素轉換為字串。 這些網路中的每一個都是一個獨立的模型文件,必須在開始任何推理之前存在於磁盤上。
關鍵架構特徵:
- 多包安裝:核心包 (
Sdcb.PaddleOCR)、平台運行時 (Sdcb.PaddleInference.runtime.win64.mkl或 CUDA 等價物)、模型下載助手 (Sdcb.PaddleOCR.Models.Online)、以及用於圖像載入的 OpenCvSharp - 至少四個包,如果將 OpenCvSharp 運行時分開則為五個 - 必須模型下載:模型不是捆綁的。 首次使用調用
OnlineFullModels.ChineseV4.DownloadAsync(),從百度控制的伺服器下載 (bj.bcebos.com) 並增加約 100MB 到部署文物中 - 每張圖像都需要 OpenCV 依賴:沒有從文件路徑直接推理的路徑。 圖像必須載入為 OpenCvSharp
Mat物件,然後傳遞到ocr.Run(mat) - GPU 加速需要 CUDA/cuDNN 設置:實現廣告中承諾的性能指標需要 NVIDIA 驅動程式、CUDA Toolkit 11.8、cuDNN 8.6+、以及獨立的 GPU 運行時 NuGet 套件 - 每個環境需要 2-8 小時的設置時間
- 以 Python 為優先的發布節奏:新的 PaddleOCR 模型版本首先出現在 Python 中,.NET 包裝更新隨後幾周到幾個月才發布
- 支持 14 種語言:簡體中文、繁體中文、英語、法語、德語、韓語、日語、意大利語、西班牙語、葡萄牙語、俄語、阿拉伯語、印地語和泰米爾語 - 上限
該 NuGet 套件大約有 200,000 次下載。 較小的足跡意味著 Stack Overflow 上的答案較少,經報導的生產報告較少,並且能夠根據經驗回答問題的開發者較少。
實踐中的三模型管道
每次調用 PaddleOCR 推理時都會連續運行三個神經網路。 下面的程式碼顯示了開發人員在返回任何文字之前遇到的完整設置路徑:
// Five packages required before this compiles:
// dotnet add package Sdcb.PaddleOCR
// dotnet add package Sdcb.PaddleOCR.Models.Online
// dotnet add package Sdcb.PaddleInference.runtime.win64.mkl
// dotnet add package OpenCvSharp4
// dotnet add package OpenCvSharp4.runtime.win
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
// Async download from Baidu servers — blocks first run for 10-30 seconds
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// PaddleOcrAll bundles detection, classification, and recognition
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
// OpenCV required — no file path shortcut
using Mat mat = Cv2.ImRead("document.png");
if (mat.Empty())
{
throw new FileNotFoundException("Could not load image");
}
// Three neural networks fire in sequence
PaddleOcrResult result = ocr.Run(mat);
Console.WriteLine(result.Text);
// Five packages required before this compiles:
// dotnet add package Sdcb.PaddleOCR
// dotnet add package Sdcb.PaddleOCR.Models.Online
// dotnet add package Sdcb.PaddleInference.runtime.win64.mkl
// dotnet add package OpenCvSharp4
// dotnet add package OpenCvSharp4.runtime.win
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
// Async download from Baidu servers — blocks first run for 10-30 seconds
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// PaddleOcrAll bundles detection, classification, and recognition
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
// OpenCV required — no file path shortcut
using Mat mat = Cv2.ImRead("document.png");
if (mat.Empty())
{
throw new FileNotFoundException("Could not load image");
}
// Three neural networks fire in sequence
PaddleOcrResult result = ocr.Run(mat);
Console.WriteLine(result.Text);
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models.Online
Imports OpenCvSharp
' Five packages required before this compiles:
' dotnet add package Sdcb.PaddleOCR
' dotnet add package Sdcb.PaddleOCR.Models.Online
' dotnet add package Sdcb.PaddleInference.runtime.win64.mkl
' dotnet add package OpenCvSharp4
' dotnet add package OpenCvSharp4.runtime.win
' Async download from Baidu servers — blocks first run for 10-30 seconds
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
' PaddleOcrAll bundles detection, classification, and recognition
Using ocr As New PaddleOcrAll(models) With {
.AllowRotateDetection = True,
.Enable180Classification = True
}
' OpenCV required — no file path shortcut
Using mat As Mat = Cv2.ImRead("document.png")
If mat.Empty() Then
Throw New FileNotFoundException("Could not load image")
End If
' Three neural networks fire in sequence
Dim result As PaddleOcrResult = ocr.Run(mat)
Console.WriteLine(result.Text)
End Using
End Using
result.Regions 陣列包含單個文字區域物件,每個物件都有一個 Text 字串,一個 Score 信心值和一個 Rect 邊界框。 按置信度過濾:result.Regions.Where(r => r.Score > 0.8)。 區域排序是空間的,不保證是閱讀順序,所以按 region.Rect.Center.Y 然后 region.Rect.Center.X 排序是常见的模式。
理解 IronOCR
IronOCR 是一個商業 OCR 程式庫,適用於 .NET,圍繞優化的 Tesseract 5 LSTM 引擎構建,旨在消除生的 Tesseract 所需的配置和預處理工作。 一個 NuGet 套件安裝完整的運行時、語言模型、本機二進制文件和預處理管道。
關鍵特徵:
- 單包部署:
dotnet add package IronOcr安裝所有組件。 無額外的運行時包,無模型下載,無本機庫配置 - 自動預處理:對於低質量輸入,Deskew、DeNoise、Contrast、Binarize 和 EnhanceResolution 自動應用; 如有需要,可以顯式控制
- 本機 PDF 支持:掃描的 PDF 可以直接通過
input.LoadPdf()載入,無需第三方轉化步驟 - 通過 NuGet 支持125+種語言:每個語言包都是標準的 NuGet 依賴項 -
dotnet add package IronOcr.Languages.ChineseSimplified- 無需模型目錄管理 - 執行緒安全,CPU 優化:內建並行化,無需 CUDA 或 GPU 硬體要求
- 具有 SLA 的商業支持:US-based Iron Software 提供商業支持; 該產品不是社區的副項目
- 永久许可: $999 Lite / $1,499 Plus / $2,999 Professional - 一次性付款,無限期運行,無按頁收費
功能比較
| 功能 | PaddleOCR (Sdcb) | IronOCR |
|---|---|---|
| 需要 NuGet 套件 | 4-5 | 1 |
| 需要模型下載 | 是(~100MB,百度伺服器) | 否(已捆绑) |
| 設置時間 | 30-60 分鐘 | 5 分鐘 |
| CJK準確性 | 優秀(95%+) | 良好(85-90%) |
| 英語/拉丁文準確性 | 良好(92-95%) | 優秀(97-99%) |
| GPU 支持 | 是(複雜的 CUDA 設置) | CPU優化 |
| 本地 PDF 支持 | 不是 | 是 |
| 支持的語言 | 14 | 125+ |
| 許可證 | Apache 2.0(免費) | 商業($999+) |
| 公司起源 | 中國(百度) | 美國(Iron Software) |
詳細功能比較
| 類別 / 功能 | PaddleOCR (Sdcb) | IronOCR |
|---|---|---|
| 設置 | ||
| NuGet包 | 4-5 | 1 |
| 安裝時模型下載 | 需要 | 包含 |
| 首次運行冷啟動 | 3-5 秒 | 低於1秒 |
| 安裝時間 | 30-60 分鐘 | 低於5分鐘 |
| OpenCV 依賴 | 需要 | None |
| 語言支持 | ||
| 支持的語言 | 14 | 125+ |
| 語言安裝方法 | 模型下載 | NuGet套件 |
| 同時多語言支持 | 序列化模型切換 | 是(AddSecondaryLanguage) |
| CJK準確性 | 優秀 | 良好 |
| 拉丁語/英語準確性 | 良好 | 優秀 |
| 輸入處理 | ||
| 圖像文件輸入 | 通過 OpenCvSharp Mat | 直接文件路徑 |
| 本地PDF輸入 | 不是 | 是 |
| 受密碼保護的 PDF | 不是 | 是 |
| 流輸入 | 間接 | 是 |
| 字節陣列輸入 | 間接 | 是 |
| 預處理 | ||
| 自動預處理 | 不是 | 是 |
| 糾偏 | 手動 | 內建 |
| 去噪 | 手動 | 內建 |
| 對比增強 | 手動 | 內建 |
| 解析度縮放 | 手動 | EnhanceResolution(300) |
| 輸出 | ||
| 完整文字字串 | 是 | 是 |
| 每個區域/單詞結果 | result.Regions |
result.Words, result.Lines |
| 置信分數 | 每個區域(region.Score) |
每個單詞(word.Confidence) |
| 邊界框 | region.Rect |
word.X, word.Y, word.Width, word.Height |
| 可搜尋的 PDF 輸出 | 不是 | 是 |
| hOCR匯出 | 不是 | 是 |
| 性能 | ||
| CPU 每張圖像 | 300-500 毫秒 | 150-300 毫秒 |
| GPU 每張圖像 | 50-100 毫秒(需要 CUDA) | 不適用(CPU優化) |
| 記憶體使用量 | 500MB-1GB | 100-200MB |
| 部署大小 | 300-500MB | ~80MB |
| 部署 | ||
| Docker 基礎映像大小 | ~1.5GB(包含CUDA基礎) | ~400MB |
| 跨平台 | Windows/Linux(部分) | Windows, Linux, macOS |
| 氣隙部署 | 是(預下載模型) | 是(無需下載) |
| 支持和許可證 | ||
| 許可型別 | Apache 2.0(免費) | 永久商業 |
| 商業支持 | 社區/GitHub | 是,有 SLA |
| 公司/維護者 | 百度/社區包裝器 | Iron Software(美國) |
| NuGet 下載次數 | ~200K | ~5.3M |
CJK 准确度與設置成本
CJK 準確性是 PaddleOCR 的真正優勢。 對於簡體中文文件,深度學習 CRNN 架構返回 95%+ 的準確資料 - consistently ahead of Tesseract-based engines on dense Chinese character grids, mixed Chinese/English layouts, and vertical text blocks. 如果項目的主要工作量是中文發票處理,普通話合同或日本產品目錄,那麼這種準確性優勢是真實的。
PaddleOCR 方法
中文模型管道表現良好,因為檢測和識別網路是百度訓練在大規模中文文件資料集上,它們的核心業務涉及處理大規模的中文網路內容。
// Chinese model: highest accuracy for CJK documents
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead("chinese-invoice.png");
PaddleOcrResult result = ocr.Run(mat);
// Filter low-confidence regions for cleaner output
var highConfidence = result.Regions
.Where(r => r.Score >= 0.8)
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X);
foreach (var region in highConfidence)
{
Console.WriteLine($"{region.Text} ({region.Score:P0})");
}
// Chinese model: highest accuracy for CJK documents
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead("chinese-invoice.png");
PaddleOcrResult result = ocr.Run(mat);
// Filter low-confidence regions for cleaner output
var highConfidence = result.Regions
.Where(r => r.Score >= 0.8)
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X);
foreach (var region in highConfidence)
{
Console.WriteLine($"{region.Text} ({region.Score:P0})");
}
Imports System
Imports System.Linq
Imports OpenCvSharp
' Chinese model: highest accuracy for CJK documents
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
Using ocr As New PaddleOcrAll(models) With {
.AllowRotateDetection = True,
.Enable180Classification = True
}
Using mat As Mat = Cv2.ImRead("chinese-invoice.png")
Dim result As PaddleOcrResult = ocr.Run(mat)
' Filter low-confidence regions for cleaner output
Dim highConfidence = result.Regions _
.Where(Function(r) r.Score >= 0.8) _
.OrderBy(Function(r) r.Rect.Center.Y) _
.ThenBy(Function(r) r.Rect.Center.X)
For Each region In highConfidence
Console.WriteLine($"{region.Text} ({region.Score:P0})")
Next
End Using
End Using
置信度過濾模式(r.Score >= 0.8)很重要,因為深度學習檢測步驟將偶爾把非文字區域標記為文字。 不過濾會造成雜訊區域出現在輸出中。 按 Rect.Center.Y 然後 Rect.Center.X 排序近似閱讀順序,但對於复雜多列佈局並不能保證。
IronOCR 方法
IronOCR 的簡體中文支持以 NuGet 軟體包的形式安裝,無需任何模型管理。 在中文文件中的準確性為 85-90%,低於 PaddleOCR 的 95%+,但在文件格式一致的生產使用例中已足夠。
// dotnet add package IronOcr.Languages.ChineseSimplified
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
using var input = new OcrInput();
input.LoadImage("chinese-invoice.png");
// Preprocessing handles rotation, noise, and contrast automatically
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
// Word-level results with coordinates
foreach (var word in result.Words)
{
Console.WriteLine($"{word.Text} at ({word.X},{word.Y}) — {word.Confidence}%");
}
// dotnet add package IronOcr.Languages.ChineseSimplified
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
using var input = new OcrInput();
input.LoadImage("chinese-invoice.png");
// Preprocessing handles rotation, noise, and contrast automatically
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
// Word-level results with coordinates
foreach (var word in result.Words)
{
Console.WriteLine($"{word.Text} at ({word.X},{word.Y}) — {word.Confidence}%");
}
Imports IronOcr
' dotnet add package IronOcr.Languages.ChineseSimplified
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
Using input As New OcrInput()
input.LoadImage("chinese-invoice.png")
' Preprocessing handles rotation, noise, and contrast automatically
input.Deskew()
input.DeNoise()
Dim result = ocr.Read(input)
' Word-level results with coordinates
For Each word In result.Words
Console.WriteLine($"{word.Text} at ({word.X},{word.Y}) — {word.Confidence}%")
Next
End Using
对于需要 同時整合多種語言的團隊—例如中英混合文件—IronOCR 可以通過 AddSecondaryLanguage 處理這種組合。 PaddleOCR 需要在不同語言間切換模型集,這意味着需要單獨下載調用和獨立的引擎實例。
折衷方案很明確:PaddleOCR 在純粹的 CJK 準確性上取勝。IronOCR在英語/拉丁語準確性(97-99% 大於 92-95%)、對低質量掃描的預處理以及不需管理模型文件的操作簡單性上勝出。 處理以多種語言組合同時或主要處理歐洲語言文件並偶爾帶有 CJK 內容的團隊會發現IronOCR的準確性配置更加有用。 查看 IronOCR 教程中心了解多語言和預處理範例。
模型下载和管理
PaddleOCR 和IronOCR之間的模型管理差異代表了最重要的日常操作區別。 這影響首次設置、CI/CD 管道、Docker 映像和氣隙部署。
PaddleOCR 方法
PaddleOCR 的模型與 NuGet 軟體包分開提供。 要進行完整的管道 OCR 運行,需要三個模型目錄,而每種獲取模型的方法都有不同的權衡:
// Option A: Online download — simplest, but requires Baidu server access
// This runs on application startup; first run blocks for 10-30 seconds
FullOcrModel onlineModels = await OnlineFullModels.ChineseV4.DownloadAsync();
// Option B: Pre-downloaded local models — for air-gapped or compliance environments
// Developer must manually download and maintain three directories:
// models/ch_PP-OCRv4_det_infer/
// models/ch_ppocr_mobile_v2.0_cls_infer/
// models/ch_PP-OCRv4_rec_infer/
FullOcrModel localModels = new FullOcrModel(
LocalDetectionModel.FromDirectory("models/ch_PP-OCRv4_det_infer"),
LocalClassificationModel.FromDirectory("models/ch_ppocr_mobile_v2.0_cls_infer"),
LocalRecognitionModel.FromDirectory("models/ch_PP-OCRv4_rec_infer")
);
// Option C: Embedded model package — adds 100MB to NuGet restore, simplest deployment
// dotnet add package Sdcb.PaddleOCR.Models.LocalV4
// Japanese and Korean require separate model downloads:
FullOcrModel japaneseModels = await OnlineFullModels.JapanV4.DownloadAsync();
FullOcrModel koreanModels = await OnlineFullModels.KoreanV4.DownloadAsync();
// Option A: Online download — simplest, but requires Baidu server access
// This runs on application startup; first run blocks for 10-30 seconds
FullOcrModel onlineModels = await OnlineFullModels.ChineseV4.DownloadAsync();
// Option B: Pre-downloaded local models — for air-gapped or compliance environments
// Developer must manually download and maintain three directories:
// models/ch_PP-OCRv4_det_infer/
// models/ch_ppocr_mobile_v2.0_cls_infer/
// models/ch_PP-OCRv4_rec_infer/
FullOcrModel localModels = new FullOcrModel(
LocalDetectionModel.FromDirectory("models/ch_PP-OCRv4_det_infer"),
LocalClassificationModel.FromDirectory("models/ch_ppocr_mobile_v2.0_cls_infer"),
LocalRecognitionModel.FromDirectory("models/ch_PP-OCRv4_rec_infer")
);
// Option C: Embedded model package — adds 100MB to NuGet restore, simplest deployment
// dotnet add package Sdcb.PaddleOCR.Models.LocalV4
// Japanese and Korean require separate model downloads:
FullOcrModel japaneseModels = await OnlineFullModels.JapanV4.DownloadAsync();
FullOcrModel koreanModels = await OnlineFullModels.KoreanV4.DownloadAsync();
模型版本必須與包裝器版本匹配。 當 Sdcb.PaddleOCR 更新時,預下載的舊版本模型可能需要重新下載。 CI/CD 管道快取 NuGet 恢復步驟也必須單獨管理模型文件快取或在容器構建階段觸發模型下載。 Docker 映像比較顯示結果:PaddleOCR 容器大小為約 1.5GB;IronOCR容器約為 400MB。
IronOCR 方法
IronOCR 語言模型作為標準的 NuGet 軟體包。 無需下載調用,無模型目錄管理,無版本同步。 IronOCR 的 NuGet 軟體包 包含英語模型; 額外語言包的安裝完全與其它依賴項相同。
// dotnet add package IronOcr
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.Japanese
using IronOcr;
//不是async initialization, no model path, no version matching
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.Japanese);
using var input = new OcrInput();
input.LoadImage("mixed-cjk-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
// dotnet add package IronOcr
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.Japanese
using IronOcr;
//不是async initialization, no model path, no version matching
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.Japanese);
using var input = new OcrInput();
input.LoadImage("mixed-cjk-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
' dotnet add package IronOcr
' dotnet add package IronOcr.Languages.ChineseSimplified
' dotnet add package IronOcr.Languages.Japanese
'不是async initialization, no model path, no version matching
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.Japanese)
Using input As New OcrInput()
input.LoadImage("mixed-cjk-document.png")
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
語言包作為 dotnet restore 的一部分恢復。 Docker 建立步驟複製 models/ 目錄,運行 apt-get install libopencv-dev,並新增 CUDA 基礎映像的步驟在IronOCR容器中並不存在。 Docker 部署 或 Azure 部署 的團隊可以發現容器構建複雜性上的顯著差異。
GPU 和 CUDA 依賴
PaddleOCR 的 GPU 性能資料(每張圖像 50-100 毫秒,對比在 CPU 上是 300-500 毫秒)是真實的。深度學習模型從 GPU 並行中獲益甚大,反之基於 Tesseract 的引擎並不如此。 對於每天處理數萬個圖片的工作負載,5-10 倍的吞吐量改進改變了基礎設施的對話。
PaddleOCR 方法
GPU 推理需要 NuGet 之外的一個完全獨立的軟體棧。 環境要求是精確且版本鎖定的:
// Prerequisites (must be installed before this compiles correctly):
// 1. NVIDIA GPU with CUDA capability 3.5+
// 2. NVIDIA Driver 452.39+ (Windows) / 450.80.02+ (Linux)
// 3. CUDA Toolkit 11.8 — exact version, not 12.x
// 4. cuDNN 8.6.0+ for CUDA 11.x
// 5. dotnet add package Sdcb.PaddleInference.runtime.win64.cuda118
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using Sdcb.PaddleInference;
using OpenCvSharp;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// GPU device 0, 1000MB GPU memory pool
using PaddleOcrAll ocr = new PaddleOcrAll(models, PaddleDevice.Gpu(deviceId: 0))
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead(imagePath);
PaddleOcrResult result = ocr.Run(mat);
// Prerequisites (must be installed before this compiles correctly):
// 1. NVIDIA GPU with CUDA capability 3.5+
// 2. NVIDIA Driver 452.39+ (Windows) / 450.80.02+ (Linux)
// 3. CUDA Toolkit 11.8 — exact version, not 12.x
// 4. cuDNN 8.6.0+ for CUDA 11.x
// 5. dotnet add package Sdcb.PaddleInference.runtime.win64.cuda118
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using Sdcb.PaddleInference;
using OpenCvSharp;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// GPU device 0, 1000MB GPU memory pool
using PaddleOcrAll ocr = new PaddleOcrAll(models, PaddleDevice.Gpu(deviceId: 0))
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead(imagePath);
PaddleOcrResult result = ocr.Run(mat);
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models.Online
Imports Sdcb.PaddleInference
Imports OpenCvSharp
' Prerequisites (must be installed before this compiles correctly):
' 1. NVIDIA GPU with CUDA capability 3.5+
' 2. NVIDIA Driver 452.39+ (Windows) / 450.80.02+ (Linux)
' 3. CUDA Toolkit 11.8 — exact version, not 12.x
' 4. cuDNN 8.6.0+ for CUDA 11.x
' 5. dotnet add package Sdcb.PaddleInference.runtime.win64.cuda118
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
' GPU device 0, 1000MB GPU memory pool
Using ocr As New PaddleOcrAll(models, PaddleDevice.Gpu(deviceId:=0)) With {
.AllowRotateDetection = True,
.Enable180Classification = True
}
Using mat As Mat = Cv2.ImRead(imagePath)
Dim result As PaddleOcrResult = ocr.Run(mat)
End Using
End Using
如果 CUDA_PATH 未設置,匹配的 cuDNN DLL 缺席預期路徑或運行時軟體包版本與安裝的 CUDA 工具包不匹配,調用將拋出本機庫載入異常。 診斷該故障需檢查驅動版本、PATH 條目和多個目錄中的 DLL 存在。 在 Docker 中,GPU 支持需要 nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 基礎映像和主機上的 nvidia-container-toolkit 增加了映像構建和容器運行配置的複雜性。
對於僅限 CPU 的部署,PaddleOCR 預設使用 MKL 加速的運行時:每張圖像約 300-500 毫秒,並且首次載入模型需 3-5 秒。
IronOCR 方法
IronOCR 是為 CPU 推理而設計的。 它在標準硬體上每張圖像交付 150-300 毫秒,無 GPU 依賴,無 CUDA 堆棧,且無驅動版本問題。 由于模型是捆綁的而不是初始化時從磁碟載入,發動機也在一秒內啟動。
using IronOcr;
//不是GPU setup, no CUDA, no driver checks
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
// Preprocessing built-in — improves accuracy on poor scans without extra code
using var input = new OcrInput();
input.LoadImage("document.png");
input.Deskew();
input.DeNoise();
input.EnhanceResolution(300);
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;
//不是GPU setup, no CUDA, no driver checks
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
// Preprocessing built-in — improves accuracy on poor scans without extra code
using var input = new OcrInput();
input.LoadImage("document.png");
input.Deskew();
input.DeNoise();
input.EnhanceResolution(300);
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' 不是GPU setup, no CUDA, no driver checks
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim ocr As New IronTesseract()
' Preprocessing built-in — improves accuracy on poor scans without extra code
Using input As New OcrInput()
input.LoadImage("document.png")
input.Deskew()
input.DeNoise()
input.EnhanceResolution(300)
Dim result = ocr.Read(input)
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
對於無 GPU 硬體的大規模吞吐量,IronOCR 的執行緒安全設計允許對一批圖像使用不同的 Parallel.ForEach 實例 - 每一個都獨立處理無需鎖定。 多執行緒範例 顯示了模式。 在一個 4 核 CPU 上每張圖像 150-300 毫秒,一批 100 張圖像使用並行處理在 20-40 秒內完成 - 這樣的 CPU 吞吐量使得對於大多數 Web API 和文件管道場景無需 GPU 投資。
圖像質量修正指南涵蓋了針對自動預處理需要調整的情況的預處理配置的詳細資訊。
PDF 處理
PaddleOCR缺少本機PDF支持。 通過PaddleOCR處理的每個PDF都需要一個外部庫來首先將頁面轉換爲圖像、在轉換和推理之間進行臨時文件管理和清理邏輯。
PaddleOCR 方法
// Requires additional package: PdfiumViewer or similar
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
using PdfiumViewer;
using System.Drawing.Imaging;
using System.Text;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models);
var results = new StringBuilder();
//手動PDF-to-image conversion, page by page
using PdfDocument pdf = PdfDocument.Load("document.pdf");
for (int i = 0; i < pdf.PageCount; i++)
{
// Render page to bitmap — 200 DPI
using var pageImage = pdf.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
// Save to temp file — OpenCvSharp cannot read from memory easily
string tempPath = Path.GetTempFileName() + ".png";
pageImage.Save(tempPath, ImageFormat.Png);
try
{
using Mat mat = Cv2.ImRead(tempPath);
var result = ocr.Run(mat);
results.AppendLine($"--- Page {i + 1} ---");
results.AppendLine(result.Text);
}
finally
{
File.Delete(tempPath); // Must clean up temp files
}
}
return results.ToString();
// Requires additional package: PdfiumViewer or similar
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
using PdfiumViewer;
using System.Drawing.Imaging;
using System.Text;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models);
var results = new StringBuilder();
//手動PDF-to-image conversion, page by page
using PdfDocument pdf = PdfDocument.Load("document.pdf");
for (int i = 0; i < pdf.PageCount; i++)
{
// Render page to bitmap — 200 DPI
using var pageImage = pdf.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
// Save to temp file — OpenCvSharp cannot read from memory easily
string tempPath = Path.GetTempFileName() + ".png";
pageImage.Save(tempPath, ImageFormat.Png);
try
{
using Mat mat = Cv2.ImRead(tempPath);
var result = ocr.Run(mat);
results.AppendLine($"--- Page {i + 1} ---");
results.AppendLine(result.Text);
}
finally
{
File.Delete(tempPath); // Must clean up temp files
}
}
return results.ToString();
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models.Online
Imports OpenCvSharp
Imports PdfiumViewer
Imports System.Drawing.Imaging
Imports System.Text
Public Module PdfToTextConverter
Public Async Function ConvertPdfToText() As Task(Of String)
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
Using ocr As New PaddleOcrAll(models)
Dim results As New StringBuilder()
' 手動PDF-to-image conversion, page by page
Using pdf As PdfDocument = PdfDocument.Load("document.pdf")
For i As Integer = 0 To pdf.PageCount - 1
' Render page to bitmap — 200 DPI
Using pageImage = pdf.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi)
' Save to temp file — OpenCvSharp cannot read from memory easily
Dim tempPath As String = Path.GetTempFileName() & ".png"
pageImage.Save(tempPath, ImageFormat.Png)
Try
Using mat As Mat = Cv2.ImRead(tempPath)
Dim result = ocr.Run(mat)
results.AppendLine($"--- Page {i + 1} ---")
results.AppendLine(result.Text)
End Using
Finally
File.Delete(tempPath) ' Must clean up temp files
End Try
End Using
Next
End Using
Return results.ToString()
End Using
End Function
End Module
這就是對於單一 PDF 的超過 30 行程式碼。 新增另一個 NuGet 依賴(PdfiumViewer)、以選擇的 DPI 手工頁面渲染、臨時文件建立和刪除、以及結果的迭代累積 - 所有這些都在 PaddleOCR 本身啟動之前。 DPI 條目過低會降低準确性; 太高會增加處理時間。開發者擁有該決策。
IronOCR 方法
IronOCR原生讀取PDF。 在呼叫站點找不到轉換庫、臨時文件和逐頁迴圈:
using IronOcr;
var ocr = new IronTesseract();
//本地PDF輸入— no external library needed
using var input = new OcrInput();
input.LoadPdf("document.pdf");
var result = ocr.Read(input);
// Per-page access available if needed
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} chars");
}
// Produce a searchable PDF in one additional line
result.SaveAsSearchablePdf("searchable-output.pdf");
using IronOcr;
var ocr = new IronTesseract();
//本地PDF輸入— no external library needed
using var input = new OcrInput();
input.LoadPdf("document.pdf");
var result = ocr.Read(input);
// Per-page access available if needed
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} chars");
}
// Produce a searchable PDF in one additional line
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
Dim ocr As New IronTesseract()
'本地PDF輸入— no external library needed
Using input As New OcrInput()
input.LoadPdf("document.pdf")
Dim result = ocr.Read(input)
' Per-page access available if needed
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} chars")
Next
' Produce a searchable PDF in one additional line
result.SaveAsSearchablePdf("searchable-output.pdf")
End Using
密碼保護的 PDF 使用相同的 LoadPdf 路徑用 Password 參數。 PDF 輸入指南 和 可搜索 PDF 指南 涵蓋多頁和輸出選項的詳細資訊。 對於組織將掃描的文件檔案數字化的過程—每個文件均作爲 PDF 到達—此差異消除了一個重要的整合程式碼層。
API 地圖參考
| PaddleOCR (Sdcb) | IronOCR 等效 | 注意事項 |
|---|---|---|
Sdcb.PaddleOCR |
IronOcr |
命名空間 |
PaddleOcrAll |
IronTesseract |
主體 OCR 編排類 |
FullOcrModel |
不適用 | 没有等效模型 - 模型已捆绑 |
OnlineFullModels.ChineseV4.DownloadAsync() |
dotnet add package IronOcr.Languages.ChineseSimplified |
模型獲取 |
LocalDetectionModel.FromDirectory(path) |
不適用 | 無需模型路徑管理 |
LocalClassificationModel.FromDirectory(path) |
不適用 | 無需模型路徑管理 |
LocalRecognitionModel.FromDirectory(path) |
不適用 | 無需模型路徑管理 |
new PaddleOcrAll(models) |
new IronTesseract() |
引擎建立 |
new PaddleOcrAll(models, PaddleDevice.Gpu(0)) |
不適用(CPU優化) | GPU 裝置選擇 |
Cv2.ImRead(imagePath) (OpenCvSharp) |
new OcrInput(imagePath) 或 input.LoadImage(path) |
圖像載入 |
ocr.Run(mat) |
ocr.Read(input) |
執行 OCR |
result.Text |
result.Text |
完整文件文字 |
result.Regions |
result.Words / result.Lines |
結構化文字區域 |
region.Text |
word.Text |
來自區域的文字 |
region.Score |
word.Confidence |
置信值(0-1 或 0-100) |
region.Rect.Center.X / .Center.Y |
word.X / word.Y |
邊界框位置 |
region.Rect.Size.Width / .Height |
word.Width / word.Height |
邊界框尺寸 |
AllowRotateDetection = true |
input.Deskew() |
旋轉處理 |
Enable180Classification = true |
自動 | 上下倒置文字檢測 |
| 不適用 | input.DeNoise() |
噪音去除 |
| 不適用 | input.Contrast() |
對比增強 |
| 不適用 | input.EnhanceResolution(300) |
DPI縮放 |
| 不適用 | input.LoadPdf(path) |
本地PDF輸入 |
| 不適用 | result.SaveAsSearchablePdf(path) |
可搜尋的 PDF 輸出 |
| 不適用 | ocr.AddSecondaryLanguage(lang) |
多語言同時支持 |
當團隊考慮從 PaddleOCR 轉向 IronOCR
當語言需求超過 14 種時
一個項目開始處理中文發票 - PaddleOCR 處理得很好。 然後客戶基礎擴展,開始出現波蘭語、荷蘭語、希臘語、越南語和土耳其語的文件。 PaddleOCR 支持的 14 種語言無法涵蓋其中任何一種語言。 遷移變得必要,因爲該工具無法隨着使用情況的變化而成長。 在IronOCR中新增波蘭語支持是一個 NuGet 套件的附加和單行配置的變更。 對於那些將項目定義為"最初偏重於中文但最終是多區域的"的團隊需要提前決定是否開始使用一個可以擴展語言覆蓋範圍而不重寫的工具。
當設置成本超出問題預算時
PaddleOCR 文件估計首次設置需要 CPU 30-60 分鐘和 GPU 2-8 小時。 開發者按 100 美元/小時計算,首次 GPU 配置嘗試的成本在處理首張生產圖像之前就要花費 200-800 美元。IronOCR設置是一個安裝命令和四行程式碼範例 - 不到五分鐘。 對於內部工具、原型或 OCR 只是次要功能而非核心產品的項目而言,時間差異決定了 OCR 功能是否在當前迭代中推出還是被優先順序降低。 使用IronOCR的上手時間比配置 CUDA 環境少。
當 PDF 流程占主導地位時
數字化掃描文件存檔、處理傳真到 PDF 管道或從 PDF 格式的發票和合同中提取資料的組織面臨 PaddleOCR 的結構性問題:每個 PDF 需要一個額外的庫、手動頁面渲染、臨時文件管理和 DPI 選擇邏輯後 PaddleOCR 才能處理。 那不是偶然的複雜性 - 它是永久維護。 團隊在初步 PaddleOCR 整合後發現其工作負載中PDF 比例高達 80%+,通常在 PDF 轉換層成爲漏洞來源而不是 PaddleOCR 本身失敗時遷移。
當合規審覈標記出 Baidu 來源時
政府、國防、醫療保健和金融服務組織中的企業安全團隊越來越多地將其審查標準應用到來源於中國政府關聯公司的組件。 PaddleOCR 是一個百度項目; 預設情況下,模型下載連接到百度雲儲存; PaddlePaddle 框架是百度產品。 程式碼在本地運行,文件不會被傳輸,但模型工件來自百度基礎設施。 對於 FedRAMP、ITAR 或 CMMC 環境,那種來源觸發合規審查,可能會阻止採用。IronOCR由總部位於美國的公司 Iron Software 開發,處理所有內部內容,無外部連接,並且不需要從任何第三方伺服器下載模型。
當 GPU 基礎設施尚未到位時
PaddleOCR 在 CPU 上(每張圖像 300-500 毫秒,冷啟動 3-5 秒,記憶體 500MB-1GB)的運行速度比在 CPU 上的IronOCR慢(每張圖像 150-300 毫秒,冷啟動不到一秒,記憶體 100-200MB)。 只有在完成 CUDA/cuDNN 設置後,PaddleOCR 的 GPU 優勢才顯現出來,這種優勢僅在高容量時才能證明其操作複雜性的合理性。 運行標準雲基礎設施而不使用 GPU 實例的團隊—如沒有 GPU 的 EC2、Azure 應用服務、AWS Lambda—支付了 PaddleOCR 的設置費用,卻沒有得到支撐其費用的性能好處。
常見的遷移考量
套件和命名空間更換
套件互換去除了五個依賴項並新增了一個。 從 .csproj 中移除 Sdcb.PaddleOCR, Sdcb.PaddleOCR.Models.Online, Sdcb.PaddleInference.runtime.* 套件, OpenCvSharp4, 以及 OpenCvSharp4.runtime.win。 新增 IronOcr。 為以前正在使用下載模式集合的任何非英語語言新增語言包作為 NuGet 套件。
using Sdcb.PaddleOCR 和 using OpenCvSharp 指令替換為 using IronOcr。 Mat mat = Cv2.ImRead(path) 模式替換爲 new OcrInput(path) 或 input.LoadImage(path)。 ocr.Run(mat) 調用改爲 ocr.Read(input)。 對於使用 圖像輸入 API 的項目,OcrInput 物件接受文件路徑、位元組陣列、流和 System.Drawing.Bitmap - 基於 OpenCvSharp 的中介完全消失。
結果結構重新映射
PaddleOCR 返回 result.Regions - 一個 PaddleOcrResultRegion 物件的陣列,其中 region.Score 是從 0 到 1 的浮點數。IronOCR 返回 result.Words - 其中 word.Confidence 是一個從 0 到 100 的百分比。置信度過濾器 r.Score >= 0.8 映射到 w.Confidence >= 80。 邊界框存取從 region.Rect.Center.X / region.Rect.Size.Width 改為 word.X / word.Width。 結構化結果指南 涵蓋了頁面、段落、行和詞。
IronOCR 中較少需要空間排序(按 Y 排序再按 X 排序以近似於閱讀順序),因為 Tesseract 的佈局引擎在其頁面分割步驟中執行了閱讀順序分析。對於 PaddleOCR 需要明確排序邏輯的文件,在傳輸排序程式碼之前測試IronOCR的預設輸出順序是否已經滿足需求。
預處理過渡
PaddleOCR 的深度學習檢測模型容忍中等質量的圖像降級 - 神經網路比 Tesseract 的典型分割流水線更可靠地處理噪點和傾斜。在過渡到IronOCR時,對於以前未經過成功處理的文件加入顯式預處理:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("low-quality-scan.png");
// These filters recover the accuracy that PaddleOCR provided automatically
// on noisy or skewed inputs
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = ocr.Read(input);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("low-quality-scan.png");
// These filters recover the accuracy that PaddleOCR provided automatically
// on noisy or skewed inputs
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = ocr.Read(input);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("low-quality-scan.png")
' These filters recover the accuracy that PaddleOCR provided automatically
' on noisy or skewed inputs
input.Deskew()
input.DeNoise()
input.Contrast()
input.Binarize()
input.EnhanceResolution(300)
Dim result = ocr.Read(input)
End Using
對於非標準角度或有背景噪音的掃描文件,這些四個過濾器能夠恢復絕大部分的準確性缺口。圖像方向校正指南 和 圖像色彩校正指南 記錄了每個濾波器對常見掃描人工文物的影響。 在最終遷移之前通過兩個管道運行代表性文件以驗證準確性是否滿足實際文件集的要求。
部署清理
遷移後,部署工件大大縮小。 刪除 models/ 目錄樹(三個子目錄,約 21MB 模型文件),paddle_inference.dll (約 200MB),paddle2onnx.dll (約 5MB),和 opencv_world*.dll 文件(合計約 50MB)。 從 Dockerfile 中刪除 apt-get install libopencv-dev 線和模型複製步驟。刪除任何預下載模型或快取模型目錄的 CI/CD 步驟。 Docker 圖像從 ~1.5GB 下降到 ~400MB。
其他IronOCR功能
除上述比較點外,IronOCR 還提供將 OCR 擴展至文字提取之外的功能:
- 在 OCR 中讀取條碼: 設置
ocr.Configuration.ReadBarCodes = true,條碼與相同文件在一起解碼,與文字在同一次操作中 - 不需要單獨的條碼庫 - 基於區域的 OCR: 使用
CropRectangle限定於特定文件區域(如發票號碼字段、標題行、簽名塊),無需處理整個頁面 - 異步 OCR: 全面的異步/等待支持用於在 ASP.NET 控制器和背景服務中非阻塞整合
- 置信度評分: 文件級和單詞級置信度啓用質量把關 - 將低置信度結果拒絕或標記給人工檢查
- hOCR 輸出: 生成 hOCR 輸出供下游文件管理系統消費位置 HTML
- 手寫識別: 擴展到手寫形式和筆記的打字文件 OCR
- 表格提取: 從發票、聲明和表格中結構化提取表格資料
- 進度跟踪: 用於在 UI 上下文中報告長距離多頁批操作的 OCR 進度
.NET 相容性和未來準備
IronOCR 針對 Windows x64, Windows x86, Linux x64 和 macOS 的 .NET 6, 7, 8 和 9。 它可以運行在 Azure App Service、AWS Lambda、Docker 容器和氣隙的本地環境中 - 全部來自相同的 NuGet 套件。 該庫從 Iron Software 定期接收更新,以符合每個 .NET 發佈週期的要求,包括計劃與 .NET 10 的相容性。 PaddleOCR 的 .NET 包裝器是一個由社區維護的項目; 與新 .NET 版本的相容性取決於單一維護者的能力。 包裝器的發布時間表和新的 PaddleOCR Python 模型版本到達 .NET 的三個月滯後顯示了對社區可用性而非商業發布承諾的依賴。
結論
PaddleOCR 的 CJK 準確性優勢是真實且具體的。 對於一個主要處理簡體中文文件的項目,並且其團隊具備深度學習專業知識和現有的 GPU 基礎設施,多包設置成本和 CUDA 配置複雜度是由 Tesseract 不匹配的密集中文字元識別的準確性數字所證明的。
問題在於這個具體場景描述了大多數 .NET OCR 用例的少數情況。 大多數商業應用程式處理英語和歐洲語言文件,其中IronOCR的 97-99% 準確性超過了 PaddleOCR 的 92-95%。 大多數開發團隊沒有預配置的 CUDA 基礎設施。 大多數文件管道接收 PDF,PaddleOCR無法處理而不使用額外文件庫。 並且大多數工作在 .NET 項目上的開發人員希望一個單獨的包安裝是完整的安裝步驟,而不是五個包的第一個,加上一個異步模型下載和 OpenCV 依賴。
對於需要大規模 GPU 吞吐量的團隊而言,PaddleOCR 的 CPU 性能 (300-500ms) 已經落後於IronOCR的 CPU 性能 (150-300ms) - 這意味著唯一 PaddleOCR 的性能論點成立的場景是已經運行起來的 CUDA 基礎設施。IronOCR的永久許可證成本通常在第一周內就能回收,僅僅是相對於 GPU 配置時間而言。
首要問題是中文字元準確率在 95%+ 是否合理地證明供應它的所有堆疊。 對於在環境中首推中文工作的情況,有 GPU 基礎設施和對 Baidu 來源軟體的合規通過的情況,答案是肯定的。 對於其他情況,IronOCR 在不到五分鐘的時間內開始運行和涵蓋大多數 .NET OCR 專案實際需要的語言、預処理和 PDF 要求。
常見問題
什麼是 PaddleOCR?
PaddleOCR 是一種 OCR 解決方案,開發者和企業用於從圖像和文件中提取文字。在 .NET 應用程式開發中,它是和 IronOCR 一起評估的幾個 OCR 選擇之一。
IronOCR 與 PaddleOCR 對於 .NET 開發者來說有何不同?
IronOCR 是一個 NuGet 原生的 .NET OCR 程式庫,以 IronTesseract 為核心引擎。與 PaddleOCR 相比,它提供更簡單的部署(無 SDK 安裝程式)、統一價格,以及無 COM 互通或雲依賴的乾淨 C# API。
IronOCR 比 PaddleOCR 更容易設定嗎?
IronOCR 通過一個單一的 NuGet 套件安裝。無需 SDK 安裝程式、複製授權文件、註冊 COM 元件或管理單獨的運行時二進位檔案。整個 OCR 引擎都打包在套件中。
PaddleOCR 和 IronOCR 的準確性有什麼區別?
IronOCR 在標準商業文件、發票、收據和掃描表單上達到了高識別準確度。對於極度退化的文件或罕見文字,準確度會根據來源品質變化。IronOCR 包含影像預處理篩選器,以改善低品質輸入的識別。
IronOCR 支援 PDF 文字提取嗎?
是的。IronOCR 能從原生 PDF 和掃描的 PDF 圖像中一次性提取文字。它還支持多頁 TIFF 檔案、影像和流。對於掃描的 PDF,OCR 會逐頁應用並生成每頁的結果物件。
PaddleOCR 的授權如何與 IronOCR 比較?
IronOCR 採用固定費率的永久授權,無須為每頁或每次掃描支付費用。處理大量文件的組織無論數量多少都支付相同的授權費用。詳細資訊和批量定價在 IronOCR 授權頁面上。
IronOCR 支援哪些語言?
IronOCR 透過單獨的 NuGet 語言包支持 127 種語言。新增一種語言只需一個 'dotnet add package IronOcr.Languages.{Language}' 命令。無需手動放置文件或配置路徑。
如何在.NET專案中安裝IronOCR?
通過 NuGet 安裝:在套件管理員控制台或 CLI 中分別使用 'Install-Package IronOcr' 或 'dotnet add package IronOcr'。其他語言包也是這樣安裝的。無需本地 SDK 安裝程式。
IronOCR 是否適合 Docker 和容器化部署,而 PaddleOCR 不適合?
是的。IronOCR 通過其 NuGet 載於 Docker 容器中運行。授權金鑰通過環境變數設置。無需授權文件、SDK 路徑或量掛載來執行 OCR 引擎。
與 PaddleOCR 相比,我可以在購買之前試用 IronOCR 嗎?
是的。IronOCR 試用模式中處理文件並在輸出上附上浮水印結果。您可以在購買授權前驗證自己文件的準確性。
IronOCR 支援條碼閱讀與文字提取嗎?
IronOCR 專注於文字提取和 OCR。對於條碼閱讀,Iron Software 提供了額外的 IronBarcode 程式庫。兩者均可個別使用或作為 Iron Suite 套件的一部分。
從 PaddleOCR 遷移到 IronOCR 容易嗎?
從 PaddleOCR 遷移到 IronOCR 通常涉及用 IronTesseract 初始化取代初始化序列、移除 COM 生命週期管理,並更新 API 呼叫。大多數遷移顯著減少程式碼複雜性。

