IRONSOFTWAREHOME
MIT ANDEREN KOMPONENTEN VERGLEICHEN

Paddle OCR vs Tesseract: Detaillierter OCR-Vergleich

Kannaopat Udonpant
Kannapat Udonpant
Updated: 28. Juni 2026

PaddleOCR bietet modernste chinesische Zeichenerkennung – aber die Verarbeitung eines einzelnen Bildes in einer .NET Anwendung erfordert fünf NuGet Pakete, einen asynchronen Modell-Download (~100 MB), der eine Verbindung zu Baidu-Servern in China herstellt, eine OpenCvSharp-Abhängigkeit für jeden Bildladevorgang und eine Kaltstartzeit von 3-5 Sekunden beim ersten Start. Das ist der Preis für die Nutzung eines Python-basierten Deep-Learning-Systems aus einem .NET Projekt. Bei Arbeitslasten mit hohem CJK-Anteil, bei denen Genauigkeit bei der chinesischen Schriftzeichen zwingend erforderlich ist und bereits eine GPU-Infrastruktur vorhanden ist, lohnt sich dieser Aufwand. Alles andere sind unnötige Gemeinkosten für das Projekt.

PaddleOCR verstehen

PaddleOCR ist ein Open-Source-OCR-System, das von Baidu auf Basis von PaddlePaddle, Baidus eigenem Deep-Learning-Framework, entwickelt wurde. Das Projekt wurde von Grund auf für Python-Entwickler entworfen und die .NET-Community greift über einen Community-Wrapper darauf zu, Sdcb.PaddleOCR, gewartet von Zhou Jie (sdcb) auf GitHub.

Die Erkennungspipeline verknüpft drei neuronale Netze nacheinander: ein Texterkennungsmodell mit differenzierbarer Binarisierung (DB), das die Begrenzungsrahmen der Textregion identifiziert, einen Richtungsklassifikator, der die Textausrichtung bestimmt, und ein Erkennungsmodell mit einem Convolutional Recurrent Neural Network (CRNN), das die erkannten Regionspixel in eine Zeichenkette umwandelt. Jedes dieser Netzwerke ist eine separate Modelldatei, die auf der Festplatte vorhanden sein muss, bevor mit der Inferenz begonnen werden kann.

Wichtigste architektonische Merkmale:

  • Multi-Paket-Installation: Kernpaket (Sdcb.PaddleOCR), Plattform-Laufzeit (Sdcb.PaddleInference.runtime.win64.mkl oder das CUDA-Äquivalent), Modell-Download-Helfer (Sdcb.PaddleOCR.Models.Online) und OpenCvSharp für Bildladen — mindestens vier Pakete, fünf, wenn Sie die OpenCvSharp-Laufzeit trennen.
  • Obligatorischer Modell-Download: Modelle sind nicht im Paket enthalten. Der erste Aufruf verwendet OnlineFullModels.ChineseV4.DownloadAsync(), das von Baidu-kontrollierten Servern (bj.bcebos.com) herunterlädt und etwa 100MB zu den Bereitstellungsartefakten hinzufügt.
  • OpenCV-Abhängigkeit für jedes Bild: Es gibt keinen direkten Pfad von einem Dateipfad zur Inferenz. Bilder müssen als OpenCvSharp Mat Objekt geladen werden, bevor sie an ocr.Run(mat) übergeben werden.
  • GPU-Beschleunigung erfordert CUDA/cuDNN-Einrichtung: Um die beworbenen Leistungswerte zu erreichen, werden NVIDIA-Treiber, CUDA Toolkit 11.8, cuDNN 8.6+ und ein separates GPU-Runtime NuGet Paket benötigt – die Einrichtung dauert 2–8 Stunden pro Umgebung.
  • Python-First-Release-Zyklus: Neue PaddleOCR-Modellversionen erscheinen zuerst in Python; .NET Wrapper-Updates folgen Wochen bis Monate später.
  • 14 unterstützte Sprachen: Chinesisch (vereinfacht), Chinesisch (traditionell), Englisch, Französisch, Deutsch, Koreanisch, Japanisch, Italienisch, Spanisch, Portugiesisch, Russisch, Arabisch, Hindi und Tamil – eine feste Obergrenze

Das NuGet Paket wurde rund 200.000 Mal heruntergeladen. Der geringere Ressourcenbedarf bedeutet weniger Antworten auf Stack Overflow, weniger praxiserprobte Produktionsberichte und einen kleineren Pool an Entwicklern, die Fragen aus Erfahrung beantworten können.

Die Drei-Modell-Pipeline in der Praxis

Bei jedem PaddleOCR-Inferenzaufruf werden drei neuronale Netze nacheinander ausgeführt. Der folgende Code zeigt den kompletten Setup-Pfad, den ein Entwickler durchläuft, bevor Text zurückgegeben wird:

// 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);

