IRONSOFTWAREHOME
VIDEOS

Umstellung von TesseractOCR auf IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 1. August 2026

Dieser Leitfaden führt .NET-Entwickler durch eine vollständige Migration vom TesseractOCR-NuGet-Paket (dem Fork von Sicos1977/Kees van Spelde) zu IronOCR. Sie deckt den gesamten Ersatzpfad ab: Entfernen externer Vorverarbeitungsabhängigkeiten, Aktivieren der nativen PDF-Eingabe und der durchsuchbaren PDF-Ausgabe, Aktualisieren von Namespaces und API-Aufrufen sowie Überprüfen der migrierten Integration. Das vorherige Lesen des Vergleichsartikels ist nicht erforderlich.

Warum von TesseractOCRumsteigen?

TesseractOCR ist ein aktiv gepflegter Community-Wrapper, der auf modernes .NET ausgerichtet ist und native Tesseract 5-Bibliotheken bündelt. Ein Upgrade von älteren Wrappern auf diese Version löst das Problem der Framework-Kompatibilität. Sie löst nicht die architektonischen Lücken, die unterhalb der Wrapper-Schicht liegen. Wenn diese Lücken in der Produktion zutage treten, beginnt die Diskussion über die Migration.

Vorverarbeitung erfolgt vollständig außerhalb der Bibliothek. TesseractOCRruft engine.Process(image) auf, unabhängig von den Pixeln, die Sie bereitstellen. Ein schief eingescannter Beleg, ein kontrastarmes Fax, ein mit dem Handy aufgenommenes Foto einer Quittung – all das wird unverarbeitet an die Tesseract-Engine weitergeleitet. Um verwertbare Ergebnisse zu erzielen, muss SixLabors.ImageSharp, SkiaSharp oder eine ähnliche Bildbibliothek hinzugefügt, manuelle Filterketten mit parametergestützten Dokumenttypen geschrieben und das vorverarbeitete Bild über eine temporäre Datei geroutet werden, da TesseractOCR.Pix.Image einen Dateipfad erwartet. Die Entzerrung ist in .NET Standard-Bildbearbeitungsbibliotheken überhaupt nicht verfügbar – sie erfordert die Implementierung eines Hough-Transformations-Winkelerkennungsalgorithmus von Grund auf, was in der Regel 50 bis 100 zusätzliche Zeilen bedeutet. Es handelt sich hierbei nicht um einmalige Einrichtungskosten; sie fallen jedes Mal an, wenn ein neuer Dokumenttyp in die Pipeline aufgenommen wird.

Für die PDF-Eingabe sind eine zweite Bibliothek und eine Pipeline für temporäre Dateien erforderlich. TesseractOCRverarbeitet Bilder, keine PDFs. Jeder PDF-Workflow erfordert ein zusätzliches Paket – Docnet.Core, PdfiumViewer oder ähnliches –, um PDF-Seiten in BGRA-Byte-Arrays zu rendern, eine Hilfsmethode, um diese Bytes in ein Format zu konvertieren, das TesseractOCRlesen kann, sowie Logik zur Erstellung und Bereinigung von temporären Dateien, die den gesamten Schleifenablauf umschließt. Das Ergebnis sind etwa 100 Zeilen Infrastrukturcode, die jeden PDF-OCR-Vorgang umgeben. Passwortgeschützte PDFs erfordern eine dritte Bibliothek (iText mit AGPL-Lizenzierung oder PDFSharp) nur zur Entschlüsselung vor der Verarbeitung.

Die durchsuchbare PDF-Ausgabe hat keinen Pfad. Teams, die maschinenlesbare PDFs aus gescannten Dokumenten erstellen müssen – eine häufige Anforderung bei Dokumentenmanagement, Archivierung und Compliance-Workflows – stellen fest, dass TesseractOCRhierfür keinen Mechanismus bietet. Es gibt kein SaveAsSearchablePdf(), keine hOCR-zu-PDF-Pipeline und kein Ausgabeformat über den extrahierten Text hinaus. Um diese Funktion hinzuzufügen, ist entweder eine separate PDF-Bibliothek erforderlich oder der vollständige Verzicht auf TesseractOCR.

TIFF-Dokumente mit mehreren Frames erfordern eine manuelle Seitenschleife. Mehrseitige TIFF-Dateien, wie sie häufig in Fax-Workflows und bei Dokumentenscannern vorkommen, werden von TesseractOCRnicht nativ mit mehreren Frames verarbeitet. Um alle Frames zu extrahieren, muss die TIFF-Datei mit einer externen Bibliothek geladen, die Frames durchlaufen, jeder Frame in einer temporären Datei gespeichert und jede temporäre Datei separat durch die OCR-Engine geleitet werden.

Die Größe der Community schränkt den praktischen Support ein. TesseractOCRverzeichnet etwa 200.000 NuGet-Downloads. Stack Overflow, Blogbeiträge und GitHub-Issue-Threads zu .NET Tesseract-Wrappers beziehen sich überwiegend auf die charlesw API — TesseractEngine, Pix.LoadFromFile — nicht auf die Sicos1977 API. Die praktische Fehlerbehebung bei TesseractOCR-spezifischen Problemen stößt schnell an diese Grenze.

