IRONSOFTWAREHOME
VIDEOS

Umstellung von Patagames Tesseract.NET SDK auf IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 1. August 2026

Dieser Leitfaden führt .NET-Entwickler durch eine vollständige Migration vom Patagames Tesseract .NET SDK zu IronOCR. Sie umfasst die mechanische API-Übersetzung, die plattformübergreifende Bereitstellung, die den Großteil der Migrationen ermöglicht, sowie die praktischen Codeänderungen, die erforderlich sind, um eine OCR-Pipeline in der Produktion von einem reinen Windows-Wrapper auf eine Bibliothek umzustellen, die ohne Änderungen unter Windows, Linux, macOS, Docker, Azure und AWS läuft.

Warum von Patagames Tesseract .NET SDK migrieren?

Die Mehrheit der Teams, die Patagames als Ersatz in Betracht ziehen, ist mit der OCR-Genauigkeit nicht unzufrieden. Sie stoßen auf eine Bereitstellungsbarriere – ein Linux-Container-Ziel, ein Cloud-Migrationsprojekt oder eine CI-Pipeline unter Ubuntu – und stellen fest, dass die ausschließlich für Windows bestimmte native Binärdatei auf dieser Plattform einfach keine Zukunft hat. Diese einzige Vorgabe bestimmt den weiteren Verlauf der Migrationsbewertung.

Die ausschließliche Bereitstellung für Windows blockiert den modernen .NET-Stack. Patagames liefert native Windows-Binärdateien für seinen Tesseract-Engine-Wrapper aus. Es gibt keine Laufzeitpakete für Linux x64, macOS oder ARM. Die OcrApi-Klasse lädt eine Windows-DLL zur Laufzeit; auf jedem anderen Betriebssystem schlägt das Starten der Anwendung fehl. Fügen Sie die System.Drawing.Bitmap Abhängigkeit hinzu, die Microsoft formell als nicht unterstützt für neue plattformübergreifende Entwicklung markiert hat, und die Bibliothek ist mit dem standardmäßigen Bereitstellungsmodell jedes Cloud-Anbieters und Container-Orchestrators inkompatibel.

Kommerzielle Preise für eine kostenlose Engine ohne plattformübergreifenden Zugriff. Die Tesseract-Engine, auf der Patagames basiert, ist Open Source und kostenlos. Kostenlose Community-Wrappers wie tesseractocr liefern heute ebenfalls vorgefertigte Windows-Binaries, was das Hauptargument für die Bequemlichkeit, das Patagames historisch angeboten hat, beseitigt. Eine kommerzielle Lizenz für Patagames bietet eine geringfügig übersichtlichere API-Oberfläche als das reine Tesseract, fügt jedoch keine Vorverarbeitung, PDF-Unterstützung, durchsuchbare PDF-Ausgabe oder plattformübergreifende Bereitstellung hinzu – die vier Funktionen, die eine vollständige OCR-Bibliothek im Jahr 2026 ausmachen.

Undurchsichtige Preisgestaltung macht die Budgetplanung unmöglich. Patagames veröffentlicht keine Lizenzpreise. Für die Bewertung der Bibliothek ist eine Kontaktaufnahme mit dem Vertrieb erforderlich, bevor ein Kostenvergleich vorgenommen werden kann. Die Preise für IronOCR beginnen bei $999 für eine unbefristete einzelne Entwickler-Lite-Lizenz, die ein Jahr Updates beinhaltet. Teams können Kosten und Leistungsumfang ohne Verkaufsprozess bewerten. Auf der IronOCR -Lizenzseite finden Sie alle Details zu den Lizenzstufen.

Rohe Tesseract-Variablen lecken durch die API. Das Festlegen des Seitensegmentierungsmodus in Patagames erfordert den Aufruf von api.SetVariable("tessedit_pageseg_mode", "3") — eine rohe, string-basierte Tesseract-Variableneinstellung ohne IntelliSense, ohne Prüfungen zur Kompilierzeit und ohne Entdeckungsmöglichkeit. Wenn Sie den Variablennamen falsch schreiben, führt der Aufruf stillschweigend keine Aktion aus.IronOCR umhüllt jede Tesseract-Konfigurationsoption in stark typisierte Eigenschaften auf IronTesseract.Configuration.

Kein strukturierter Output außer einem einfachen String. Patagames GetTextFromImage gibt einen einzelnen String zurück. Es besteht kein Zugriff auf Wortgrenzen, Zeilengruppierungen, Absatzstruktur oder Konfidenzwerte pro Wort. Anwendungen, die bestimmte Felder aus Formularen extrahieren oder die OCR-Genauigkeit Wort für Wort überprüfen müssen, finden in der Patagames-API keine Grundlage, auf der sie aufbauen können.