Das result.Regions Array enthält einzelne Texbereichsobjekte, jedes mit einem Text Zeichenkette, einem Score Vertrauenswert und einer Rect Begrenzungsbox. Um nach Vertrauenswert zu filtern: result.Regions.Where(r => r.Score > 0.8). Die Regionenreihenfolge ist räumlich, nicht lesereihenfolgegarantiert, daher ist das Sortieren nach region.Rect.Center.Y dann region.Rect.Center.X ein häufiges Muster.

##IronOCR verstehen

IronOCR ist eine kommerzielle OCR-Bibliothek für .NET , die auf einer optimierten Tesseract 5 LSTM-Engine basiert und darauf ausgelegt ist, die Konfigurations- und Vorverarbeitungsarbeiten zu eliminieren, die bei der Verwendung von Tesseract erforderlich sind. Ein einziges NuGet Paket installiert die komplette Laufzeitumgebung, Sprachmodelle, native Binärdateien und die Vorverarbeitungspipeline.

Hauptmerkmale:

  • Einzelpaket-Bereitstellung: dotnet add package IronOcr installiert alles. Keine zusätzlichen Laufzeitpakete, keine Modell-Downloads, keine Konfiguration nativer Bibliotheken
  • Automatische Vorverarbeitung: Entzerren, Rauschen entfernen, Kontrast anpassen, Binarisieren und Auflösung verbessern werden automatisch bei Eingaben von geringer Qualität angewendet; explizite Kontrolle ist bei Bedarf möglich
  • Nativen PDF-Support: Gescannte PDFs werden direkt über input.LoadPdf() geladen, ohne einen Drittanbieter-Konvertierungsschritt.
  • 125+ Sprachen über NuGet: Jedes Sprachpaket ist eine standardmäßige NuGet-Abhängigkeit — dotnet add package IronOcr.Languages.ChineseSimplified — keine Modellverzeichnisverwaltung.
  • Thread-sicher, CPU-optimiert: Integrierte Parallelisierung ohne CUDA- oder GPU-Hardwareanforderungen
  • Kommerzieller Support mit SLA: Der in den USA ansässige Anbieter Iron Software bietet kommerziellen Support; Das Produkt ist kein gemeinschaftliches Nebenprojekt.
  • Unbefristete Lizenzierung: $999 Lite / $1,499 Plus / $2,399 Professional — einmal zahlen, unbegrenzt laufen, ohne pro-Seite Gebühren.

Funktionsvergleich

FeaturePaddleOCR (Sdcb)IronOCR
Erforderliche NuGet Pakete4-51
Modell-Download erforderlichJa (~100 MB, Baidu-Server)Nein (gebündelt)
Einrichtungszeit30-60 Minuten5 Minuten
CJK-GenauigkeitAusgezeichnet (95%+)Gut (85-90%)
Englisch/Lateinische GenauigkeitGut (92-95%)Ausgezeichnet (97-99 %)
GPU-UnterstützungJa (komplexe CUDA-Konfiguration)CPU-optimiert
Native PDF-UnterstützungNeinJa
Unterstützte Sprachen14125+
LizenzApache 2.0 (kostenlos)Kommerziell ($999+)
FirmenursprungChina (Baidu)USA (Iron Software)

Detaillierter Funktionsvergleich

Kategorie / FunktionPaddleOCR (Sdcb)IronOCR
Einrichten
NuGet-Pakete4-51
Modell-Download bei InstallationErforderlichEnthalten
Erster Kaltstart3-5 SekundenUnter 1 Sekunde
Installationszeit30-60 MinutenUnter 5 Minuten
OpenCV-AbhängigkeitErforderlichNone
Sprachunterstützung
Unterstützte Sprachen14125+
Methode zur SprachinstallationModell herunterladenNuGet-Paket
Mehrsprachige SimultanübertragungSequenzieller ModellwechselJa (AddSecondaryLanguage)
CJK-GenauigkeitAusgezeichnetGut
Latein/Englische GenauigkeitGutAusgezeichnet
Eingabeverarbeitung
Eingabe einer BilddateiÜber OpenCvSharp MatDirekter Dateipfad
Native PDF-EingabeNeinJa
Passwortgeschütztes PDFNeinJa
Stream-EingabeIndirektJa
Byte-Array-EingabeIndirektJa
Vorverarbeitung
Automatische VorverarbeitungNeinJa
EntschiefenHandbuchEingebaut
RauschunterdrückungHandbuchEingebaut
KontrastverbesserungHandbuchEingebaut
AuflösungsskalierungHandbuchEnhanceResolution(300)
Ausgabe
Vollständiger TextJaJa
Ergebnisse pro Region/Wortresult.Regionsresult.Words, result.Lines
KonfidenzwertePro Region (region.Score)Pro Wort (word.Confidence)
Begrenzungsrahmenregion.Rectword.X, word.Y, word.Width, word.Height
Durchsuchbare PDF-AusgabeNeinJa
hOCR-ExportNeinJa
Leistung
CPU pro Image300-500 ms150-300ms
GPU pro Bild50-100 ms (erfordert CUDA)Nicht verfügbar (CPU-optimiert)
Speicherverbrauch500 MB – 1 GB100-200 MB
Bereitstellungsgröße300-500 MB~80MB
Einsatz
Docker-Basisimagegröße~1,5 GB (mit CUDA-Basis)~400 MB
PlattformübergreifendWindows/Linux (teilweise)Windows, Linux, macOS
Air-Gapped-BereitstellungJa (Modelle vor dem Download)Ja (keine Downloads erforderlich)
Support und Lizenzierung
LizenztypApache 2.0 (kostenlos)Dauerhafter Werbespot
Kommerzielle UnterstützungCommunity/GitHubJa, mit SLA
Firma / WartungsfirmaBaidu / Community-WrapperIron Software (USA)
NuGet -Downloads~200.000~5.3M