Das grundsätzliche Problem

TesseractOCR bietet keine Vorverarbeitung und keine PDF-Unterstützung. Jeder Workflow für Produktionsdokumente erfordert letztendlich externe Bibliotheken, um überhaupt den Punkt zu erreichen, an dem OCR ausgeführt werden kann:

// TesseractOCR: three packages, a temp file, and manual byte conversion
// just to OCR one PDF page — before any preprocessing
// dotnet add package TesseractOCR
// dotnet add package Docnet.Core
// dotnet add package SixLabors.ImageSharp   (preprocessing)

using var library = DocLib.Instance;
using var docReader = library.GetDocReader(pdfPath, new PageDimensions(200, 200));
using var pageReader = docReader.GetPageReader(0);
var bytes = pageReader.GetImage(); // BGRA — not a format Pix.Image accepts directly

string tempPath = Path.GetTempFileName() + ".png";
SaveBgraAsPng(bytes, pageReader.GetPageWidth(), pageReader.GetPageHeight(), tempPath);
// ^ 30+ line helper method needed here

using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
using var image = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
using var page = engine.Process(image);
string text = page.Text;
File.Delete(tempPath); // hope this succeeds
C#
// IronOCR: one package, three lines, preprocessing automatic
// dotnet add package IronOcr

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf(pdfPath);
string text = ocr.Read(input).Text;
C#

##IronOCR vs. TesseractOCR: Funktionsvergleich

Die folgende Tabelle zeigt die Funktionen auf, die bei der Bewertung der Migration am wichtigsten sind.

FeatureTesseractOCRIronOCR
NuGet-PaketTesseractOCRIronOcr
.NET -Kompatibilität.NET 6.0, 7.0, 8.0.NET Framework 4.6.2+, .NET Core, .NET 5/6/7/8/9
LizenzApache 2.0 (kostenlos)Kommerziell (unbefristet, von $999)
Tessdata-VerwaltungErforderlich (manueller Download von GitHub)Nicht erforderlich (intern gebündelt)
Integrierte VorverarbeitungNoneEntzerren, Rauschen entfernen, Kontrast erhöhen, Binärisierung, Schärfen, Skalieren, Dilatieren, Erodieren, Invertieren
Entfernung tiefer HintergrundgeräuscheNeinJa (DeepCleanBackgroundNoise())
Native PDF-EingabeNein (erfordert Docnet.Core oder ähnliches)Ja (input.LoadPdf())
Passwortgeschütztes PDFNein (erfordert eine dritte Bibliothek zur Entschlüsselung)Ja (einzelner Password Parameter)
Durchsuchbare PDF-AusgabeNeinJa (result.SaveAsSearchablePdf())
Mehrbild-TIFF-EingabeNein (erfordert externe Frame-Extraktion)Ja (input.LoadImageFrames())
Eingabe von Datenströmen und Byte-ArraysNein (erfordert eine temporäre Zwischendatei)Ja (direkt LoadImage(stream), LoadImage(bytes))
GewindesicherheitNein (eine Engine-Instanz pro Thread)Ja (einzelner IronTesseract, der über Threads geteilt wird)
Regionsbasierte OCRNeinJa (CropRectangle)
Barcode-Lesung während der OCRNeinJa (ocr.Configuration.ReadBarCodes = true)
Strukturierte Ausgabe (Seiten, WORDs, Koordinaten)Nein (nur flacher Text)Ja (Pages, Paragraphs, Lines, Words mit X/Y)
KonfidenzbewertungFloat auf Dokumentebene (0,0–1,0)Dokument- und WORD-Ebene doppelt (0–100)
hOCR-ExportNeinJa
NuGet-Pakete in über 125 SprachenNeinJa
Plattformübergreifende BereitstellungWindows, Linux, macOSWindows, Linux, macOS, Docker, Azure, AWS
Kommerzielle UnterstützungNein (einzelner ehrenamtlicher Betreuer)Ja (E-Mail, SLA-Optionen)

Schnellstart: Migration von TesseractOCRzu IronOCR

Schritt 1: Ersetzen des NuGet-Pakets

Entfernen Sie TesseractOCRund alle Bibliotheken, die zu dessen Unterstützung hinzugefügt wurden:

dotnet remove package TesseractOCR
dotnet remove package Docnet.Core
dotnet remove package SixLabors.ImageSharp
SHELL

Installieren Sie IronOCR über NuGet :

dotnet add package IronOcr

Schritt 2: Namespaces aktualisieren

Ersetzen Sie alle TesseractOCR-Namespace-Importe durch IronOCR:

// Before (TesseractOCR)
using TesseractOCR;
using TesseractOCR.Enums;

// After (IronOCR)
using IronOcr;
C#

Schritt 3: Lizenz initialisieren

Fügen Sie die Lizenzinitialisierung einmalig beim Anwendungsstart vor jedem OCR-Aufruf hinzu:

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

Eine kostenlose Testlizenz steht auf der IronOCR-Lizenzseite zur Evaluierung zur Verfügung.

Beispiele für die Code-Migration

Ersetzen der externen Vorverarbeitungs-Pipeline