CI/CD-Pipelines scheitern am Linux-Schritt. Moderne .NET-Entwicklungsteams führen CI unter Linux aus – GitHub Actions, GitLab CI und Azure DevOps verwenden standardmäßig Linux-basierte Runner. Ein Projekt, das auf Tesseract.Net.SDK verweist, wird entweder den nativen Binärreferenzaufbau nicht schaffen oder zur Laufzeit bei Integrationstests fehlschlagen. Jeder Testlauf erfordert einen Windows-spezifischen CI-Runner oder eine Umgehungslösung, die die OCR-Schicht vollständig simuliert.

Das grundsätzliche Problem

Patagames ist ausschließlich für Windows bestimmt. Sobald sich Ihr Bereitstellungsziel ändert, kann die Bibliothek nicht mehr mithalten:

// Patagames: Windows DLL loads; fails on Linux container or macOS developer machine
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); // tessdata path — must be manually managed in every environment
using var bitmap = new Bitmap(imagePath); // System.Drawing — unsupported on non-Windows targets
return api.GetTextFromImage(bitmap);
C#
// IronOCR: same code runs on Windows, Linux, macOS, Docker, Azure, AWS
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
C#

Kein tessdata-Verzeichnis. Kein nativer DLL-Pfad. Keine plattformabhängigen Bedingungen. Der NuGet-Abhängigkeitsgraph ermittelt automatisch die richtige Laufzeitumgebung für jedes Ziel.

IronOCR vs. Patagames Tesseract.NET SDK: Funktionsvergleich

Die folgende Tabelle enthält die Funktionen, die für Teams relevant sind, die Patagames derzeit in der Produktion einsetzen.

FeaturePatagames Tesseract .NET SDKIronOCR
Windows-UnterstützungJaJa
Linux-UnterstützungNeinJa
macOS-UnterstützungNeinJa
Docker-BereitstellungNeinJa
Azure App ServiceNeinJa
AWS LambdaNeinJa
NuGet -PaketTesseract.Net.SDKIronOcr
LizenzmodellKommerziell (Preis auf Anfrage)Unbefristet ($999–2.999 $, öffentlich)
OCR-EngineTesseract (Open Source)Optimiertes Tesseract 5 (im Lieferumfang enthalten)
Tessdata-ManagementManuelles Verzeichnis mit .traineddata DateienNuGet Sprachpakete
Automatische VorverarbeitungNoneEntzerren, Rauschunterdrückung, Kontrast, Binärisierung, Schärfen, Skalieren, Dilatieren, Erodieren
Entfernung tiefer HintergrundgeräuscheNoneJa (DeepCleanBackgroundNoise())
Native PDF-EingabeNein (externer Renderer erforderlich)Ja
Mehrseitige TIFF-EingabeBeschränktJa (input.LoadImageFrames())
Durchsuchbare PDF-AusgabeNeinJa (result.SaveAsSearchablePdf())
hOCR-ExportNeinJa
Unterstützte SprachenTesseract-tessdata-DateienMehr als 125 über NuGet -Pakete
Mehrsprachige SimultanübertragungJa (Zeichenkettenverkettung)Ja (stark typisiertes OcrLanguage Enum)
Regionsbasierte OCRNeinJa (CropRectangle)
Barcode-LesungNeinJa
Strukturierte AusgabeNur flacher StringSeiten, Absätze, Zeilen, Wörter, Zeichen mit Koordinaten
Vertrauenswerte pro WortNeinJa
Konfiguration der SeitensegmentierungRoher SetVariable String-AufrufStark typisiertes Configuration.PageSegmentationMode
System.Drawing-AbhängigkeitErforderlichOptional
Thread-SicherheitStandard-TesseraktgrenzenVoll (erstelle IronTesseract pro Thread)
Kommerzielle UnterstützungJaJa
NuGet-DownloadsBeschränkt5,3 Mio.+

Schnellstart: Migration von Patagames Tesseract .NET SDK zu IronOCR

Schritt 1: Ersetzen des NuGet-Pakets

Patagames Tesseract.NET SDK entfernen:

dotnet remove package Tesseract.Net.SDK
SHELL

Installieren Sie IronOCR über NuGet :

dotnet add package IronOcr

Für Sprachunterstützung über Englisch hinaus installieren Sie das entsprechende Sprachpaket:

dotnet add package IronOcr.Languages.French, IronOcr.Languages.German

Schritt 2: Namespaces aktualisieren

Ersetzen Sie die Patagames-Namespaces durch den IronOCR-Namespace:

// Before (Patagames)
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

// After (IronOCR)
using IronOcr;
C#

Schritt 3: Lizenz initialisieren

Fügen Sie die Lizenzinitialisierung beim Start der Anwendung hinzu (vor dem ersten IronTesseract Aufruf):

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

Eine kostenlose Testlizenz ist auf ironsoftware.com/C#/ocr/ verfügbar, um Migrationstests ohne Kauf zu beginnen.

Beispiele für die Code-Migration

Stapelverarbeitung von Ordnern