CJK-Genauigkeit vs. Einrichtungskosten

Die Genauigkeit der CJK-Klassifizierung ist die wahre Stärke von PaddleOCR. Bei Dokumenten in vereinfachtem Chinesisch erzielt die Deep-Learning-CRNN-Architektur Genauigkeitswerte von über 95 % – und liegt damit bei dichten chinesischen Zeichenraster, gemischten chinesisch/englischen Layouts und vertikalen Textblöcken stets vor den Tesseract-basierten Systemen. Wenn der Hauptarbeitsschwerpunkt eines Projekts in der Verarbeitung chinesischer Rechnungen, Mandarin-Verträge oder japanischer Produktkataloge liegt, ist dieser Genauigkeitsvorteil real.

PaddleOCR-Ansatz

Die chinesische Modellpipeline funktioniert gut, weil die Erkennungs- und Identifizierungsnetzwerke von Baidu, dessen Kerngeschäft die Verarbeitung chinesischer Webinhalte in großem Umfang ist, anhand umfangreicher chinesischer Dokumentendatensätze trainiert wurden.

// 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})");
}

Das Vertrauensfilter-Muster (r.Score >= 0.8) ist wichtig, da der Deep-Learning-Erkennungsschritt gelegentlich Nicht-Text-Bereiche als Text kennzeichnen wird. Ohne Filterung entstehen im Ausgangssignal Rauschbereiche. Sortieren nach Rect.Center.Y dann Rect.Center.X approximiert die Lesereihenfolge, garantiert sie aber nicht für komplexe mehrspaltige Layouts.

IronOCR-Ansatz

Die Unterstützung für vereinfachtes Chinesisch von IronOCR wird als NuGet Paket installiert und erfordert keine Modellverwaltung. Die Genauigkeit bei chinesischen Dokumenten liegt bei 85-90% – niedriger als die über 95% von PaddleOCR beim gleichen Material, aber ausreichend für viele Anwendungsfälle in der Produktion, insbesondere wenn die Dokumente eine einheitliche Formatierung aufweisen.

// 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}%");
}

Für Teams, die gleichzeitig mehrere Sprachen benötigen — wie gemischte Chinesische/Englische Dokumente — behandelt IronOCR die Kombination mit AddSecondaryLanguage. PaddleOCR erfordert das Umschalten von Modellsätzen zwischen den Sprachen, was separate Download-Aufrufe und separate Engine-Instanzen bedeutet.

Der Kompromiss ist eindeutig: PaddleOCR punktet mit reiner CJK-Genauigkeit.IronOCR punktet mit Genauigkeit bei Englisch/Latein (97-99% gegenüber 92-95%), Vorverarbeitung für Scans minderer Qualität und der einfachen Bedienung, da keine Modelldateien verwaltet werden müssen. Teams, die Dokumente in verschiedenen Sprachen verarbeiten oder hauptsächlich europäischsprachige Dokumente mit gelegentlichem CJK-Inhalt bearbeiten, werden das Genauigkeitsprofil von IronOCR in der Gesamtheit als nützlicher empfinden. Im IronOCR -Tutorial-Hub finden Sie Beispiele für Mehrsprachigkeit und Vorverarbeitung.

Modell-Download und -Verwaltung

Der größte Unterschied im Modellmanagement zwischen PaddleOCR und IronOCR stellt den bedeutendsten Unterschied im täglichen Betrieb dar. Es betrifft die Ersteinrichtung, CI/CD-Pipelines, Docker-Images und Air-Gap-Bereitstellungen.

PaddleOCR-Ansatz

PaddleOCR liefert die Modelle separat vom NuGet Paket aus. Für einen vollständigen OCR-Lauf werden drei Modellverzeichnisse benötigt, und jede Methode zur Beschaffung dieser Verzeichnisse birgt unterschiedliche Vor- und Nachteile:

// 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();