TesseractOCR benötigt für jede Verbesserung der Dokumentqualität eine externe Bildverarbeitungsbibliothek. Der folgende Code zeigt das Muster, das Teams schreiben, wenn die Dokumentqualität variiert – Graustufenkonvertierung, Kontrastanpassung, Rauschunterdrückung und das Schreiben einer temporären Datei, bevor die OCR ausgeführt werden kann. Deskew (Korrektur eines schrägen Scans) ist in .NET Standard-Bildbearbeitungsbibliotheken nicht verfügbar und erfordert einen separaten Algorithmus.

TesseractOCR-Ansatz:

// Requires: dotnet add package SixLabors.ImageSharp
// Manual preprocessing — parameters must be tuned per document type
// Deskew is NOT in ImageSharp — requires custom Hough transform (~50-100 lines)

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using TesseractOCR;
using TesseractOCR.Enums;

public string ExtractFromLowQualityScan(string imagePath)
{
    using var image = Image.Load(imagePath);

    image.Mutate(x => x.Grayscale());
    image.Mutate(x => x.Contrast(1.5f));          // manual tuning required
    image.Mutate(x => x.GaussianBlur(0.5f));      // noise reduction approximation
    image.Mutate(x => x.BinaryThreshold(0.5f));   // threshold requires per-doc adjustment

    // Deskew omitted — no built-in support, ~80 lines of additional code

    string tempPath = Path.GetTempFileName() + ".png";
    try
    {
        image.Save(tempPath);

        using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
        using var pix = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
        using var page = engine.Process(pix);

        return page.Text;
    }
    finally
    {
        File.Delete(tempPath);
    }
}
C#

IronOCR Ansatz:

//Neinexternal imaging library
//Neintemp file — OcrInput accepts a path, stream, or byte array directly
// Deskew is built in — automatic angle detection and correction

using IronOcr;

public string ExtractFromLowQualityScan(string imagePath)
{
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    input.Deskew();           // automatic angle correction
    input.DeNoise();          // intelligent noise removal
    input.Contrast();         // automatic contrast enhancement
    input.Binarize();         // clean black-and-white conversion

    var ocr = new IronTesseract();
    return ocr.Read(input).Text;
}
C#

Durch das Entfernen der ImageSharp-Abhängigkeit entfällt der Optimierungszyklus vollständig. Die OcrInput Vorverarbeitungspipeline wendet Algorithmen an, die für Dokument-OCR kalibriert sind — kein Raten bei Kontrastverstärkern oder Unschärferadien. Das Tutorial zu Bildfiltern und der Leitfaden zur Bildqualitätskorrektur behandeln jeden verfügbaren Filter mit Parameteroptionen für Fälle, in denen die Standardeinstellungen angepasst werden müssen.

Ersetzen der Verarbeitung von Multi-Frame-TIFF-Dateien

Faxdokumente, Scannerausgaben und Archivdateien liegen häufig als mehrseitige TIFF-Dateien vor. TesseractOCRbietet keine Unterstützung für mehrere Bilder – jedes Bild muss mit einer externen Bibliothek extrahiert, auf der Festplatte gespeichert und einzeln durch die Engine geleitet werden.IronOCR lädt das gesamte TIFF-Dokument in einem einzigen Aufruf.

TesseractOCR-Ansatz:

// Requires: dotnet add package SixLabors.ImageSharp
// Manual frame extraction — every frame becomes a temp file on disk

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Tiff;
using TesseractOCR;
using TesseractOCR.Enums;

public string ExtractFromMultiPageTiff(string tiffPath)
{
    var allText = new System.Text.StringBuilder();
    var tempFiles = new List<string>();

    try
    {
        using var image = Image.Load(tiffPath);
        using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);

        for (int frameIndex = 0; frameIndex < image.Frames.Count; frameIndex++)
        {
            // Clone frame and save to temp file — no in-memory path
            using var frameImage = image.Frames.CloneFrame(frameIndex);
            string tempPath = Path.GetTempFileName() + ".png";
            tempFiles.Add(tempPath);
            frameImage.SaveAsPng(tempPath);

            using var pix = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
            using var page = engine.Process(pix);

            allText.AppendLine($"=== Frame {frameIndex + 1} ===");
            allText.AppendLine(page.Text);
        }
    }
    finally
    {
        foreach (var f in tempFiles)
            try { File.Delete(f); } catch { }
    }

    return allText.ToString();
}
C#

IronOCR Ansatz:

//Neinexternal library for frame extraction
// All frames processed in one Read() call — no manual loop required

using IronOcr;

public string ExtractFromMultiPageTiff(string tiffPath)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImageFrames(tiffPath);   // loads all frames automatically
    var result = ocr.Read(input);

    // Access per-page text if needed
    foreach (var page in result.Pages)
        Console.WriteLine($"Frame {page.PageNumber}: {page.Text}");

    return result.Text;
}
C#

Die Rahmenerstellungsschleife, die temporäre Dateiliste, der finally Aufräumblock – all das entfällt. Bei einem 20-seitigen Fax-TIFF ersetzt dies etwa 40 Zeilen durch 6. Der Leitfaden für TIFF- und GIF-Eingaben behandelt Optionen zum Laden mehrerer Frames, einschließlich ausgewählter Frame-Bereiche.