Phase 1 zeigte die Extraktion einzelner Bilder. Produktionsbereitstellungen von Patagames initialisieren typischerweise eine OcrApi innerhalb einer Schleife, wobei api.Init() bei jeder Iteration aufgerufen wird — was das tessdata neu lädt und die Tesseract-Engine für jede Datei neu initialisiert. Dieses Muster verdoppelt die Initialisierungskosten über Hunderte von Dokumenten.

Der Ansatz von Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.IO;

public class PatagamesBatchProcessor
{
    private const string TessDataPath = @"./tessdata";

    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            // OcrApi re-initialized per file — tessdata loaded each time
            using var api = OcrApi.Create();
            api.Init(TessDataPath, "eng");

            using var bitmap = new Bitmap(file);
            var text = api.GetTextFromImage(bitmap);

            results[Path.GetFileName(file)] = text;
        }

        return results;
    }
}
C#

IronOCR Ansatz:

// NuGet: IronOcr
using IronOcr;
using System.IO;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public class IronOcrBatchProcessor
{
    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();
        // Single engine instance — initialized once, reused across all files
        var ocr = new IronTesseract();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            var result = ocr.Read(file);
            results[Path.GetFileName(file)] = result.Text;
        }

        return results;
    }
}
C#

Die IronTesseract Instanz von IronOCR hält den Status der Engine über Aufrufe in Stand. Die Wiederverwendung einer Instanz für einen gesamten Stapel eliminiert den Initialisierungsaufwand pro Datei und beseitigt die Abhängigkeit vom Tessdata-Pfad vollständig. Für die parallele Batch-Verarbeitung über mehrere CPU-Kerne hinweg siehe das Multithreading-Beispiel — erstelle eine IronTesseract pro Thread anstatt eine einzelne Instanz zu teilen.

Migration des Seitensegmentierungsmodus

Patagames enthüllt den Seitensegmentierungsmodus durch einen rohen SetVariable Aufruf mit einem String-Schlüssel und einem in String geworfenen Ganzzahlwert. Kein IntelliSense, keine Enum-Validierung, kein Dokumentationshinweis an der Aufrufstelle. Eine einzige Ziffer bestimmt, ob Tesseract die Eingabe als einzelnen Textblock, eine Spalte, ein WORD oder ein einzelnes Zeichen behandelt – und es gibt keine Rückmeldung, wenn der Variablenname falsch eingegeben wird.

Der Ansatz von Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

public string OcrSingleLineField(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    // Raw variable string — no IntelliSense, no validation
    // PageSegmentationMode.SingleLine == 7
    api.SetVariable("tessedit_pageseg_mode", "7");

    // Additional variable to suppress dictionary output
    api.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -.:/");

    using var bitmap = new Bitmap(imagePath);
    return api.GetTextFromImage(bitmap);
}
C#

IronOCR Ansatz:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string OcrSingleLineField(string imagePath)
{
    var ocr = new IronTesseract();

    // Strongly typed enum — discoverable through IntelliSense
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine;

    var result = ocr.Read(imagePath);
    return result.Text;
}
C#

Jede durch SetVariable enthüllte Tesseract-Konfigurationsoption von Patagames hat ein direkt stark typisiertes Äquivalent in IronTesseract.Configuration. Die Migration ist eine mechanische Ersetzung von String-Literalen durch benannte Enum-Werte. Die vollständige Konfigurationsoberfläche finden Sie in der IronTesseract-API Referenz. Der Leitfaden zum Lesen spezifischer Dokumente behandelt, wann die einzelnen Seitensegmentierungsmodi bei verschiedenen Dokumenttypen anzuwenden sind.

Ergebnis: Ersetzen des Iterator-Musters

Patagames gibt einen flachen String von GetTextFromImage zurück. Das Extrahieren einzelner Wörter, ihrer Begrenzungsrahmen oder ihrer Konfidenzwerte aus der Patagames-Ausgabe erfordert das Schreiben eines Parsers auf Basis der zurückgegebenen Zeichenfolge – oder den direkten Zugriff auf die zugrunde liegende Tesseract-Ergebnis-Iterator-API über Interop. Keiner dieser Ansätze ist zuverlässig oder wartbar.IronOCR bietet einen vollständig strukturierten OcrResult mit nativem Zugang zu jeder Ebene der Dokumentenhierarchie.

Der Ansatz von Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;

public void ExtractWordsWithPositions(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    using var bitmap = new Bitmap(imagePath);
    // Nur flacher String — no word positions, no confidence, no line grouping
    var text = api.GetTextFromImage(bitmap);

    // Only option: split on whitespace and hope line breaks survive
    var words = text.Split(new[] { ' ', '\n', '\r' },
        StringSplitOptions.RemoveEmptyEntries);

    foreach (var word in words)
    {
        //NeinX, Y, Width, Height — position information is lost
        Console.WriteLine(word);
    }
}
C#