Die Modellversion muss mit der Wrapper-Version übereinstimmen. Wenn Sdcb.PaddleOCR aktualisiert wird, können vorab heruntergeladene Modelle aus der vorherigen Version möglicherweise erneut heruntergeladen werden müssen. CI/CD-Pipelines, die den NuGet Wiederherstellungsschritt zwischenspeichern, müssen außerdem das Zwischenspeichern von Modelldateien separat verwalten oder Modell-Downloads während der Container-Build-Phase auslösen. Der Docker-Image-Vergleich zeigt die Konsequenz: Ein PaddleOCR-Container hat eine Größe von ca. 1,5 GB. ein IronOCR Container mit einer Größe von ca. 400 MB.

IronOCR-Ansatz

IronOCR Sprachmodelle sind Standard NuGet Pakete. Keine Download-Aufrufe, keine Modellverzeichnisverwaltung, keine Versionssynchronisierung. Das NuGet Paket für IronOCR enthält das englische Modell; Zusätzliche Sprachpakete werden genau wie jede andere Abhängigkeit installiert.

// dotnet add package IronOcr
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.Japanese

using IronOcr;

//Neinasync 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);
C#

Sprachpakete werden als Teil von dotnet restore wiederhergestellt. Der Docker-Bausschritt, der models/ Verzeichnisse kopiert, apt-get install libopencv-dev ausführt und das CUDA-Basisimage hinzufügt, existiert einfach nicht in einem IronOCR-Container. Für Teams, die Docker- oder Azure-Bereitstellung verwenden, ist der Unterschied in der Komplexität des Container-Builds erheblich.

GPU- und CUDA-Abhängigkeit

Die GPU-Leistungswerte von PaddleOCR – 50–100 ms pro Bild gegenüber 300–500 ms auf der CPU – sind real. Die Deep-Learning-Modelle profitieren deutlich von der GPU-Parallelität, was bei Tesseract-basierten Engines nicht der Fall ist. Bei einer Arbeitslast, die Zehntausende von Bildern pro Tag verarbeitet, verändert diese 5- bis 10-fache Durchsatzsteigerung die Diskussion um die Infrastruktur.

PaddleOCR-Ansatz

Für GPU-Inferenz ist ein völlig separater Software-Stack außerhalb von NuGet erforderlich. Die Systemvoraussetzungen sind präzise und versionsspezifisch:

// 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);

Wenn CUDA_PATH nicht gesetzt ist, fehlt die passende cuDNN DLL im erwarteten Pfad oder die Laufzeitpaketversion stimmt nicht mit dem installierten CUDA Toolkit überein, wirft der Aufruf eine Ausnahme bei der nativen Bibliotheksladung. Die Diagnose dieses Fehlers erfordert die Überprüfung der Treiberversionen, der PATH-Einträge und des Vorhandenseins von DLL-Dateien in mehreren Verzeichnissen. In Docker erfordert der GPU-Support das nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 Basis-Image plus nvidia-container-toolkit auf dem Host, was die Komplexität sowohl des Image-Baus als auch der Container-Laufzeitkonfiguration erhöht.

Bei reinen CPU-Bereitstellungen verwendet PaddleOCR standardmäßig die MKL-beschleunigte Laufzeitumgebung: ca. 300-500 ms pro Bild mit einem Kaltstart des Modellladens von 3-5 Sekunden.

IronOCR-Ansatz

IronOCR wurde für die CPU-Inferenz entwickelt. Es liefert 150-300 ms pro Bild auf Standardhardware ohne GPU-Abhängigkeit, ohne CUDA-Stack und ohne Treiberversionsprobleme. Die Engine startet auch in weniger als einer Sekunde, da die Modelle gebündelt und nicht bei der Initialisierung von der Festplatte geladen werden.

using IronOcr;

//NeinGPU 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}%");
C#

Für Durchsatz im großen Maßstab ohne GPU-Hardware ermöglicht das thread-sichere Design von IronOCRParallel.ForEach über eine Gruppe von Bildern mit separaten IronTesseract Instanzen — jede wird unabhängig ohne Sperren verarbeitet. Das Beispiel mit Multithreading verdeutlicht das Muster. Bei einer Verarbeitungszeit von 150-300 ms pro Bild auf einer 4-Kern-CPU ist ein Batch von 100 Bildern in 20-40 Sekunden durch Parallelverarbeitung abgeschlossen – ein CPU-Durchsatz, der Investitionen in GPUs für die meisten Web-API- und Dokumentenpipeline-Szenarien überflüssig macht.

Der Leitfaden zur Bildqualitätskorrektur beschreibt detailliert die Vorverarbeitungskonfiguration für Fälle, in denen die automatische Vorverarbeitung angepasst werden muss.

PDF-Verarbeitung