Erstellung durchsuchbarer PDF-Dateien

Für dieses Szenario gibt es in TesseractOCRkeinen Migrationspfad – es ist schlichtweg nicht möglich. Gescannte PDF-Dateien, die in maschinenlesbare, textmarkierbare Dokumente umgewandelt werden müssen (für Suchindexierung, Barrierefreiheit oder Archivierung), erfordern die Erstellung einer durchsuchbaren PDF-Ausgabe. TesseractOCRliefert ausschließlich extrahierten Text.IronOCR erstellt direkt ein durchsuchbares PDF.

TesseractOCR-Ansatz:

//Neinpath available — TesseractOCRcannot produce any PDF output.
// The closest workaround requires a separate PDF library (iTextSharp AGPL,
// or similar) to overlay extracted text onto the original PDF manually.
// This is 150-300 lines of additional code and introduces AGPL license concerns.

// The best available output from TesseractOCR:
using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
using var pix = TesseractOCR.Pix.Image.LoadFromFile("scanned-page.png");
using var page = engine.Process(pix);

string extractedText = page.Text; // flat string — no PDF output possible
File.WriteAllText("output.txt", extractedText);
// Cannot produce a searchable PDF — no API exists for this
C#

IronOCR Ansatz:

// Native searchable PDF output — no additional library required
// Input can be a scanned image, a scanned PDF, or a multi-page TIFF

using IronOcr;

public void CreateSearchablePdf(string scannedPdfPath, string outputPath)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadPdf(scannedPdfPath);
    input.Deskew();     // improve accuracy before generating the output
    input.DeNoise();

    var result = ocr.Read(input);
    result.SaveAsSearchablePdf(outputPath);   // searchable, text-selectable PDF
}
C#

Der SaveAsSearchablePdf() Aufruf bettet OCR-Text als unsichtbare Ebene hinter dem ursprünglichen gescannten Bild im PDF ein. Das Dokument bleibt optisch unverändert, ist jedoch vollständig durchsuchbar, auswählbar und indexierbar. Das durchsuchbare PDF-Handbuch deckt die gesamte API ab, und das durchsuchbare PDF-Beispiel zeigt das vollständige Funktionsmuster.

Ersetzen der Byte-Array-Eingabe und Eliminieren von temporären Dateien

Die Pix.Image API von TesseractOCRakzeptiert einen Dateipfad. Wenn Bilddaten als Byte-Array eintreffen – aus einer Datenbank, einem HTTP-Multipart-Upload oder einem Speicher-Cache –, erzwingt TesseractOCRvor der Verarbeitung das Schreiben in eine temporäre Datei. Die OcrInput von IronOCR akzeptiert Byte-Arrays und Streams direkt und entfernt den Schritt der temporären Datei vollständig.

TesseractOCR-Ansatz:

// TesseractOCR.Pix.Image has no byte[] or Stream overload
// Every in-memory image must be written to disk before processing

using TesseractOCR;
using TesseractOCR.Enums;

public string ExtractFromBytes(byte[] imageBytes)
{
    // Force a disk write just to satisfy the file-path API
    string tempPath = Path.GetTempFileName() + ".png";

    try
    {
        File.WriteAllBytes(tempPath, imageBytes);

        using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
        using var pix = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
        using var page = engine.Process(pix);

        return page.Text;
    }
    finally
    {
        // Risk: if an exception fires between WriteAllBytes and Delete,
        // temp files accumulate on the server disk
        if (File.Exists(tempPath))
            File.Delete(tempPath);
    }
}
C#

IronOCR Ansatz:

// OcrInput accepts byte arrays and streams natively
//Neindisk write, no temp file cleanup, no cleanup failure risk

using IronOcr;

public string ExtractFromBytes(byte[] imageBytes)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImage(imageBytes);   // direct byte array — no temp file
    return ocr.Read(input).Text;
}

public string ExtractFromStream(Stream imageStream)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImage(imageStream);  // direct stream — no intermediate buffer
    return ocr.Read(input).Text;
}
C#

In Webanwendungen, die hochgeladene Dokumente verarbeiten, führt das Temp-File-Muster unter Last zu einer erhöhten Festplattenauslastung und verursacht Race Conditions, wenn der Bereinigungscode einen Fehler auslöst. Der Stream-Input-Guide und der Image-Input-Guide behandeln jedes unterstützte Eingabeformat, einschließlich MemoryStream, byte[], Bitmap und Dateipfad.

Vertrauensfilterung auf Wortebene mit strukturierten Daten

TesseractOCR liefert einen einzigen Dokumentebenen-Vertrauenswert (page.MeanConfidence, ein Float von 0.0 bis 1.0) und eine flache Textzeichenkette. Es gibt keine Wort-für-Wort-Zuordnung, keine Wortpositionierung und keine strukturelle Hierarchie. Der Aufbau eines Workflows, der unklare Wörter markiert, bestimmte Bereiche extrahiert oder Text Dokumentkoordinaten zuordnet, erfordert den Wechsel zu einem grundlegend anderen Ausgabemodell.