IronOCR Ansatz:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public void ExtractWordsWithPositions(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);

    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Width}x{page.Height}px");

        foreach (var paragraph in page.Paragraphs)
        {
            Console.WriteLine($"  Paragraph at ({paragraph.X}, {paragraph.Y})");
            Console.WriteLine($"  Text: {paragraph.Text}");
        }

        foreach (var word in page.Words)
        {
            // Bounding box, confidence, and text for every word
            Console.WriteLine($"  Word: '{word.Text}' at ({word.X},{word.Y}) " +
                              $"size {word.Width}x{word.Height} " +
                              $"confidence {word.Confidence:F1}%");
        }
    }

    Console.WriteLine($"Overall confidence: {result.Confidence:F1}%");
}
C#

Die vollständige OcrResult Struktur — Seiten, Absätze, Zeilen, Wörter und Zeichen — beseitigt die Notwendigkeit eines Nachbearbeitungsparsers. Word-Koordinaten ermöglichen die Feldextraktion nach Position, was die Grundlage für die Rechnungsbearbeitung, Formular-OCR und die Tabellenextraktion bildet. Siehe den Leitfaden zu strukturierten Ergebnissen für die vollständige Hierarchie und den Leitfaden zu Konfidenzwerten zum Filtern von Wörtern mit geringer Konfidenz.

Verarbeitung mehrseitiger TIFF-Dateien

Patagames akzeptiert ein System.Drawing.Bitmap. Ein mehrseitiges TIFF enthält mehrere eingebettete Bilder, jedoch zählt System.Drawing.Bitmap die Rahmen nicht automatisch auf — Sie müssen Image.SelectActiveFrame() verwenden, um manuell durch sie zu gehen und jede Rahmen-Bitmap in einer Schleife an GetTextFromImage zu übergeben. Die Rahmennummerierungs-API ist nicht offensichtlich und die Fehlermeldungen, wenn es fehlschlägt, sind nicht beschreibend.

Der Ansatz von Patagames:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