PaddleOCR bietet keine native PDF-Unterstützung. Für jede mit PaddleOCR verarbeitete PDF-Datei ist eine externe Bibliothek erforderlich, um die Seiten zunächst in Bilder umzuwandeln, die Verwaltung temporärer Dateien zwischen Konvertierung und Auswertung sowie eine Bereinigungslogik.

PaddleOCR-Ansatz

// 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();

// Handbuch 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();
C#

Das sind mehr als 30 Zeilen für eine einzige PDF-Datei. Hinzufügen einer weiteren NuGet Abhängigkeit (PdfiumViewer), manuelles Rendern der Seite mit einer gewählten DPI-Einstellung, Erstellen und Löschen von temporären Dateien sowie iteratives Sammeln von Ergebnissen – all dies, bevor PaddleOCR selbst ausgeführt wird. Eine zu niedrige DPI-Einstellung beeinträchtigt die Genauigkeit; Ein zu hoher Wert verlängert die Verarbeitungszeit. Die Entscheidung liegt beim Entwickler.

IronOCR-Ansatz

IronOCR liest PDFs nativ. Keine Konvertierungsbibliothek, keine temporären Dateien, keine Schleife pro Seite am Aufrufort:

using IronOcr;

var ocr = new IronTesseract();

// Native PDF-Eingabe — 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");
C#

Passwortgeschützte PDFs verwenden denselben LoadPdf Pfad mit einem Password Parameter. Die PDF-Eingabeanleitung und die durchsuchbare PDF-Anleitung beschreiben die Optionen für mehrseitige Formate und Ausgaben im Detail. Für Organisationen, die gescannte Dokumentenarchive digitalisieren – wo jede Datei als PDF ankommt – entfällt durch diesen Unterschied eine wichtige Ebene an Integrationscode.

API-Mapping-Referenz

PaddleOCR (Sdcb)IronOCR-ÄquivalentNotizen
Sdcb.PaddleOCRIronOcrNamensraum
PaddleOcrAllIronTesseractHaupt-OCR-Orchestrierungsklasse
FullOcrModelNicht anwendbarKein Äquivalent – ​​Modelle gebündelt
OnlineFullModels.ChineseV4.DownloadAsync()dotnet add package IronOcr.Languages.ChineseSimplifiedModellakquisition
LocalDetectionModel.FromDirectory(path)Nicht anwendbarKeine Modellpfadverwaltung
LocalClassificationModel.FromDirectory(path)Nicht anwendbarKeine Modellpfadverwaltung
LocalRecognitionModel.FromDirectory(path)Nicht anwendbarKeine Modellpfadverwaltung
new PaddleOcrAll(models)new IronTesseract()Engine-Instanziierung
new PaddleOcrAll(models, PaddleDevice.Gpu(0))Nicht verfügbar (CPU-optimiert)GPU-Geräteauswahl
Cv2.ImRead(imagePath) (OpenCvSharp)new OcrInput(imagePath) oder input.LoadImage(path)Bild wird geladen
ocr.Run(mat)ocr.Read(input)OCR ausführen
result.Textresult.TextVollständiger Dokumenttext
result.Regionsresult.Words / result.LinesStrukturierte Textbereiche
region.Textword.TextText aus einer Region
region.Scoreword.ConfidenceKonfidenzwert (0-1 vs 0-100)
region.Rect.Center.X / .Center.Yword.X / word.YPosition des Begrenzungsrahmens
region.Rect.Size.Width / .Heightword.Width / word.HeightAbmessungen des Begrenzungsrahmens
AllowRotateDetection = trueinput.Deskew()Rotationshandhabung
Enable180Classification = trueAutomatischErkennung von Text auf dem Kopf stehend
Nicht anwendbarinput.DeNoise()Rauschunterdrückung
Nicht anwendbarinput.Contrast()Kontrastverbesserung
Nicht anwendbarinput.EnhanceResolution(300)DPI-Skalierung
Nicht anwendbarinput.LoadPdf(path)Native PDF-Eingabe
Nicht anwendbarresult.SaveAsSearchablePdf(path)Durchsuchbare PDF-Ausgabe
Nicht anwendbarocr.AddSecondaryLanguage(lang)Mehrsprachig gleichzeitig

Wenn Teams einen Wechsel von PaddleOCR zu IronOCR erwägen

Wenn die Sprachanforderungen über 14 hinausgehen

Ein Projekt beginnt mit der Verarbeitung chinesischer Rechnungen – PaddleOCR bewältigt das gut. Dann erweitert sich der Kundenstamm und Dokumente treffen in Polnisch, Niederländisch, Griechisch, Vietnamesisch und Türkisch ein. Die 14 von PaddleOCR unterstützten Sprachen decken keine dieser Sprachen ab. Die Migration wird notwendig, weil das Tool nicht mit den Anwendungsfällen mitwachsen kann. Das Hinzufügen von polnischer Unterstützung in IronOCR erfordert lediglich das Hinzufügen eines einzigen NuGet Pakets und eine Konfigurationsänderung in einer einzigen Zeile. Teams, die ein Projekt als "anfangs stark auf Chinesisch ausgerichtet, später aber multiregional" planen, müssen im Vorfeld entscheiden, ob sie mit einem Tool beginnen, das die Sprachabdeckung ohne Neuprogrammierung skalieren kann.