TesseractOCR-Ansatz:

// Only document-level confidence available
//Neinword coordinates, no structural hierarchy

using TesseractOCR;
using TesseractOCR.Enums;

public void ProcessWithConfidence(string imagePath)
{
    using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
    using var pix = TesseractOCR.Pix.Image.LoadFromFile(imagePath);
    using var page = engine.Process(pix);

    float docConfidence = page.MeanConfidence; // 0.0 to 1.0 for the whole document

    if (docConfidence >= 0.7f)
        Console.WriteLine($"Accepted ({docConfidence:P0}): {page.Text}");
    else
        Console.WriteLine($"Rejected ({docConfidence:P0}): document needs preprocessing");

    //Neinway to identify WHICH words are uncertain
    //Neinword coordinates available
}
C#

IronOCR Ansatz:

// Per-word confidence and coordinate data
// Filter individual uncertain words without discarding the whole document

using IronOcr;

public void ProcessWithWordLevelConfidence(string imagePath)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    var result = ocr.Read(input);

    Console.WriteLine($"Document confidence: {result.Confidence}%");

    // Iterate words and flag those below threshold
    foreach (var page in result.Pages)
    {
        foreach (var word in page.Words)
        {
            if (word.Confidence < 70)
            {
                // Low-confidence word — log position for review
                Console.WriteLine(
                    $"Low confidence word '{word.Text}' ({word.Confidence}%) " +
                    $"at X:{word.X} Y:{word.Y}");
            }
        }
    }

    // Extract only high-confidence text
    var reliableWords = result.Pages
        .SelectMany(p => p.Words)
        .Where(w => w.Confidence >= 70)
        .Select(w => w.Text);

    Console.WriteLine(string.Join(" ", reliableWords));
}
C#

Eine wörtliche Konfidenzfilterung ist unerlässlich für die Rechnungsbearbeitung, die Formularauswertung und jeden Workflow, bei dem das Bearbeiten unsicherer Textstellen schlechter ist als deren Markierung zur Überprüfung. Der Leitfaden zu den Konfidenzwerten behandelt das gesamte Bewertungsmodell, und der Leitfaden zu den Leseergebnissen dokumentiert die vollständige strukturierte Ausgabehierarchie.

Referenz zur Zuordnung von TesseractOCR-API zu IronOCR

TesseractOCRIronOCRNotizen
new Engine(tessDataPath, Language.English, EngineMode.Default)new IronTesseract()Kein Tessdata-Pfad; Keine Auswahl von EngineMode erforderlich
TesseractOCR.Pix.Image.LoadFromFile(path)input.LoadImage(path)Akzeptiert auch byte[] und Stream
engine.Process(pixImage)ocr.Read(input)Gibt OcrResult anstelle von Page zurück
page.Textresult.TextIdentische Semantik
page.MeanConfidence (0.0–1.0 Float)result.Confidence (0–100 Double)Skala variiert – Schwellenwertvergleiche aktualisieren
sprache: EnglischSprache.FranzösischOcrLanguage.English + OcrLanguage.French
EngineMode.DefaultNicht anwendbarIronOCR wählt den Modus intern aus
EngineMode.LstmOnlyNicht anwendbarAutomatisch
TesseractOCR.Exceptions.TesseractExceptionIronOcr.Exceptions.OcrExceptionWeniger Ausnahmetypen, die behandelt werden müssen
DllNotFoundException (nativ fehlt)Nicht zutreffendIronOCR bündelt seine nativen Abhängigkeiten
BadImageFormatException (Architektur mismatch)Nicht zutreffendIntern bearbeitet
Externe Image.Mutate(x => x.Grayscale())input.Binarize()Integriert, keine externe Bibliothek
Externe Image.Mutate(x => x.Contrast(...))input.Contrast()Automatische Kalibrierung
Externe Hough-Transformation zur Entzerrunginput.Deskew()Integriert, ein Methodenaufruf
Externer GaussianBlur Geräuschfilterinput.DeNoise()Intelligente Rauschunterdrückung
DocLib.GetDocReader(pdfPath, ...)input.LoadPdf(pdfPath)Docnet.Core nicht erforderlich
docReader.GetPageReader(i).GetImage() + temporäre Dateiinput.LoadPdf(pdfPath)Gesamte Schleife ersetzt
input.LoadPdf(encrypted, Password: "...")Ein einziger Parameter – keine dritte Bibliothek erforderlich
Nicht anwendbar (keine PDF-Ausgabe)result.SaveAsSearchablePdf(outputPath)Kein Äquivalent in TesseractOCR
Nicht anwendbar (keine Frame-Unterstützung)input.LoadImageFrames(tiffPath)Multi-Frame-TIFF in einem Aufruf
Nicht anwendbar (nur Dateipfad)input.LoadImage(stream) / input.LoadImage(bytes)Beseitigt Muster für temporäre Dateien
Pro-Thread Engine InstanzenEinzelner IronTesseract, der über Threads geteilt wirdThread-sicher durch Design
page.MeanConfidence (nur Dokument)word.Confidence pro WortBewertung auf Wortebene verfügbar