public string ProcessMultiPageTiff(string tiffPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    using var tiffImage = Image.FromFile(tiffPath);
    var frameCount = tiffImage.GetFrameCount(FrameDimension.Page);

    for (int i = 0; i < frameCount; i++)
    {
        // Manual frame selection — FrameDimension.Page required
        tiffImage.SelectActiveFrame(FrameDimension.Page, i);

        using var frameBitmap = new Bitmap(tiffImage);
        var pageText = api.GetTextFromImage(frameBitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

IronOCR Ansatz:

// NuGet: IronOcr
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string ProcessMultiPageTiff(string tiffPath)
{
    using var input = new OcrInput();
    // LoadImageFrames handles all frames automatically
    input.LoadImageFrames(tiffPath);

    // Optional: apply preprocessing to all frames at once
    input.Deskew();
    input.DeNoise();

    var result = new IronTesseract().Read(input);

    // Per-page access if needed
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words");
    }

    return result.Text;
}
C#

OcrInput.LoadImageFrames() verarbeitet die Rahmennummerierung intern und wendet Vorverarbeitung auf jeden Rahmen in der Pipeline an. Die System.Drawing Rahmenselektionszeremonie verschwindet vollständig. Weitere Optionen, einschließlich der Auswahl einzelner Bilder, wenn nur bestimmte Seiten benötigt werden, finden Sie im Leitfaden zur TIFF- und GIF-Eingabe.

PDF-Eingabe ohne externen Renderer

Patagames bietet keine native PDF-Unterstützung. Eine auf Patagames basierende PDF-OCR-Pipeline erfordert eine externe PDF-Rendering-Bibliothek — PdfiumViewer, iText oder PDFSharp — um jede Seite in ein Bitmap zu konvertieren, bevor sie an GetTextFromImage übergeben wird. Diese externe Abhängigkeit verursacht zusätzlichen Aufwand bei der Paketverwaltung, erfordert separate Lizenzüberlegungen und stellt einen sekundären Ausfallpunkt dar. Die Wiedergabequalität variiert zudem je nach Bibliothek, was sich unabhängig von der Tesseract-Engine auf die OCR-Genauigkeit auswirkt.

Der Ansatz von Patagames:

// NuGet: Tesseract.Net.SDK + PdfiumViewer (external dependency)
using Patagames.Ocr;
using PdfiumViewer; // separate NuGet package required
using System.Drawing;
using System.Text;

public string OcrPdfDocument(string pdfPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    // External renderer required — Patagames has no PDF support
    using var pdfDoc = PdfDocument.Load(pdfPath);

    for (int page = 0; page < pdfDoc.PageCount; page++)
    {
        // Render at 300 DPI for acceptable OCR accuracy
        using var img = pdfDoc.Render(page, 300, 300, false);
        using var bitmap = new Bitmap(img);

        var pageText = api.GetTextFromImage(bitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

IronOCR Ansatz:

// NuGet: IronOcr only — no external PDF renderer
using IronOcr;

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

public string OcrPdfDocument(string pdfPath)
{
    using var input = new OcrInput();
    input.LoadPdf(pdfPath);

    // Preprocessing applies to every page in one call
    input.Deskew();

    var ocr = new IronTesseract();
    var result = ocr.Read(input);

    // Full per-page structured access
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Paragraphs.Length} paragraphs");
    }

    return result.Text;
}
C#

Ein NuGet-Paket ersetzt zwei. Der Rendering-Schritt entfällt. Der Leitfaden zur PDF-Eingabe umfasst einseitige, mehrseitige und passwortgeschützte PDFs. Für den Workflow zur Erstellung durchsuchbarer PDF-Dateien – also die Erstellung eines mit Strg+F durchsuchbaren Dokuments aus einem gescannten PDF – zeigen der Leitfaden zu durchsuchbaren PDF-Dateien und das Beispiel für durchsuchbare PDF-Dateien die gesamte Pipeline in fünf Zeilen.

Patagames Tesseract .NET SDK API zu IronOCR Mapping-Referenz

Patagames Tesseract .NET SDKIronOCR-Äquivalent
Tesseract.Net.SDK (NuGet-Paket)IronOcr (NuGet-Paket)
Patagames.Ocr (Namespace)IronOcr (Namespace)
Patagames.Ocr.Enums (Namespace)IronOcr (Namespace)
OcrApi.Create()new IronTesseract()
api.Init(tessDataPath, "eng")ocr.Language = OcrLanguage.English (kein Pfad)
api.Init(path, "eng+fra+deu")ocr.Language = OcrLanguage.English + OcrLanguage.French + OcrLanguage.German
api.GetTextFromImage(bitmap)ocr.Read(imagePath).Text
api.SetVariable("tessedit_pageseg_mode", "7")ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
api.SetVariable(key, value) (jede rohe Variable)ocr.Configuration.[TypedProperty]
new Bitmap(imagePath) (Eingabevorbereitung)input.LoadImage(imagePath)
OcrBitmap.FromFile(path)input.LoadImage(path)
Keine Unterstützung für Multi-Frame-TIFFinput.LoadImageFrames(tiffPath)
Keine PDF-Eingabeinput.LoadPdf(pdfPath) oder ocr.Read(pdfPath)
Keine durchsuchbare PDF-Dateiresult.SaveAsSearchablePdf("output.pdf")
Keine Vorverarbeitunginput.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize()
Keine Region OCRinput.LoadImage(path, new CropRectangle(x, y, w, h))
Kein Barcode-Lesenocr.Configuration.ReadBarCodes = true
Nur flaches String-Ergebnisresult.Pages, result.Lines, result.Words, result.Paragraphs
Keine Wort-für-Wort-Übersetzungresult.Words[i].Confidence, result.Confidence
PageSegmentationMode EnumTesseractPageSegmentationMode Enum
Kein hOCR-ExportErgebnis .ToHOcrString() Ausgabe
Nur Windows x64/x86Windows, Linux, macOS, Docker, Azure, AWS

Gängige Migrationsprobleme und Lösungen

Problem 1: Tessdata-Verzeichnis fehlt in neuer Umgebung

Patagames: Der api.Init(@"./tessdata", "eng") Aufruf schlägt zur Laufzeit fehl, wenn das tessdata Verzeichnis nicht vorhanden ist oder die eng.traineddata Datei fehlt. In containerisierten Umgebungen handelt es sich hierbei um einen Fehler bei der Bereitstellung, ohne dass eine Warnung während der Erstellung erfolgt. Teams, die auf Docker bereitstellen, stellen dies häufig erst fest, nachdem das Image bereits gepusht wurde.

**Lösung:**IronOCR entfernt das Konzept des tessdata-Verzeichnisses vollständig. Installieren Sie die Sprachdaten als NuGet-Pakete:

dotnet add package IronOcr.Languages.English

Die Sprachdaten werden zur Build-Zeit aufgelöst und sind automatisch im dotnet publish Output enthalten. Es gibt keinen falschen Weg und keinen Punkt auf der Bereitstellungs-Checkliste für Sprachdateien.

Problem 2: System.Drawing.Bitmap schlägt unter Linux fehl

Patagames: Der System.Drawing.Bitmap Konstruktor wirft TypeInitializationException oder PlatformNotSupportedException unter Linux, es sei denn, libgdiplus ist als Systempaket installiert. Selbst bei vorhandener libgdiplus ist das Verhalten über Distributionen hinweg inkonsistent. Microsoft empfiehlt ausdrücklich, System.Drawing in neuen Entwicklungen auf Nicht-Windows-Plattformen zu vermeiden.

**Lösung:**IronOCR akzeptiert Dateipfade, Byte-Arrays und Streams direkt. Die System.Drawing Abhängigkeit ist nicht erforderlich:

// Replace this pattern:
using var bitmap = new Bitmap(imagePath); // fails without libgdiplus on Linux
api.GetTextFromImage(bitmap);

// With:
var result = new IronTesseract().Read(imagePath); // no System.Drawing required
C#

Alle unterstützten Eingabetypen, einschließlich Byte-Arrays und Streams, finden Sie im Leitfaden zur Bild-Eingabe.

Problem 3: Stille SetVariable-Fehler

Patagames: api.SetVariable("tessedit_pageseg_mode", someValue) gibt bool zurück, aber die meisten Aufrufer verwerfen den Rückgabewert. Wenn ein Variablenname falsch geschrieben ist oder ein nicht unterstützter Wert übergeben wird, wendet Tesseract stillschweigend einen Standardwert an und fährt fort. Die daraus resultierende Genauigkeitsminderung lässt sich nur schwer auf den Konfigurationsaufruf zurückführen.

Lösung: Die Konfigurationseigenschaften von IronOCR sind stark typisiert. Eine ungültige Zuweisung führt zu einem Compilerfehler, nicht zu einem stillen Laufzeitaufwertungswert:

// Compile-time safety — no silent failures
var ocr = new IronTesseract();
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // also strongly typed
C#

Problem 4: OcrApi innerhalb einer Schleife initialisiert

Patagames: Teams, die OcrApi innerhalb einer Verarbeitungsschleife initialisieren, verursachen tessdata-Ladeüberkopf bei jeder Iteration. Das typische Muster — OcrApi.Create() und api.Init() innerhalb eines foreach — ist aus Sicht der Thread-Isolierung korrekt, aber teuer bei der Verarbeitung von Hunderten von Dokumenten.

Lösung: Erstellen Sie eine IronTesseract pro Thread und verwenden Sie sie für alle Dokumente, die diesem Thread zugewiesen sind, erneut. Die Instanz ist zwischen .Read() Aufrufen zustandslos:

// One instance, many reads — engine initialized once
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

foreach (var file in imageFiles)
{
    var text = ocr.Read(file).Text;
    ProcessText(text);
}
C#

Erstellen Sie für parallele Batch-Workloads eine Instanz pro Aufgabe. Siehe den Leistungsoptimierungsleitfaden für Durchsatzoptimierungsmöglichkeiten einschließlich IronTesseract.Configuration.TesseractVersion und Lesegeschwindigkeitsvoreinstellungen.

Problem 5: Es funktioniert kein Linux-Docker-Basis-Image

Patagames: Es gibt keine Linux-kompatible Patagames-Binärdatei. Jeder Versuch, eine auf Patagames basierende Anwendung in einem Linux-Docker-Container auszuführen, schlägt fehl. Der einzige Workaround ist ein Windows-basierter Container (FROM mcr.microsoft.com/windows/servercore), der erheblich größer, langsamer zu ziehen ist und mit den meisten Kubernetes-Konfigurationen, die Linux-Knotenpools verwenden, inkompatibel ist.

**Lösung:**IronOCR unterstützt Standard-Linux-Basisimages. Der Docker-Bereitstellungsleitfaden behandelt die genaue Konfiguration der Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
#IronOCR resolves the Linux native runtime from NuGet automatically
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text

Kein Windows-Container erforderlich. Keine separate Binärdistribution. Das gleiche Docker-Image läuft auf jedem Linux-basierten Container-Host.

Problem 6: PDF-OCR erfordert zwei NuGet-Pakete

Patagames: Das Hinzufügen von PDF-OCR zu einer Patagames-Anwendung erfordert ein zweites NuGet-Paket für die PDF-Darstellung (PdfiumViewer, iTextSharp.LGPLv2.Core oder ähnliches). Jedes Produkt hat seine eigenen Lizenzbedingungen, Aktualisierungsrhythmus und potenziellen Kompatibilitätsprobleme. Wenn die Version des PDF-Renderers und die Version von Patagames miteinander in Konflikt stehen, müssen beide Teams einbezogen werden, um das Problem zu lösen.

**Lösung:**IronOCR verarbeitet PDF-Eingaben nativ, ohne dass ein zweites Paket erforderlich ist. Die Abhängigkeit vom PDF-Renderer vollständig entfernen:

# Remove the PDF rendering shim
dotnet remove package PdfiumViewer

#IronOCR handles PDF natively
var result = new IronTesseract().Read("document.pdf");
SHELL

Patagames Tesseract .NET SDK Migrations-Checkliste

Vor der Migration

Überprüfen Sie den Code vor Beginn, um alle Patagames-Verweise zu identifizieren:

# Find all files using Patagames namespaces
grep -r "Patagames.Ocr" --include="*.cs" . -l

# Find all OcrApi usage patterns
grep -r "OcrApi\|GetTextFromImage\|api\.Init\|SetVariable" --include="*.cs" .

# Find tessdata path references
grep -r "tessdata\|TessDataPath\|traineddata" --include="*.cs" .

# Find System.Drawing.Bitmap usage tied to OCR
grep -r "new Bitmap\|System\.Drawing" --include="*.cs" . -l

# Find any PDF rendering libraries used to feed Patagames
grep -r "PdfiumViewer\|iTextSharp\|PdfSharp" --include="*.csproj" .
SHELL

Dokument: Gesamtsumme der OcrApi.Create() Aufrufstellen, Anzahl der verschiedenen api.Init() Sprachkonfigurationen, Standort des tessdata-Verzeichnisses in jeder Bereitstellungsumgebung und jeder Vorverarbeitungscode, der in System.Drawing oder ImageSharp geschrieben wurde und Patagames-Aufrufe umschließt.

Code-Migration

  1. Entfernen Sie die Tesseract.Net.SDK NuGet-Paketreferenz von allen Projekten.
  2. Entfernen Sie alle PDF-Render-NuGet-Pakete (PdfiumViewer, iText, etc.), die ausschließlich zur Unterstützung von Patagames verwendet wurden.
  3. Installieren Sie IronOcr NuGet-Paket.
  4. Installieren Sie IronOcr.Languages.English und alle anderen benötigten Sprachpakete.
  5. Fügen Sie IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" beim Start der Anwendung hinzu.
  6. Ersetzen Sie using Patagames.Ocr; und using Patagames.Ocr.Enums; durch using IronOcr;.
  7. Ersetzen Sie jeden OcrApi.Create() + api.Init(path, lang) Block durch new IronTesseract() + ocr.Language = OcrLanguage.[Language].
  8. Ersetzen Sie jeden api.GetTextFromImage(bitmap) Aufruf durch ocr.Read(imagePath).Text (entfernen Sie den Bitmap Konstruktor).
  9. Ersetzen Sie jeden api.SetVariable("tessedit_pageseg_mode", value) Aufruf durch den typisierten ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value].
  10. Entfernen Sie alle System.Drawing.Bitmap Instanziierungen, die ausschließlich dazu dienten, Bilder an Patagames zu übergeben.
  11. Ersetzen Sie PDF-Rendering-Schleifen (falls vorhanden) durch input.LoadPdf(pdfPath).
  12. Ersetzen Sie mehrseitige TIFF-Schleifen mit Image.SelectActiveFrame() durch input.LoadImageFrames(tiffPath).
  13. Ersetzen Sie jeden benutzerdefinierten Vorverarbeitungscode (System.Drawing-Resize, Kontrast, Schwelle) durch gleichwertige OcrInput Filteraufrufe.
  14. Entfernen Sie das Verzeichnis "tessdata" aus allen Deployment-Manifesten, Dockerfiles und CI-Kopier-Schritten.
  15. Aktualisieren Sie die Integrationstests, damit sie auf Linux-CI-Runner (GitHub Actions ubuntu-latest usw.) ausgeführt werden können, um das plattformübergreifende Verhalten zu überprüfen.

Nach der Migration

  • Führen Sie die vollständige Suite der Tests unter Linux (nicht nur unter Windows) aus, um zu überprüfen, ob die plattformübergreifende Bereitstellung funktioniert.
  • Überprüfen Sie, ob die OCR-Genauigkeit bei demselben Satz von Testbildern mindestens so gut ist wie der Patagames-Referenzwert.
  • Bestätigen Sie, dass mehrsprachige Dokumente korrekten Output mit dem OcrLanguage Enum-Ansatz produzieren.
  • Testen Sie die PDF-Eingabe direkt ohne die externe Rendering-Bibliothek und vergleichen Sie die Genauigkeit der Ausgabe mit dem alten Rendered-Bitmap-Pfad.
  • Die Validierung der Verarbeitung von TIFF-Dateien mit mehreren Frames ergibt dieselbe Seitenanzahl und denselben Textinhalt wie die vorherige Schleife zur Frame-Nummerierung.
  • Stellen Sie sicher, dass das Verzeichnis "tessdata" nicht im Deployment-Artefakt enthalten ist und keine Laufzeitpfadfehler auftreten.
  • Führen Sie einen Docker-Build durch, der auf linux/amd64 abzielt, und führen Sie mindestens einen OCR-Aufruf innerhalb des Containers aus.
  • Stellen Sie sicher, dass die CI-Pipeline (GitHub Actions, GitLab CI, Azure DevOps) auf ihrem Standard-Linux-Runner erfolgreich abgeschlossen wird.
  • Überprüfen Sie, ob für das Ergebnis Konfidenzwerte verfügbar sind und ob die auf Konfidenz basierende Filterlogik wie erwartet funktioniert.
  • Bestätigen Sie, dass die Lizenzschlüsselinitialisierung vor der ersten IronTesseract Instanz in Produktionsstartcode durchgeführt wird.

Wichtigste Vorteile der Migration zu IronOCR

Plattformübergreifende Bereitstellung ohne Codeänderungen. Nach der Migration läuft dieselbe Binärdatei auf Windows Server, Ubuntu-Docker-Containern, macOS-Entwicklerrechnern, Azure App Service unter Linux und AWS Lambda. Es gibt keine plattformabhängigen Bedingungen, keine Flags zur Laufzeitidentifizierung und keine separaten Bereitstellungsartefakte pro Betriebssystem. Eine Cloud-Migration, die zuvor durch die Windows-exklusive OCR-Bibliothek blockiert wurde, wird zu einer Standard-Container-Bereitstellung. Die Bereitstellungsanleitungen für Linux, Docker, Azure und AWS behandeln die Produktionskonfigurationen für jedes Ziel.

Die Verwaltung von Tessdata verschwindet aus dem Betrieb. Das Verzeichnis "tessdata" – sein Speicherort, sein Inhalt, seine Präsenz in jeder Umgebung – spielt für den Betrieb keine Rolle mehr. Sprachdaten sind eine NuGet-Abhängigkeit, die zur Build-Zeit aufgelöst wird. Sie erscheint automatisch im dotnet publish-Output. Es gibt keine Deployment-Runbooks, die bei der Hinzufügung einer neuen Sprache aktualisiert werden müssen, keine Docker-Layer, die bei Änderungen an Tessdata-Dateien ungültig gemacht werden müssen, und keine Produktionsstörungen aufgrund fehlender Tessdata-Dateien, die untersucht werden müssen.

Strukturierter Output ersetzt String-Parsing. Anwendungen, die zuvor den flachen String von GetTextFromImage analysierten, um Felder zu extrahieren, Inhalte zu validieren oder Vertrauen zu berechnen, greifen jetzt direkt auf diese Daten von OcrResult zu. Wortkoordinaten, Zeilengrenzen, Absatzgruppierungen und Wort-Konfidenzwerte sind Eigenschaften erster Ordnung. Feldextraktion durch Bounding-Box — die Grundlage für Rechnungsbearbeitung und OCR-Formularbearbeitung — ist ein direkter CropRectangle Aufruf anstatt einer empfindlichen Teilzeichenkettensuche.

Eingebaute Vorverarbeitung ersetzt benutzerdefinierte Bildpipelines. Jeder Vorverarbeitungscode, der geschrieben wurde, um das Fehlen eingebauter Filter von Patagames auszugleichen, kann durch OcrInput-Methodenaufrufe ersetzt werden. Entzerrung, Rauschunterdrückung, Kontrastverstärkung, Binarisierung und Auflösungsnormalisierung sind Einzeiler-Operationen. Teams, die 20-40 Stunden mit dem Aufbau und der Feinabstimmung einer System.Drawing Vorverarbeitungspipeline verbracht haben, können diese mit fünf Methodenaufrufen ersetzen und diese Wartungsbemühungen anderswo lenken. Den vollständigen Filterkatalog finden Sie in der Übersicht über die Vorverarbeitungsfunktionen.

Native PDF-Unterstützung beseitigt eine Abhängigkeitsklasse. PDF-Rendering-Bibliotheken, die ausschließlich hinzugefügt wurden, um die PDF-Lücke bei Patagames zu schließen, werden entfernt. Ein Produktions-OCR-System, das zuvor eine Koordination von Updates über drei Pakete erforderte — Tesseract.Net.SDK, ein PDF-Renderer und deren gemeinsame System.Drawing Abhängigkeit — hat jetzt ein OCR-Paket ohne Brückenabhängigkeiten. PDF-Eingaben, einschließlich passwortgeschützter und mehrseitiger Dokumente, sind ein erstklassiger Eingabetyp. Für Compliance- und Aufzeichnungsverwaltungsanwendungsfälle erzeugt result.SaveAsSearchablePdf() Textschicht-PDF-Output in einem einzigen Aufruf ohne zusätzliche Bibliotheken.

Transparente Preisgestaltung und kommerzieller Support. IronOCRs $999 unbefristete Lite-Lizenz deckt einen Entwickler und einen Bereitstellungsort mit einem Jahr Updates ab. Die Preise sind öffentlich, die Preisstruktur ist klar und kommerzieller Support ist ohne Enterprise-Vertrag verfügbar. Teams, die bisher Patagames-Tarife für eine Windows-exklusive Tesseract-Wrapper-Lösung zahlten, erhalten nun plattformübergreifende Bereitstellung, Vorverarbeitung, PDF-Unterstützung und mehr als 125 Sprachen – und wechseln gleichzeitig zu einem Preismodell, bei dem die Kosten bereits vor Abschluss der Evaluierung bekannt sind. Vollständige Informationen zu den Lizenzstufen finden Sie unter IronOCR-Lizenzierung und eine kostenlose Testlizenz auf der IronOCR-Produktseite.

Hinweis:: PDFium, PDFSharp, Tesseract, und iText sind eingetragene Marken ihrer jeweiligen Inhaber. Diese Seite steht in keiner Verbindung mit und wird nicht unterstützt oder gesponsert von Chromium Project, Google, empira Software GmbH oder der iText Group. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Inhaber. 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.