Wenn die Einrichtungskosten das Problembudget überschreiten

Laut der PaddleOCR-Dokumentation beträgt die erstmalige Einrichtung schätzungsweise 30-60 Minuten für die CPU und 2-8 Stunden für die GPU. Bei einem Entwicklerzeitaufwand von 100 US-Dollar pro Stunde bedeutet dies, dass der erste Versuch der GPU-Konfiguration 200 bis 800 US-Dollar kostet, bevor das erste Produktionsimage verarbeitet wird. Die Einrichtung von IronOCR besteht aus einem einzigen Installationsbefehl und einem vierzeiligen Codebeispiel – in weniger als fünf Minuten. Bei internen Tools, Prototypen oder Projekten, bei denen OCR eine sekundäre Funktion und nicht das Kernprodukt ist, entscheidet diese Zeitdifferenz darüber, ob die OCR-Funktion im aktuellen Sprint ausgeliefert wird oder eine niedrigere Priorität erhält. Der Einstieg in IronOCR ist schneller als die Konfiguration einer CUDA-Umgebung.

Wenn PDF-Workflows dominieren

Organisationen, die gescannte Dokumentenarchive digitalisieren, Fax-zu-PDF-Pipelines verarbeiten oder Daten aus Rechnungen und Verträgen im PDF-Format extrahieren, stehen mit PaddleOCR vor einem strukturellen Problem: Jedes PDF erfordert eine zusätzliche Bibliothek, manuelles Seitenrendering, temporäre Dateiverwaltung und eine DPI-Auswahllogik, bevor PaddleOCR es verarbeiten kann. Das ist keine nebensächliche Komplexität – es handelt sich um permanente Instandhaltung. Teams, die nach der ersten PaddleOCR-Integration feststellen, dass ihre Arbeitslast zu mehr als 80 % aus PDFs besteht, migrieren in der Regel dann, wenn die PDF-Konvertierungsschicht zu einer Fehlerquelle wird, und nicht, wenn PaddleOCR selbst versagt.

Wenn Compliance-Prüfungen den Baidu-Ursprung kennzeichnen

Sicherheitsteams in Enterprise der Regierung, des Verteidigungsministeriums, des Gesundheitswesens und des Finanzdienstleistungssektors wenden zunehmend Prüfkriterien auf Komponenten an, die ihren Ursprung in Unternehmen mit Verbindungen zum chinesischen Staat haben. PaddleOCR ist ein Projekt von Baidu; Modell-Downloads verbinden sich standardmäßig mit Baidu Cloud Storage; Das PaddlePaddle-Framework ist ein Produkt von Baidu. Der Code wird lokal ausgeführt und Dokumente werden nicht übertragen, die Modellartefakte stammen jedoch aus der Baidu-Infrastruktur. In FedRAMP-, ITAR- oder CMMC-Umgebungen löst diese Herkunft eine Compliance-Prüfung aus, die die Einführung verhindern kann.IronOCR ist ein Produkt von Iron Software, einem US-amerikanischen Unternehmen, verarbeitet alle Inhalte lokal, stellt keine externen Verbindungen her und benötigt keine Modell-Downloads von Servern Dritter.

Wenn keine GPU-Infrastruktur vorhanden ist

PaddleOCR auf der CPU (300-500 ms/Bild, 3-5 Sekunden Kaltstartzeit, 500 MB-1 GB Speicher) ist langsamer und ressourcenintensiver als IronOCR auf der CPU (150-300 ms/Bild, unter 1 Sekunde Kaltstartzeit, 100-200 MB Speicher). Der GPU-Vorteil von PaddleOCR kommt erst nach der Einrichtung von CUDA/cuDNN zum Tragen, und dieser Vorteil rechtfertigt die operative Komplexität nur bei hohem Datenaufkommen. Teams, die Standard-Cloud-Infrastrukturen ohne GPU-Instanzen nutzen – EC2 ohne GPU, Azure App Service, AWS Lambda – zahlen die Einrichtungskosten von PaddleOCR, ohne den Leistungsvorteil zu erhalten, der diese rechtfertigt.

Gemeinsame Überlegungen zur Migration

Paket- und Namensraumersetzung

Der Pakettausch entfernt fünf Abhängigkeiten und fügt eine hinzu. Entfernen Sie Sdcb.PaddleOCR, Sdcb.PaddleOCR.Models.Online, das Sdcb.PaddleInference.runtime.* Paket, OpenCvSharp4, und OpenCvSharp4.runtime.win aus dem .csproj. Fügen Sie IronOcr hinzu. Fügen Sie Sprachpakete als NuGet Pakete für alle nicht-englischen Sprachen hinzu, die zuvor ein heruntergeladenes Modellset verwendet haben.