Gängige Migrationsprobleme und Lösungen

Problem 1: Konfidenzschwellenwerte werden nach der Migration nicht mehr eingehalten

TesseractOCR: page.MeanConfidence gibt einen Float im Bereich von 0.0 bis 1.0 zurück. Der Code überprüft häufig if (confidence >= 0.7f), um Ergebnisse zu akzeptieren.

**Lösung:**IronOCR gibt die Konfidenz als Doppelwert auf einer Skala von 0 bis 100 an. Multiplizieren Sie alle vorhandenen Schwellenwerte mit 100. Ein Schwellenwert von 0.7f wird zu 70.0. Das Vertrauen auf Dokumentebene liegt bei result.Confidence; Das Vertrauen auf Wortebene liegt bei word.Confidence innerhalb result.Pages[n].Words.

// Before (TesseractOCR): page.MeanConfidence >= 0.7f
// After (IronOCR):
var result = new IronTesseract().Read("document.png");
if (result.Confidence >= 70.0)
{
    Console.WriteLine(result.Text);
}
C#

Problem 2: Temporäres Verzeichnis füllt sich nach Migrationsversuch

TesseractOCR: Code, der um die Pix.Image.LoadFromFile() Begrenzung geschrieben wurde, erstellt häufig temporäre Dateien, die in finally Blöcken aufgeräumt werden. Wenn der finally Block selbst wirft, oder wenn die Anwendung gewaltsam beendet wird, sammeln sich temporäre Dateien an.

Lösung: Ersetzen Sie alle File.WriteAllBytes(tempPath, bytes) + Pix.Image.LoadFromFile(tempPath) Muster durch input.LoadImage(bytes) oder input.LoadImage(stream). Sobald kein Code mehr temporäre Dateien erstellt, können die Bereinigungslogik und die Verzeichniserstellung für den temporären Speicher vollständig entfernt werden. Suchen Sie nach GetTempFileName, GetTempPath und SaveBgraAsPng, um alle Vorkommen zu finden.

grep -rn "GetTempFileName\|GetTempPath\|SaveBgraAsPng" --include="*.cs" .
SHELL
// Before: byte[] → temp file → Pix.Image.LoadFromFile
// After: byte[] → OcrInput directly
using var input = new OcrInput();
input.LoadImage(imageBytes);   // no disk write
var result = ocr.Read(input);
C#

Alle unterstützten Eingabeformate finden Sie im Leitfaden zur Bild-Eingabe.

Problem 3: Änderung des Sprachoperators verursacht Compilerfehler

TesseractOCR: Die mehrsprachige OCR verwendet bitweises OR auf einer Flag-Enumeration: Language.English | Sprache: Französisch. Dies ist ein [Flags]` Enum-Muster.

**Lösung:**IronOCR verwendet den Addition Operator: OcrLanguage.English + OcrLanguage.French. Diese sehen ähnlich aus, sind aber unterschiedliche Operatoren. Ein Suchen-und-Ersetzen von Language. zu OcrLanguage. kombiniert mit | to + in Sprachenausdrücken behandelt die Mehrheit der Fälle. Verifizieren Sie, dass alle zur Laufzeit gebauten Sprachkombinationen auch + verwenden.

// Before (TesseractOCR):
var engine = new Engine(@"./tessdata",
    Language.English | Language.French | Language.German,
    EngineMode.Default);

// After (IronOCR):
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English + OcrLanguage.French + OcrLanguage.German;
C#

Problem 4: Docnet- und ImageSharp-Pakete werden nach der Deinstallation weiterhin referenziert

TesseractOCR: Projekte, die TesseractOCRfür PDF-Workflows verwenden, haben in der Regel Docnet.Core als direkte Abhängigkeit und SixLabors.ImageSharp oder SkiaSharp für die Vorverarbeitung. Nach dem Wechsel zu IronOCR bleiben diese Pakete häufig im .csproj, weil die using Anweisungen nicht vollständig entfernt wurden.

Lösung: Nach dem Entfernen der Pakete aus .csproj, suchen Sie nach verbleibenden using Docnet.Core, using SixLabors.ImageSharp und verwandten Namensraumreferenzen. Wenn using Anweisungen Namensräume referenzieren, die im Abhängigkeitsbaum nicht mehr existieren, wird der Compiler sie kennzeichnen – aber nur, wenn die dotnet remove package Befehle tatsächlich ausgeführt wurden.

grep -rn "using Docnet\|using SixLabors\|using SkiaSharp" --include="*.cs" .
SHELL

Entfernen Sie die Referenzen der erkannten Dateien, dann löschen Sie die Vorverarbeitungshilfsmethoden (SaveBgraAsPng, ApplyGrayscale, ApplyThreshold und ähnliche), die der alten Pipeline dienten.

Problem 5: Die Größe des Docker-Images nimmt nach der Migration zu

TesseractOCR: Einige Docker-Konfigurationen installieren Tesseract über apt-get install tesseract-ocr tesseract-ocr-eng als Systempaket und verweisen dann auf diese Systembinärdateien. Dies erhöht die Bildgröße je nach Sprachpaketen um ca. 30–80 MB.

**Lösung:**IronOCR bündelt seine eigenen Tesseract-Binärdateien im NuGet-Paket. Die apt-get install tesseract-ocr Zeile in der Dockerfile ist nicht mehr nötig und sollte entfernt werden. Sprachpakete kommen ebenfalls von NuGet, nicht von apt-get install tesseract-ocr-fra. Der Docker-Bereitstellungsleitfaden enthält validierte Basisbildkonfigurationen und die genauen Pakete, die für die Ausführung von IronOCR in einem Container erforderlich sind.

# Remove these lines after migration:
# RUN apt-get install -y tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra
# COPY ./tessdata /app/tessdata
Text

Issue 6: TesseractException und DllNotFoundException Catch Blocks werden unerreichbar

TesseractOCR: Produktions-TesseractOCR-Integrationen fangen TesseractOCR.Exceptions.TesseractException, DllNotFoundException (für fehlende native Binärdateien) und BadImageFormatException (für Architektur-Mismatches) ab. Diese Ausnahmetypen sind defensive Reaktionen auf die Instabilität von Tessdata und der nativen Binärbereitstellung.

**Lösung:**IronOCR bündelt native Abhängigkeiten und verwaltet die Initialisierung intern. DllNotFoundException und BadImageFormatException gelten nicht. Entfernen Sie diese Catch-Blöcke. Die Ausnahmeoberfläche reduziert sich auf IronOcr.Exceptions.OcrException für OCR-Fehler und Standard IOException für Datei-Zugriffsprobleme.

// Before: five exception types to handle
catch (TesseractOCR.Exceptions.TesseractException ex) { ... }
catch (DllNotFoundException ex) { ... }
catch (BadImageFormatException ex) { ... }
catch (OutOfMemoryException ex) { ... }

// After: two exception types
catch (IronOcr.Exceptions.OcrException ex) { ... }
catch (IOException ex) { ... }
C#

TesseractOCR-Migrations-Checkliste

Vor der Migration

Überprüfen Sie alle Stellen im Code, an denen TesseractOCRverwendet wird:

grep -rn "using TesseractOCR" --include="*.cs" .
grep -rn "new Engine(" --include="*.cs" .
grep -rn "Pix\.Image\.LoadFromFile\|engine\.Process\|page\.Text\|MeanConfidence" --include="*.cs" .
grep -rn "Language\." --include="*.cs" .
SHELL

Identifizieren Sie die gesamte unterstützende Infrastruktur, die entfernt wird:

grep -rn "using Docnet\|using SixLabors\|GetTempFileName\|SaveBgraAsPng" --include="*.cs" .
grep -rn "tessdata" --include="*.cs" .
grep -rn "tessdata" --include="*.csproj" .
grep -rn "tessdata" Dockerfile 2>/dev/null || true
SHELL

Erfassen Sie vor der Migration die aktuelle Genauigkeitsbasis anhand einer repräsentativen Stichprobe von Dokumenten, damit die Qualität nach der Migration überprüft werden kann.

Code-Migration

  1. Führen Sie dotnet remove package TesseractOCR aus
  2. Führen Sie dotnet remove package Docnet.Core aus (wenn vorhanden)
  3. Führen Sie dotnet remove package SixLabors.ImageSharp aus (wenn für Vorverarbeitung hinzugefügt)
  4. Führen Sie dotnet add package IronOcr aus
  5. Fügen Sie IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" beim Start der Anwendung hinzu
  6. Ersetzen Sie using TesseractOCR und using TesseractOCR.Enums durch using IronOcr
  7. Ersetzen Sie new Engine(tessDataPath, Language.English, EngineMode.Default) durch new IronTesseract()
  8. Ersetzen Sie TesseractOCR.Pix.Image.LoadFromFile(path) durch input.LoadImage(path) auf einer OcrInput Instanz
  9. Ersetzen Sie engine.Process(pixImage) durch ocr.Read(input)
  10. Ersetzen Sie page.Text durch result.Text
  11. Vergleich der Konfidenzschwellenwerte aktualisieren – alle Werte zwischen 0,0 und 1,0 für die IronOCR-Skala von 0 bis 100 mit 100 multiplizieren
  12. Ersetzen Sie Language.X |Sprache.Y with OcrLanguage.X + OcrLanguage.Y
  13. Löschen Sie alle Vorverarbeitungshilfsmethoden (SaveBgraAsPng, manuelle Filterketten, temporäre Dateilogik)
  14. Ersetzen Sie Docnet PDF-Darstellungsschleifen durch input.LoadPdf(path) oder input.LoadPdfPages(path, start, end)
  15. Ersetzen Sie Mehrfachbild-TIFF-Schleifen durch input.LoadImageFrames(tiffPath)
  16. Ersetzen Sie File.WriteAllBytes(tempPath, bytes) + LoadFromFile(tempPath) durch input.LoadImage(bytes)
  17. Aktualisieren Sie die Catch-Blöcke – entfernen Sie TesseractException, DllNotFoundException, BadImageFormatException
  18. Entfernen Sie den Ordner "tessdata" aus der Konfiguration des Projekt-Ausgabeverzeichnisses und den Docker-Images

Nach der Migration

  • Bestätigen Sie, dass dotnet build null Compilerfehler und null unerreichbare-Catch-Warnungen erzeugt
  • Führen Sie eine OCR-Analyse des Referenzbeispiels zur Genauigkeit vor der Migration durch und vergleichen Sie die Ergebnisse
  • Überprüfen Sie, ob mehrseitige TIFF-Dateien die richtige Anzahl extrahierter Seiten ergeben
  • Stellen Sie sicher, dass die durchsuchbare PDF-Ausgabe in einem PDF-Viewer mit auswählbarem Text geöffnet wird
  • Testen Sie Byte-Array- und Stream-Eingabepfade aus den tatsächlichen Datenquellen der Anwendung
  • Überprüfen Sie, ob die Konfidenzwerte auf WORD-Ebene im Bereich von 0–100 liegen (nicht 0,0–1,0)
  • Führen Sie Parallelverarbeitungstests durch, um sicherzustellen, dass keine Warnungen zur Engine-Zuweisung pro Thread auftreten
  • Bereitstellen in die Zielumgebung (Docker, Azure, Linux) und bestätigen, dass IronOCR ohne DllNotFoundException initialisiert Verifizieren Sie, dass kein tessdata-Ordner oder .traineddata Datei in Bereitstellungsskripten referenziert werden

Wichtigste Vorteile der Migration zu IronOCR

Vorverarbeitung wird zu einer einzeiligen Konfiguration, nicht zu einer 100-zeiligen Abhängigkeit. Nach der Migration ersetzen input.Deskew(), input.DeNoise() und input.Contrast() eine externe Bildbibliothek, manuelle Parametereinstellung und das Schreiben temporärer Dateien, die die beiden verbinden. Handyfotos, schräge Scans und kontrastarme Faxe – Dokumenttypen, für die bisher ein spezieller Vorverarbeitungsingenieur erforderlich war – liefern über die integrierte Pipeline zuverlässige Ergebnisse. Auf der Seite mit den Vorverarbeitungsfunktionen sind alle verfügbaren Filter aufgelistet.

PDF ist ein erstklassiges Eingabe- und Ausgabeformat. Die Docnet-Abhängigkeit, der BGRA-zu-PNG-Konvertierungshelfer, die Schleife zur Verwaltung temporärer Dateien, die dritte Bibliothek für passwortgeschützte Dateien – all das entfällt. Jedes PDF, das in das System gelangt, geht direkt in input.LoadPdf(). Jedes gescannte Dokument, das durchsuchbar werden muss, geht durch result.SaveAsSearchablePdf(). Die gesamte PDF-Pipeline, die in TesseractOCRmehr als 100 Zeilen erforderte, wird zu einer Handvoll Methodenaufrufe. Auf der Seite mit Anwendungsbeispielen für PDF-OCR finden Sie die gesamte Bandbreite der unterstützten PDF-Workflows.

Strukturierte Ausgabe ersetzt flache Textzeichenketten. result.Pages, result.Paragraphs, result.Lines und result.Words zeigen die Dokumentstruktur mit Koordinaten pro Element und Vertrauensbewertungen pro Wort. Workflows, die bisher Parsing-Heuristiken benötigten, um bestimmte Felder – Rechnungsnummern, Daten, Beträge – zu finden, können stattdessen Koordinaten auf WORD-Ebene und Konfidenzfilterung nutzen. Dies ist die Grundlage für den Aufbau zuverlässiger Pipelines zur Formular-Extraktion und Dokumentenverarbeitung auf Basis der OCR-Ergebnisfunktionen von IronOCR.

Die Bereitstellung erfordert keine Tessdata-Orchestrierung mehr. Der tessdata-Ordner, die Curl-Download-Skripte, die Docker COPY ./tessdata Schicht, die CI/CD-Cache-Konfiguration für .traineddata Dateien – all das verschwindet. Die Sprachen werden als NuGet-Pakete ausgeliefert, versioniert, zusammen mit den übrigen Projektabhängigkeiten wiederhergestellt und identisch bereitgestellt, unabhängig davon, ob das Ziel eine Entwickler-Workstation, ein Docker-Container, ein Azure App Service oder ein AWS Lambda ist. Der Azure-Bereitstellungsleitfaden und der Linux-Bereitstellungsleitfaden enthalten validierte Konfigurationen für Produktionsumgebungen.

Das Lizenzmodell ist vorhersehbar. TesseractOCRist kostenlos, die dafür erforderliche Infrastruktur jedoch nicht – Entwicklerzeit für die Implementierung der Vorverarbeitung, die Evaluierung der PDF-Bibliothek, die Erstellung von Skripten für die Tessdata-Bereitstellung und die laufende Wartung der externen Abhängigkeitskette. Die unbefristete Lizenz von IronOCR($999 Lite, $1,499 Professional, $2,399 Enterprise) ist eine einmalige Kosten, die Wochen von Infrastrukturarbeit ersetzen und die wiederkehrende Wartungsoberfläche eliminieren. Kommerzieller Support mit garantierter Antwortkette ersetzt die Abhängigkeit von der GitHub-Issue-Warteschlange eines einzelnen ehrenamtlichen Betreuers.

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.