Die using Sdcb.PaddleOCR und using OpenCvSharp Direktiven werden durch using IronOcr ersetzt. Das Mat mat = Cv2.ImRead(path) Muster wird durch new OcrInput(path) oder input.LoadImage(path) ersetzt. Der ocr.Run(mat) Aufruf wird zu ocr.Read(input). Für Projekte, die die Bild-Eingabe-API verwenden, akzeptiert das OcrInput Objekt Dateipfade, Bytesequenzen, Streams und System.Drawing.Bitmap — der OpenCvSharp-Vermittler verschwindet vollständig.

Ergebnisstruktur-Neuzuordnung

PaddleOCR gibt result.Regions zurück — ein Array von PaddleOcrResultRegion Objekten, wobei region.Score ein Float von 0 bis 1 ist.IronOCR gibt result.Words zurück — wobei word.Confidence ein Prozentsatz von 0 bis 100 ist. Die Vertrauensfilter r.Score >= 0.8 mappt zu w.Confidence >= 80. Der Zugriff auf die Begrenzungsbox ändert sich von region.Rect.Center.X / region.Rect.Size.Width zu word.X / word.Width. Der Leitfaden für strukturierte Ergebnisse umfasst Seiten, Absätze, Zeilen und Wörter.

Die räumliche Sortierung (Sortierung zuerst nach Y, dann nach X, um die Lesereihenfolge zu approximieren) ist bei IronOCR seltener erforderlich, da die Layout-Engine von Tesseract die Lesereihenfolgeanalyse im Rahmen der Seitensegmentierung durchführt. Bei Dokumenten, für die PaddleOCR eine explizite Sortierlogik benötigte, sollte vor der Portierung des Sortiercodes geprüft werden, ob die Standardausgabereihenfolge von IronOCR die Anforderung bereits erfüllt.

Vorverarbeitungsübergang

Das Deep-Learning-Erkennungsmodell von PaddleOCR toleriert moderate Beeinträchtigungen der Bildqualität – das neuronale Netzwerk verarbeitet Rauschen und Verzerrungen zuverlässiger als die klassische Segmentierungspipeline von Tesseract. Bei der Migration zu IronOCR ist eine explizite Vorverarbeitung für Dokumente erforderlich, die zuvor ohne diese erfolgreich verarbeitet wurden.

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);

Bei gescannten Dokumenten, die aus ungewöhnlichen Winkeln aufgenommen wurden oder Hintergrundrauschen aufweisen, gleichen diese vier Filter den größten Teil der Genauigkeitslücke aus. Die Anleitungen zur Bildorientierungskorrektur und zur Bildfarbkorrektur beschreiben die Wirkung jedes Filters auf häufige Scanartefakte. Führen Sie vor dem endgültigen Abschluss der Migration repräsentative Dokumente durch beide Pipelines, um zu überprüfen, ob die Genauigkeit den Anforderungen an den tatsächlichen Dokumentensatz entspricht.

Bereitstellungsbereinigung

Nach der Migration verkleinert sich das Bereitstellungsartefakt erheblich. Löschen Sie den models/ Verzeichnispfad (drei Unterverzeichnisse, ~21MB an Modell-Dateien), paddle_inference.dll (~200MB), paddle2onnx.dll (~5MB) und die opencv_world*.dll Dateien (~50MB insgesamt). Entfernen Sie die apt-get install libopencv-dev Zeile aus der Dockerfile und den Modellkopierschritt. Entfernen Sie jegliche CI/CD-Schritte, die Modelle vorab herunterladen oder Modellverzeichnisse zwischenspeichern. Das Docker-Image reduziert sich von ca. 1,5 GB auf ca. 400 MB.

Zusätzliche Funktionen von IronOCR

Über die oben genannten Vergleichspunkte hinaus bietet IronOCR Funktionen, die die OCR über die Textextraktion hinaus erweitern:

  • Barcodelesen während OCR: Setzen Sie ocr.Configuration.ReadBarCodes = true und Barcodes im selben Dokument werden zusammen mit dem Text in einem Durchgang dekodiert — keine separate Barcode-Bibliothek erforderlich.
  • Regionsbasierte OCR: Verwenden Sie CropRectangle, um spezifische Dokumentzonen (Rechnungsnummernfeld, Kopfzeile, Unterschriftsblock) zu zielen, ohne die gesamte Seite zu verarbeiten.
  • Asynchrone OCR : Vollständige Unterstützung für async/await zur nicht-blockierenden Integration in ASP.NET -Controller und Hintergrunddienste
  • Konfidenzbewertung : Die Konfidenz auf Dokument- und Wortebene ermöglicht die Qualitätssicherung – Ergebnisse mit geringer Konfidenz werden abgelehnt oder zur manuellen Überprüfung markiert.
  • hOCR-Export : Erzeugt hOCR-Ausgabe für nachgelagerte Dokumentenmanagementsysteme, die positionelles HTML verarbeiten.
  • Handschrifterkennung : Erweitert die Texterkennung von getippten Dokumenten auf handschriftliche Formulare und Notizen.
  • Tabellenextraktion : Strukturierte Extraktion tabellarischer Daten aus Rechnungen, Kontoauszügen und Formularen
  • Fortschrittsverfolgung : OCR-Fortschrittsmeldung für lange, mehrseitige Stapelverarbeitungen in UI-Kontexten

.NET-Kompatibilität und Zukunftsfähigkeit

IronOCR unterstützt .NET 6, 7, 8 und 9 unter Windows x64, Windows x86, Linux x64 und macOS. Es läuft auf Azure App Service, AWS Lambda, Docker-Containern und abgeschotteten lokalen Umgebungen – alles über dasselbe NuGet Paket. Die Bibliothek erhält von Iron Software regelmäßig Updates, die auf die jeweiligen .NET Releasezyklen abgestimmt sind, einschließlich der geplanten Kompatibilität mit .NET 10 nach dessen Veröffentlichung. Der .NET Wrapper von PaddleOCR ist ein von der Community gepflegtes Projekt; Die Kompatibilität mit neuen .NET Versionen hängt von den Kapazitäten des jeweiligen Maintainers ab. Der Veröffentlichungszeitplan des Wrappers und die dreimonatige Verzögerung bei der Verfügbarkeit neuer PaddleOCR Python-Modellversionen for .NET verdeutlichen die Abhängigkeit von der Verfügbarkeit durch die Community und nicht von kommerziellen Veröffentlichungsverpflichtungen.

Abschluss

Der Genauigkeitsvorteil von PaddleOCR bei CJK-Systemen ist echt und spezifisch. Bei einem Projekt, dessen Hauptarbeitslast in der Verarbeitung vereinfachter chinesischer Dokumente besteht und dessen Team über Expertise im Bereich Deep Learning sowie eine bestehende GPU-Infrastruktur verfügt, sind die Kosten für die Einrichtung mehrerer Pakete und die Komplexität der CUDA-Konfiguration durch Genauigkeitswerte gerechtfertigt, die Tesseract-basierte Engines derzeit bei der Erkennung dichter chinesischer Zeichen nicht erreichen.

Das Problem ist, dass dieses spezielle Szenario nur eine Minderheit der .NET OCR-Anwendungsfälle beschreibt. Bei den meisten kommerziellen Anwendungen werden englische und europäischsprachige Dokumente verarbeitet, wobei die Genauigkeit von IronOCR mit 97-99% die von PaddleOCR mit 92-95% übertrifft. Die meisten Entwicklungsteams verfügen nicht über eine vorkonfigurierte CUDA-Infrastruktur. Die meisten Dokumentenverarbeitungsprozesse erhalten PDFs, die PaddleOCR ohne eine zusätzliche Bibliothek nicht verarbeiten kann. Die meisten Entwickler, die an einem .NET -Projekt arbeiten, erwarten, dass die Installation eines einzigen Pakets den gesamten Installationsvorgang abschließt – und nicht, dass zunächst fünf Pakete heruntergeladen, dann ein asynchrones Modell heruntergeladen und eine OpenCV-Abhängigkeit installiert wird.

Für Teams, die einen hohen GPU-Durchsatz benötigen, hinkt die CPU-Leistung von PaddleOCR (300-500 ms) bereits der CPU-Leistung von IronOCR(150-300 ms) hinterher – das heißt, das Leistungsargument von PaddleOCR ist nur dann gültig, wenn die CUDA-Infrastruktur bereits betriebsbereit ist. Die Kosten für die Dauerlizenz von IronOCR amortisieren sich in der Regel schon innerhalb der ersten Woche, wenn man nur den Zeitaufwand für die GPU-Konfiguration berücksichtigt.

Die Ausgangsfrage ist, ob eine Genauigkeit von über 95 % bei chinesischen Schriftzeichen den gesamten dafür notwendigen Technologie-Stack rechtfertigt. Für primär chinesische Workloads in Umgebungen mit GPU-Infrastruktur und Compliance-Zulassung für Software mit Baidu-Ursprung lautet die Antwort ja. Für alle anderen Fälle ist IronOCR in weniger als fünf Minuten einsatzbereit und deckt die Sprach-, Vorverarbeitungs- und PDF-Anforderungen ab, die bei den meisten .NET OCR-Projekten tatsächlich auftreten.

Hinweis:: PDFium, PaddleOCR und Tesseract sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Webseite ist weder mit Baidu, Chromium Project, Google noch PaddlePaddle verbunden, von ihnen unterstützt oder gesponsert. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.