Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

Ein Vergleich zwischen IronOCR und Aspose.OCR

Asprise OCR liefert zuerst eine Java-Bibliothek und behandelt .NETals sekundäres Ziel — und diese Designentscheidung zeigt sich in jeder Schicht des Produkts, von der in Java-Beispielen geschriebenen Dokumentation bis hin zu einem nativen Binärbereitstellungsmodell, das plattformspezifische DLLs (aocr.dll, aocr_x64.dll, libaocr.so, libaocr.dylib) auf jedem Computer erfordert, der die Software ausführt. Das Threading-Modell verschärft dies noch: Lite License und STANDARD-Lizenzen sind vertraglich auf die Ausführung in einem einzigen Thread und einem einzigen Prozess beschränkt, was bedeutet, dass jeder ASP.NET Core-Endpunkt, Windows-Dienst oder jede Azure-Funktion, die Asprise auf diesen Ebenen aufruft, gegen die Lizenzvereinbarung verstößt. Für .NET-Teams, die Produktionssysteme entwickeln, sind dies keine theoretischen Bedenken – es handelt sich um Hindernisse bei der Bereitstellung, die entweder teure Enterprise-Lizenzen oder einen Bibliothekswechsel erzwingen, bevor die Produktion erreicht wird.

Asprise OCRverstehen

Asprise OCR ist ein kommerzielles OCR-Produkt von Asprise Inc. Das Produkt entstand ursprünglich als Java-OCR-Engine. Die .NET-Unterstützung kam später durch native Bibliotheks-Wrapper hinzu, die eine Brücke zwischen verwaltetem C#-Code und den zugrunde liegenden, nicht verwalteten OCR-Binärdateien schlagen. Diese Brückenarchitektur ist das charakteristische Merkmal der Bibliothek für .NET-Entwickler.

Wichtigste architektonische Merkmale:

  • Java-first-Design: Die gesamte Primärdokumentation, der Beispielcode und die SDK-Beispiele sind for Javageschrieben. .NET-Entwickler übersetzen gedanklich aus Javaoder stützen sich auf spärliche Sekundärdokumentation.
  • Native Binärabhängigkeit: Plattformspezifische, nicht verwaltete DLLs müssen im Bereitstellungsverzeichnis oder im Systempfad vorhanden sein. Das korrekte Binärprogramm muss mit der Prozessarchitektur übereinstimmen — 32-Bit-Prozesse erfordern aocr.dll, 64-Bit-Prozesse erfordern aocr_x64.dll.
  • Manueller Engine-Lebenszyklus: Die Bibliothek stellt ein C-Style-Initialisierungsmuster (Ocr.SetUp(), ocr.StartEngine(), ocr.StopEngine()) bereit, das aus ihren Java-Ursprüngen stammt. Es gibt keine IDisposable Implementierung. Ein vergessenes StopEngine() führt zu einem Verlust von nativem Speicher.
  • Einschränkungen hinsichtlich der Lizenzstufen: Die Stufen LITE (~299 $) und STANDARD (~699 $) erlauben nur die Ausführung in einem einzigen Thread und einem einzigen Prozess. Für Multithreading ist Enterprise erforderlich, wofür Sie sich an den Vertrieb wenden müssen.
  • Fehlercodes, keine Ausnahmefehler: Erkennungsfehler treten als Null-Rückgaben oder als Strings auf, die mit "ERROR:" beginnen, was mit den Fehlercode-Konventionen von C/Java übereinstimmt, anstatt mit den .NET-Ausnahmemustern.
  • Über 20 OCR-Sprachen: Deutlich weniger als bei Alternativen, die für das .NET-Ökosystem entwickelt wurden.

Das Problem des Engine-Lebenszyklus

Jeder Asprise-OCR-Aufruf erfordert eine explizite Verwaltung der Engine. Das Muster umfasst vier obligatorische Schritte: statische globale Einrichtung, Instanzerstellung, Start der Engine mit einer Sprachzeichenfolge und Beenden der Engine nach Abschluss. Die Engine überspringt native Ressourcen, um Speicherlecks zu vermeiden, da der Garbage Collector nicht verwalteten Speicher nicht freigeben kann:

// Asprise: four required steps before reading a single image
Ocr.SetUp();                              // Static global init
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);   // Allocates native engine
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();                         // Must call — no IDisposable fallback
}
// Asprise: four required steps before reading a single image
Ocr.SetUp();                              // Static global init
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);   // Allocates native engine
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();                         // Must call — no IDisposable fallback
}
' Asprise: four required steps before reading a single image
Ocr.SetUp()                              ' Static global init
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)   ' Allocates native engine
    Dim text As String = ocr.Recognize( _
        imagePath, _
        Ocr.RECOGNIZE_TYPE_TEXT, _
        Ocr.OUTPUT_FORMAT_PLAINTEXT)
    Return text
Finally
    ocr.StopEngine()                         ' Must call — no IDisposable fallback
End Try
$vbLabelText   $csharpLabel

Dieses Muster schlägt in drei häufigen Situationen stillschweigend fehl: eine unbehandelte Ausnahme vor dem Aufruf von StopEngine(), ein refaktorisierter Codepfad, der die Bereinigung überspringt, und die gleichzeitige Nutzung auf LITE/STANDARD, wo die Lizenz das Threading verbietet, das überhaupt Parallelität ermöglichen würde. Der finally Block mindert das erste Problem, aber die Lizenzbeschränkung macht das Muster für Server-Workloads ohnehin obsolet.

IronOCR verstehen

IronOCR ist eine kommerzielle OCR-Bibliothek, die von Grund auf for .NETentwickelt wurde. Sie umfasst eine optimierte Tesseract 5-Engine mit automatischer Vorverarbeitung, nativer PDF-Unterstützung und einer verwalteten API, die durchgehend den .NETStandard-Konventionen folgt.

Hauptmerkmale:

  • Einzelnes NuGet-Paket: dotnet add package IronOcr installiert alles — keine Verwaltung von nativen Binärdateien, keine Tessdata-Ordner, keine plattformspezifische Konfiguration.
  • IDisposable resource management: OcrInput implements IDisposable. Die using Anweisung handelt die Bereinigung automatisch ab.
  • Thread-sicher auf allen Lizenzstufen: Keine künstlichen Threading-Einschränkungen. IronTesseract Instanzen können auf der $999 Lite Lizenz sicher parallel verwendet werden.
  • Automatische Vorverarbeitung: Eingebaute Deskew(), DeNoise(), Contrast(), Binarize(), und EnhanceResolution() Methoden beseitigen die Notwendigkeit für externe Bildverarbeitungsbibliotheken.
  • Native PDF-Eingabe: Übergeben Sie einen PDF-Pfad direkt – es ist keine externe Rendering-Bibliothek erforderlich, um Seiten zunächst in Bilder zu konvertieren.
  • 125+ Sprachen: Verfügbar als separate NuGet-Pakete (IronOcr.Languages.French, usw.), die nur bei Bedarf installiert werden.
  • Durchsuchbare PDF-Ausgabe: result.SaveAsSearchablePdf() erzeugt PDF/A-konforme Ausgaben aus jedem OCR-Ergebnis.
  • Zugriff auf strukturierte Daten: Die Ergebnisse zeigen Text auf Wort-, Zeilen- und Absatzebene mit Pixelkoordinaten und Konfidenzwerten pro Wort an.

Funktionsvergleich

Feature Asprise OCR IronOCR
Primäre Plattform Java .NET
NuGet-Bereitstellung Wrapper + native DLLs Einzelpaket, keine Extras
Threading (alle Ebenen) Enterprise only Alle Stufen
Einsatz in Server-/Webanwendungen Enterprise only Alle Stufen
Native PDF-Eingabe Nein Ja
Integrierte Vorverarbeitung Nein Ja
OCR-Sprachen 20+ 125+
Durchsuchbare PDF-Ausgabe Nein Ja

Detaillierter Funktionsvergleich

Feature Asprise OCR IronOCR
Architektur
Entstehungsgeschichte Java, .NETsekundär .NETNative
API-Stil C-Stil mit ganzzahligen Konstanten Fließende C#-Kenntnisse
IDisposable / using Muster Nicht implementiert Ja (OcrInput)
Fehlerbehandlung Null / Fehler-String-Rückgaben .NET-Ausnahmen
Ausnahmeverbreitung aus nativem Interoperabilitätslücken Behandelte Ausnahmen
Threading und Server-Nutzung
Multithreading – Lite-Stufe Verboten Zulässig
Multithreading — STANDARD-Stufe Verboten Zulässig
Multithreading — Enterprise/obere Ebene Zulässig Zulässig
ASP.NET Core Web-API Erfordert Enterprise Jede Stufe
Azure Functions / AWS Lambda Erfordert Enterprise Jede Stufe
Parallel.ForEach-Batch Erfordert Enterprise Jede Stufe
Eingabeunterstützung
Bilddateien (JPG, PNG, TIFF) Ja Ja
Native PDF-Eingabe Nein (externe Bibliothek erforderlich) Ja
Passwortgeschütztes PDF Nein Ja
Byte-Array / Stream-Eingabe Beschränkt Ja
Mehrseitiges TIFF Beschränkt Ja
Vorverarbeitung
Entschiefen Handbuch / extern Eingebaut
Rauschunterdrückung Handbuch / extern Eingebaut
Kontrastverbesserung Handbuch / extern Eingebaut
Binärisierung Handbuch / extern Eingebaut
Auflösungsskalierung (DPI) Handbuch / extern Eingebaut
Ausgabe
Klartext Ja Ja
Durchsuchbare PDF-Ausgabe Nein Ja
WORD-Koordinaten Beschränkt Ja
Vertrauenswerte pro Wort Nein Ja
hOCR-Export Nein Ja
Sprachen
Wortanzahl 20+ 125+
Sprachinstallation Im Lieferumfang enthalten NuGet-Pakete
Stark typisierte Sprache enum Keine (String-Codes) Ja (OcrLanguage)
Einsatz
Native Binärdatei erforderlich Ja (plattformspezifische DLL) Nein
Tessdata-Ordnerverwaltung Nein Nein
Docker Manuelle Binärkonfiguration Sofort einsatzbereit
Linux Erfordert libaocr.so NuGet-Handles
Preisgestaltung
Einstiegspreis Kontaktieren Sie Asprise für die Preise (LITE, nur ein Thread) $999 (Lite, alle Funktionen)
Einstiegspreis für die Servernutzung Enterprise (Kontakt zum Vertrieb) $999 (Lite)

Native .NET- vs. Java-Bridge-Architektur

Die grundlegende Frage for .NET-Teams lautet nicht, welche Bibliothek auf dem Papier mehr Funktionen bietet – sondern welche sich in den von ihnen tatsächlich genutzten Bereitstellungs- und Betriebsumgebungen wie ein vollwertiges .NET-Element verhält.

Ansatz von Asprise

Asprise kommuniziert über P/Invoke-Marshaling zwischen verwaltetem .NET-Code und seiner nicht verwalteten OCR-Engine. Die asprise-vs-ironocr-examples.cs Quelle zeigt den zugrunde liegenden Mechanismus:

// Asprise interop layer — bridging managed C# to native OCR engine
[DllImport("aocr.dll")]
private static extern IntPtr OCR(string imagePath, int type);

public string ExtractText(string imagePath)
{
    // P/Invoke call into unmanaged DLL
    IntPtr result = OCR(imagePath, 0);
    return Marshal.PtrToStringAnsi(result);  // Manual string marshal
}
// Asprise interop layer — bridging managed C# to native OCR engine
[DllImport("aocr.dll")]
private static extern IntPtr OCR(string imagePath, int type);

public string ExtractText(string imagePath)
{
    // P/Invoke call into unmanaged DLL
    IntPtr result = OCR(imagePath, 0);
    return Marshal.PtrToStringAnsi(result);  // Manual string marshal
}
Imports System.Runtime.InteropServices

' Asprise interop layer — bridging managed VB.NET to native OCR engine
Private Class OCRInterop
    <DllImport("aocr.dll")>
    Private Shared Function OCR(imagePath As String, type As Integer) As IntPtr
    End Function

    Public Function ExtractText(imagePath As String) As String
        ' P/Invoke call into unmanaged DLL
        Dim result As IntPtr = OCR(imagePath, 0)
        Return Marshal.PtrToStringAnsi(result)  ' Manual string marshal
    End Function
End Class
$vbLabelText   $csharpLabel

Auf der übergeordneten API-Ebene rufen Entwickler dieselbe Bridge über einen Klassen-Wrapper auf, doch die Bereitstellungsanforderungen ändern sich nicht: Jeder Zielrechner benötigt die richtige native Binärdatei im richtigen Pfad, die der richtigen Prozessarchitektur entspricht. Ein 64-Bit-Deployment, das mit aocr.dll statt aocr_x64.dll ausgeliefert wird, wirft zur Laufzeit eine BadImageFormatException. Ein Linux-Docker-Container ohne libaocr.so in LD_LIBRARY_PATH wirft DllNotFoundException. Keiner der Fehler wird beim Erstellen erkannt.

IronOCR-Ansatz

IronOCR wird als einzelne NuGet-Referenz installiert. Das Paket verwaltet alle nativen Abhängigkeiten intern über den plattformspezifischen Paketauswahlmechanismus von NuGet:

// Installation — one command, all platforms
// dotnet add package IronOcr

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

// Basic OCR — no native binary setup, no tessdata, no config files
var text = new IronTesseract().Read("document.jpg").Text;
// Installation — one command, all platforms
// dotnet add package IronOcr

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

// Basic OCR — no native binary setup, no tessdata, no config files
var text = new IronTesseract().Read("document.jpg").Text;
Imports IronOcr

' Installation — one command, all platforms
' dotnet add package IronOcr

' License setup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"

' Basic OCR — no native binary setup, no tessdata, no config files
Dim text As String = New IronTesseract().Read("document.jpg").Text
$vbLabelText   $csharpLabel

Die using Anweisung auf OcrInput ersetzt manuelle Engine-Lebenszyklusaufrufe. Es gibt keinen StartEngine() anzurufen und keinen StopEngine() zu vergessen. Der Garbage Collector und das IDisposable Muster übernehmen die Bereinigung korrekt in Ausnahmefällen, ohne dass ein try/finally Gerüst um jeden OCR-Aufruf erforderlich ist.

Ausführliche Anweisungen zur Einrichtung finden Sie im IronTesseract-Einrichtungsleitfaden.

Threading-Modell

Die Threading-Beschränkung ist der wichtigste Unterschied zwischen Asprise und Alternativen for .NET-Serverentwickler. Es handelt sich nicht um ein Leistungsproblem – es ist eine Frage der Lizenzkonformität.

Ansatz von Asprise

Lite- und STANDARD-Lizenzen verbieten ausdrücklich die Ausführung in mehreren Threads und Prozessen. Jeder Code, der Asprise aus mehr als einem Thread gleichzeitig aufruft, verstößt gegen die Lizenzvereinbarung für diese Stufen. .NETCore verarbeitet Anfragen standardmäßig in einem Thread-Pool. Dadurch stellt jeder Standard-Web-API-Controller, der Asprise aufruft, einen Lizenzverstoß bei Lite/STANDARD dar:

// ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
// Web server thread pool = multiple concurrent threads = prohibited
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Two concurrent requests = two threads = license violation
        var ocr = new Ocr();
        ocr.StartEngine("eng", Ocr.SPEED_FAST);
        var text = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        ocr.StopEngine();
        return Ok(text);
    }
}
// ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
// Web server thread pool = multiple concurrent threads = prohibited
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Two concurrent requests = two threads = license violation
        var ocr = new Ocr();
        ocr.StartEngine("eng", Ocr.SPEED_FAST);
        var text = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        ocr.StopEngine();
        return Ok(text);
    }
}
Imports Microsoft.AspNetCore.Mvc

' ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
' Web server thread pool = multiple concurrent threads = prohibited
<ApiController>
Public Class OcrController
    Inherits ControllerBase

    <HttpPost("extract")>
    Public Function ExtractText(file As IFormFile) As IActionResult
        ' Two concurrent requests = two threads = license violation
        Dim ocr As New Ocr()
        ocr.StartEngine("eng", Ocr.SPEED_FAST)
        Dim text As String = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        ocr.StopEngine()
        Return Ok(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Die Stapelverarbeitung unter Lite/STANDARD erfolgt zwingend sequenziell, unabhängig von der Anzahl der verfügbaren CPU-Kerne:

// ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var path in imagePaths)  // Cannot use Parallel.ForEach — license violation
    {
        string text = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        results.Add(text);
    }
}
finally
{
    ocr.StopEngine();
}
// ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var path in imagePaths)  // Cannot use Parallel.ForEach — license violation
    {
        string text = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        results.Add(text);
    }
}
finally
{
    ocr.StopEngine();
}
' ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    For Each path In imagePaths ' Cannot use Parallel.ForEach — license violation
        Dim text As String = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        results.Add(text)
    Next
Finally
    ocr.StopEngine()
End Try
$vbLabelText   $csharpLabel

ENTERPRISE entfernt die Thread-Beschränkung, aber ENTERPRISE erfordert den Kontakt zu Asprise-Verkäufen ohne veröffentlichten Preis.

IronOCR-Ansatz

IronTesseract ist threadsicher und trägt keine Threading-Beschränkungen auf irgendeiner Lizenzstufe. Parallele Stapelverarbeitung auf einer $999 Lite Lizenz wird vollständig unterstützt:

//IronOCR— parallel batch on any license tier
// 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
var results = imagePaths
    .AsParallel()
    .Select(path => new IronTesseract().Read(path).Text)
    .ToList();
//IronOCR— parallel batch on any license tier
// 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
var results = imagePaths
    .AsParallel()
    .Select(path => new IronTesseract().Read(path).Text)
    .ToList();
Imports System.Linq

'IronOCR— parallel batch on any license tier
' 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
Dim results = imagePaths _
    .AsParallel() _
    .Select(Function(path) New IronTesseract().Read(path).Text) _
    .ToList()
$vbLabelText   $csharpLabel

ASP.NET Core-Controller funktionieren ohne besondere Konfiguration:

//IronOCR— concurrent requests on any license tier
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        var text = new IronTesseract().Read(tempPath).Text;
        return Ok(text);
    }
}
//IronOCR— concurrent requests on any license tier
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        var text = new IronTesseract().Read(tempPath).Text;
        return Ok(text);
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
Public Class OcrController
    Inherits ControllerBase

    <HttpPost("extract")>
    Public Function ExtractText(file As IFormFile) As IActionResult
        ' Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        Dim text = New IronTesseract().Read(tempPath).Text
        Return Ok(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Siehe das Multithreading-Beispiel für parallele Durchsatzmuster bei Batch-Workloads.

Bildvorverarbeitung

Asprise übergibt Bilder ohne Vorverarbeitung an seine native Engine. Scans von geringer Qualität – schräge Seiten, Bildrauschen, geringer Kontrast – beeinträchtigen die OCR-Genauigkeit direkt, da es keine Vorverarbeitungsschicht gibt, um Bildfehler vor der Erkennung zu korrigieren.

Ansatz von Asprise

Für die Vorverarbeitung ist eine externe Bildbibliothek erforderlich. Ein Entwickler, der mit Asprise arbeitet, fügt eine Abhängigkeit wie ImageMagick, SkiaSharp oder System.Drawing hinzu, führt die Vorverarbeitungsschritte manuell durch, speichert das verarbeitete Bild in einer temporären Datei und übergibt diese Datei dann an Asprise:

// Asprise preprocessing: external dependency required
// 1. Load with external library
// 2. Apply corrections (deskew, denoise, contrast) with external library
// 3. Save to temp file
// 4. Pass temp file to Asprise

var ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);
// preprocessedImagePath comes from your external preprocessing pipeline
string text = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();
// Asprise preprocessing: external dependency required
// 1. Load with external library
// 2. Apply corrections (deskew, denoise, contrast) with external library
// 3. Save to temp file
// 4. Pass temp file to Asprise

var ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);
// preprocessedImagePath comes from your external preprocessing pipeline
string text = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();
' Asprise preprocessing: external dependency required
' 1. Load with external library
' 2. Apply corrections (deskew, denoise, contrast) with external library
' 3. Save to temp file
' 4. Pass temp file to Asprise

Dim ocr As New Ocr()
ocr.StartEngine("eng", Ocr.SPEED_FAST)
' preprocessedImagePath comes from your external preprocessing pipeline
Dim text As String = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
ocr.StopEngine()
$vbLabelText   $csharpLabel

Dies führt zu einer zusätzlichen Build-Abhängigkeit, verursacht durch die zusätzliche Bibliothek einen höheren Laufzeit-Overhead und erfordert vom Entwickler ausreichende Kenntnisse in der Bildverarbeitung, um wirksame Korrekturen vornehmen zu können.

IronOCR-Ansatz

Die Vorverarbeitung ist in OcrInput eingebaut. Die gleiche Pipeline, die mit einer externen Bibliothek und sorgfältiger Parameteroptimierung 50–100 Zeilen benötigte, wird zu fünf Methodenaufrufen:

//IronOCR— preprocessing built in, no external dependencies
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();               // Correct page rotation
input.DeNoise();              // Remove scanner artifacts
input.Contrast();             // Improve text/background separation
input.Binarize();             // Convert to black/white for cleaner engine input
input.EnhanceResolution(300); // Scale to optimal DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
//IronOCR— preprocessing built in, no external dependencies
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();               // Correct page rotation
input.DeNoise();              // Remove scanner artifacts
input.Contrast();             // Improve text/background separation
input.Binarize();             // Convert to black/white for cleaner engine input
input.EnhanceResolution(300); // Scale to optimal DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' IronOCR— preprocessing built in, no external dependencies
Using input As New OcrInput()
    input.LoadImage("low-quality-scan.jpg")
    input.Deskew()               ' Correct page rotation
    input.DeNoise()              ' Remove scanner artifacts
    input.Contrast()             ' Improve text/background separation
    input.Binarize()             ' Convert to black/white for cleaner engine input
    input.EnhanceResolution(300) ' Scale to optimal DPI

    Dim result = New IronTesseract().Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

Bei Scans, bei denen die Drehung unvorhersehbar ist, bewältigt die automatische Begradigung beliebige Winkel, ohne dass der Entwickler Drehungswerte erkennen oder angeben muss. Der Leitfaden zur Bildqualitätskorrektur behandelt den gesamten Filtersatz und gibt an, wann die einzelnen Filter anzuwenden sind.

PDF-Verarbeitung

Die Eingabe von PDF-Dateien ist eine häufige Anforderung in Dokumentenverarbeitungsprozessen. Asprise bietet keine native PDF-Unterstützung – die Bibliothek arbeitet mit Bilddateien. Die Verarbeitung einer PDF-Datei mit Asprise erfordert, dass jede Seite zunächst mithilfe einer externen Bibliothek in ein Bild konvertiert und anschließend jede Bilddatei einzeln verarbeitet wird.

Ansatz von Asprise

// Asprise PDF workaround — external library required to render PDF pages
var images = ExternalPdfLibrary.RenderPages("invoice.pdf");

Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    var allText = new System.Text.StringBuilder();
    foreach (var imagePath in images)
    {
        string pageText = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.Append(pageText);
    }
    return allText.ToString();
}
finally
{
    ocr.StopEngine();
}
// Also: clean up temp image files
// Asprise PDF workaround — external library required to render PDF pages
var images = ExternalPdfLibrary.RenderPages("invoice.pdf");

Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    var allText = new System.Text.StringBuilder();
    foreach (var imagePath in images)
    {
        string pageText = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.Append(pageText);
    }
    return allText.ToString();
}
finally
{
    ocr.StopEngine();
}
// Also: clean up temp image files
Imports System.Text

' Asprise PDF workaround — external library required to render PDF pages
Dim images = ExternalPdfLibrary.RenderPages("invoice.pdf")

Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    Dim allText As New StringBuilder()
    For Each imagePath In images
        Dim pageText As String = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        allText.Append(pageText)
    Next
    Return allText.ToString()
Finally
    ocr.StopEngine()
End Try
' Also: clean up temp image files
$vbLabelText   $csharpLabel

Dieser Ansatz fügt eine PDF-Rendering-Abhängigkeit hinzu (typischerweise iText, PDFSharp oder ein kommerzieller Renderer), erfordert die Verwaltung temporärer Dateien und verliert PDF-Metadaten und -Struktur, die ein nativer PDF-Reader beibehalten würde. Passwortgeschützte PDF-Dateien erfordern eine dritte Komponente.

IronOCR-Ansatz

IronOCR liest PDF-Dateien direkt ein. Die OcrInput.LoadPdf() Methode verarbeitet das Rendering intern, einschließlich mehrseitiger Dokumente und passwortgeschützter Dateien:

//IronOCR— native PDF input, no external rendering library
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// Password-protected PDFs — same API, one parameter
using var secureInput = new OcrInput();
secureInput.LoadPdf("confidential.pdf", Password: "secret");
var secureResult = new IronTesseract().Read(secureInput);

// Generate searchable PDF from a scanned document
var scanResult = new IronTesseract().Read("scanned-contract.pdf");
scanResult.SaveAsSearchablePdf("searchable-contract.pdf");
//IronOCR— native PDF input, no external rendering library
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// Password-protected PDFs — same API, one parameter
using var secureInput = new OcrInput();
secureInput.LoadPdf("confidential.pdf", Password: "secret");
var secureResult = new IronTesseract().Read(secureInput);

// Generate searchable PDF from a scanned document
var scanResult = new IronTesseract().Read("scanned-contract.pdf");
scanResult.SaveAsSearchablePdf("searchable-contract.pdf");
Imports IronOcr

' IronOCR— native PDF input, no external rendering library
Using input As New OcrInput()
    input.LoadPdf("invoice.pdf")
    Dim result = New IronTesseract().Read(input)
    Console.WriteLine(result.Text)
End Using

' Password-protected PDFs — same API, one parameter
Using secureInput As New OcrInput()
    secureInput.LoadPdf("confidential.pdf", Password:="secret")
    Dim secureResult = New IronTesseract().Read(secureInput)
End Using

' Generate searchable PDF from a scanned document
Dim scanResult = New IronTesseract().Read("scanned-contract.pdf")
scanResult.SaveAsSearchablePdf("searchable-contract.pdf")
$vbLabelText   $csharpLabel

Der PDF-OCR-Leitfaden behandelt die Auswahl von Seitenbereichen, den Umgang mit gemischten PDF-Typen und die Ausgabe durchsuchbarer PDF-Dateien für Archivierungsworkflows.

API-Mapping-Referenz

Asprise OCR IronOCR-Äquivalent
Ocr.SetUp() Nicht erforderlich
new Ocr() new IronTesseract()
ocr.StartEngine("eng", Ocr.SPEED_FAST) Nicht erforderlich (Engine initialisiert sich bei der ersten Verwendung)
ocr.Recognize(path, type, format) ocr.Read(path)
Ocr.RECOGNIZE_TYPE_TEXT Standardverhalten
Ocr.RECOGNIZE_TYPE_BARCODE ocr.Configuration.ReadBarCodes = true
Ocr.RECOGNIZE_TYPE_ALL ocr.Configuration.ReadBarCodes = true
Ocr.OUTPUT_FORMAT_PLAINTEXT result.Text
Ocr.OUTPUT_FORMAT_XML result.Words / strukturiertes Ergebnis
Ocr.OUTPUT_FORMAT_PDF result.SaveAsSearchablePdf()
Ocr.SPEED_FASTEST ocr.Configuration Geschwindigkeits-Einstellungen
Ocr.SPEED_FAST Standardkonfiguration
Ocr.SPEED_SLOW Konfiguration für höhere Genauigkeit
ocr.StopEngine() Nicht erforderlich (using übernimmt die Bereinigung)
Sprach-String "eng+fra" ocr.Language = OCRLanguage.English; ocr.AddSecondaryLanguage(OcrLanguage.French)
Manuelle try/finally-Bereinigung using var input = new OcrInput()
Rückgabewert der Fehlerzeichenfolge Standard .NETAusnahmen

Wenn Teams einen Wechsel von Asprise zu IronOCR in Betracht ziehen

Der Produktionsbereitschaftsblocker

Die Thread-Beschränkung stellt für die meisten produktiven .NET-Workloads ein schwerwiegendes Hindernis dar. Ein Team entwickelt während der Entwicklung eine OCR-Funktion mit Asprise Lite – die Single-Thread-Tests laufen durch, alles funktioniert. Dann wird die Funktion in eine Staging-Umgebung hinter einer .NETCore-API ausgeliefert, es gehen gleichzeitige Testanfragen ein, und die Anwendung löst entweder Fehler aus oder läuft in einem technisch nicht konformen Zustand. Die Lösung besteht entweder in einem Upgrade auf Enterprise (mit den damit verbundenen Kosten und dem entsprechenden Vertriebsengagement) oder im Austausch der Bibliothek. Teams, die diesen Punkt während der Staging-Phase und nicht erst in der Produktion erreichen, können sich glücklich schätzen; Diejenigen, die dies erst nach der Markteinführung bemerken, stehen vor einer dringenderen Migration.IronOCR beseitigt diese gesamte Problemklasse — die $999 Lite Lizenz unterstützt die Verarbeitung gleichzeitiger Anfragen, Batch-Parallelität, Windows-Dienste und Cloud-Funktionen ohne Einschränkung.

Die Komplexitätssteuer bei der Bereitstellung

Teams, die in modernen Bereitstellungsumgebungen arbeiten – Docker-Container, Linux-VMs, Kubernetes-Pods – zahlen bei Asprise laufende Wartungskosten, die bei reinen NuGet-Paketen nicht anfallen. Jeder Container-Image-Build muss die richtige native Binärdatei für die Zielarchitektur enthalten. Jede CI/CD-Pipeline, die auf mehrere Plattformen abzielt, muss plattformspezifische Dateieinbindungen handhaben. Eine fehlende native Bibliothek auf einem Linux-Produktionscontainer ist ein Laufzeitfehler, kein Fehler bei der Erstellung. Teams, die Stunden damit verbracht haben, eine in einen 64-Bit-Prozess geladene 32-Bit-DLL zu debuggen, wissen genau, wie hoch die Kosten sind. Die ausschließlich über NuGet erfolgende Bereitstellung von IronOCR verhindert diese Art von Bereitstellungsfehlern vollständig.

Das Problem mit der Java-Dokumentation

Teams, die .NET-Anwendungen entwickeln, benötigen C#-Beispiele, keine Java-Beispiele. Die primäre Dokumentation, API Referenzen und Community-Ressourcen von Asprise richten sich an Java-Entwickler. Ein .NET-Entwickler, der die Asprise-Dokumentation liest, übersetzt Java-Syntax, Java-Paketkonventionen und Java-spezifische Muster in C#-Entsprechungen – und manchmal ist die Übersetzung nicht direkt, da der .NET-Wrapper nicht jede Java-seitige Funktion offenlegt. Die Dokumentation, Tutorials und Code-Beispiele von IronOCR sind für C#-Entwickler verfasst. Das Tutorial zum Lesen von Text aus Bildern und der vollständige Tutorial-Hub bieten funktionierende C#-Beispiele für jede Funktion ohne zusätzlichen Übersetzungsaufwand.

Die Lücke in der PDF-Pipeline

Teams, die gescannte Dokumente, Rechnungen, Verträge oder Formulare im PDF-Format verarbeiten, können Asprise nicht verwenden, ohne eine PDF-Rendering-Bibliothek zu ihrem Abhängigkeitsgraphen hinzuzufügen. Diese Rendering-Bibliothek bringt eigene Lizenzierungsaspekte, Wartungsaufwand und potenzielle Inkompatibilitäten mit sich. Für Teams, die OCR und PDF in einem einzigen Stack benötigen, bietet IronOCR beides nativ. Die Möglichkeit, aus gescannten Vorlagen durchsuchbare PDF-Dateien zu erstellen – eine häufige Anforderung für Archivierungs- und Compliance-Workflows – findet in Asprise in keiner Lizenzstufe eine Entsprechung.

Die Lücke in der Sprachabdeckung

Asprise unterstützt über 20 OCR-Sprachen.IronOCR unterstützt über 125 Module, die jeweils als eigenständiges NuGet-Paket installiert werden können. Teams, die Dokumente in Arabisch, Hindi, Thai oder einer der Dutzenden anderen Sprachen bearbeiten, die von IronOCR, aber nicht von Asprise unterstützt werden, haben über Asprise keinen Zugang zu mehrsprachiger Unterstützung. Der Leitfaden für mehrere Sprachen behandelt die Installation und Kombination von Sprachpaketen, einschließlich der gleichzeitigen Erkennung über mehrere Schriftsysteme hinweg.

Gemeinsame Überlegungen zur Migration

Ersetzen des Engine-Lebenszyklus-Codes

Die größte mechanische Änderung bei der Migration besteht darin, das Asprise-Engine-Lebenszyklusmuster zu entfernen und es durch direkte IronTesseract Instanziierung zu ersetzen. Jeder Vorkommen der SetUp() / StartEngine() / Recognize() / StopEngine() Sequenz wird ein einziger Read() Aufruf:

// Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();
}

// After:IronOCR(1 line)
return new IronTesseract().Read(imagePath).Text;
// Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();
}

// After:IronOCR(1 line)
return new IronTesseract().Read(imagePath).Text;
' Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    Dim text As String = ocr.Recognize( _
        imagePath, _
        Ocr.RECOGNIZE_TYPE_TEXT, _
        Ocr.OUTPUT_FORMAT_PLAINTEXT)
    Return text
Finally
    ocr.StopEngine()
End Try

' After: IronOCR (1 line)
Return New IronTesseract().Read(imagePath).Text
$vbLabelText   $csharpLabel

Für leistungsempfindlichen Code, der viele Dokumente sequenziell verarbeitet, verwenden Sie die IronTesseract Instanz wieder, anstatt bei jedem Aufruf eine neue zu erstellen — die Initialisierung der Engine trägt Overhead, und eine einzelne Instanz, die sequenziell verwendet wird, ist effizienter als eine, die pro Dokument erstellt und entsorgt wird.

Ersetzen von stringbasierten Sprachcodes

Asprise verwendet String-Parameter zur Sprachauswahl ("eng", "fra", "eng+fra").IronOCR verwendet ein stark typisiertes OcrLanguage Enum mit einer sekundären Sprachen-API. Der Leitfaden für mehrere Sprachen enthält die verfügbaren Sprachkennungen und die jeweils erforderlichen NuGet-Pakete:

// Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST);

// After:IronOCR strongly-typed language enum
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
var result = ocr.Read(imagePath);
// Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST);

// After:IronOCR strongly-typed language enum
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
var result = ocr.Read(imagePath);
Imports IronOcr

' Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST)

' After: IronOCR strongly-typed language enum
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.French)
Dim result = ocr.Read(imagePath)
$vbLabelText   $csharpLabel

Ersetzen von Fehler-String-Prüfungen

Asprise gibt null oder eine Zeichenfolge mit einem Fehlerpräfix zurück, wenn die Erkennung fehlschlägt.IronOCR löst .NET-Ausnahmen aus. Ersetzen Sie Null- und String-Präfix-Prüfungen durch standardisierte try/catch Blöcke. Dies gleicht die OCR-Fehlerbehandlung an das übrige .NET-Ausnahmebehandlungsmodell an und ermöglicht den Zugriff auf vollständige Stack-Traces und Ausnahmetyp-Hierarchien anstelle von geparsten Fehlerzeichenfolgen.

Parallelverarbeitung ermöglichen

Nach der Migration können vorhandene foreach Batch-Schleifen zu Parallel.ForEach oder PLINQ umgewandelt werden, ohne dass Lizenzierungsbedenken bestehen. Bei Dokumentenstapeln, die zuvor sequenziell auf Lite/Standard verarbeitet wurden, wirkt sich Parallelität direkt auf den Durchsatz aus. Der Leitfaden zu asynchronem OCR behandelt asynchrone Muster für Webanwendungskontexte, in denen nicht blockierendes OCR der Auslastung des Thread-Pools vorzuziehen ist.

Zusätzliche Funktionen von IronOCR

Über die in diesem Vergleich behandelten Bereiche hinaus bietet IronOCR Funktionen, für die es in Asprise keine Entsprechung gibt:

  • Barcode-Erkennung während der OCR: Aktivieren Sie ocr.Configuration.ReadBarCodes = true, um Barcodes und QR-Codes aus Dokumenten im selben Durchgang wie die Texterkennung zu extrahieren — keine zweite Bibliothek erforderlich.
  • Regionsbasierte OCR: Verwenden Sie CropRectangle, um Text aus bestimmten Bereichen eines Dokuments zu extrahieren, nützlich für Rechnungsüberschriften, Formularfelder und strukturierte Datenzonen.
  • Konfidenzwerte: Greifen Sie auf die Erkennungskonfidenzwerte pro WORD und insgesamt zu, um Extraktionen mit geringer Konfidenz zur manuellen Überprüfung zu markieren.
  • Extraktion strukturierter Daten: Navigieren Sie durch Ergebnisobjekte nach Seite, Absatz, Zeile und WORD, wobei jedes Element Pixelkoordinaten enthält – dies ermöglicht eine layoutbewusste Dokumentenanalyse, die über die Ausgabe von reinem Text hinausgeht.
  • hOCR-Export: Export der Erkennungsergebnisse im hOCR-Format zur Integration in nachgelagerte Dokumentenverarbeitungswerkzeuge.
  • Spezialisierte Dokumentenerkennung: Speziell entwickelte Workflows für Reisepässe, MICR-Schecks, Kfz-Kennzeichen und Handschriften, die über die allgemeine Tesseract-Erkennung hinausgehen.
  • Fortschrittsverfolgung: Abonnieren Sie Fortschrittsereignisse während lang andauernder Batch-Vorgänge für UI-Feedback und Überwachung.

.NET-Kompatibilität und Zukunftsfähigkeit

IronOCR zielt auf .NETStandard 2.0 ab, das .NETFramework 4.6.1+, .NETCore 2.0+ sowie alle Versionen von .NET5 bis .NET9 und darüber hinaus abdeckt. Die Bibliothek erhält regelmäßige Updates, die auf die .NET-Release-Zyklen abgestimmt sind, und wird unter Windows x64, Windows x86, Linuxx64, macOS, Docker, Azure App Service und AWS Lambda getestet. Die .NET-Kompatibilität von Asprise ist durch sein natives Binärmodell eingeschränkt – neue Plattformziele (ARM64, WASM) erfordern neue native Builds von Asprise Inc., und aufgrund der Java-First-Release-Rhythmus können Updates für die .NET-Plattform hinterherhinken. Für Teams, die derzeit auf .NET8 und .NET9 setzen und planen, 2026 auf .NET10 umzusteigen, bietet die verwaltete NuGet-Architektur von IronOCR einen unkomplizierten Kompatibilitätspfad ohne Probleme mit nativen Binärdateien.

Abschluss

Asprise OCR ist eine Java-OCR-Bibliothek mit einem .NET-Wrapper. Der Java-Hintergrund ist nicht zufällig – er bestimmt das Bereitstellungsmodell (plattformspezifische native DLLs), den API-Stil (C-artige Lebenszyklusmethoden mit ganzzahligen Konstanten), die Dokumentationssprache (Java-Beispiele, die übersetzt werden müssen) und die Threading-Einschränkungen (LITE/STANDARD single-threaded gemäß Lizenzvertrag). Für Java-Teams, die zufällig ein .NET-Projekt haben, macht die sprachübergreifende Positionierung von Asprise durchaus Sinn. Für .NET-Teams, die Produktionssysteme entwickeln, führen genau diese Eigenschaften in jeder Phase zu Reibungsverlusten.

Der Einschränkung bezüglich Threading kommt besondere Bedeutung zu. Die beiden günstigsten Asprise-Tarife – die den Großteil der Teams abdecken, die das Produkt evaluieren – verbieten die Ausführung in mehreren Threads und Prozessen. Jede ASP.NET Core Web-API, jeder Windows-Dienst mit einer Warteschlange, jede Azure-Funktion, die gleichzeitigen Trigger verarbeitet: Dies sind Standard-.NET-Produktionsmuster, und alle erfordern ENTERPRISE-Lizenzierung von Asprise. Die $999 Lite Lizenz von IronOCR deckt alle ohne Einschränkung ab.

Die Komplexität der Bereitstellung ist der zweite praktische Aspekt. Teams, die Docker-Container, Linux-Builds oder plattformübergreifende CI/CD-Pipelines ausführen, müssen mit Asprise plattformspezifische native Binärdateien verwalten. Diese Fehler — DllNotFoundException, BadImageFormatException — treten zur Laufzeit auf der Zielinfrastruktur auf, nicht zur Build-Zeit.IronOCR wird über das standardmäßige NuGet-Paketmanagement bereitgestellt, und der Paket-Auswahlmechanismus verwaltet plattformsspezifische Binärdateien intern. Die Bereitstellungsoberfläche ist eine einzelne NuGet-Referenz.

Für .NET-Teams, die eine neue OCR-Integration starten, ist der Ausgangspunkt klar: ein einzelner dotnet add package IronOcr, eine einzeilige Lizenzschlüsselzuweisung und new IronTesseract().Read("document.jpg").Text für das erste Ergebnis. Keine Engine-Initialisierung, keine native Binärquellensuche, keine Threading-Lizenzprüfung.

Hinweis:Asprise OCR, PDFSharp, Tesseract und iText sind eingetragene Marken ihrer jeweiligen Eigentümer. Diese Seite ist nicht verbunden, anerkannt oder gesponsert von Asprise, Google, empira Software GmbH oder 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.

Häufig gestellte Fragen

Was ist Asprise OCR SDK?

Asprise OCR SDK ist eine OCR-Lösung, die von Entwicklern und Unternehmen verwendet wird, um Text aus Bildern und Dokumenten zu extrahieren. Es ist eine von mehreren OCR-Optionen, die neben IronOCR for .NET Application Development evaluiert wurden.

Wie ist IronOCR im Vergleich zu Asprise OCR SDK for .NET-Entwicklern?

IronOCR ist eine NuGet-native OCR-Bibliothek für .NET, die IronTesseract als Kern-Engine verwendet. Im Vergleich zum Asprise OCR SDK bietet es eine einfachere Bereitstellung (keine SDK-Installationsprogramme), Pauschalpreise und eine saubere C#-API ohne COM-Interop oder Cloud-Abhängigkeiten.

Ist IronOCR einfacher einzurichten als Asprise OCR SDK?

IronOCR wird über ein einziges NuGet-Paket installiert. Es gibt keine SDK-Installationsprogramme, keine Lizenzdateien, die kopiert werden müssen, keine COM-Komponenten, die registriert werden müssen, und keine separaten Laufzeit-Binärdateien, die verwaltet werden müssen. Die gesamte OCR-Engine ist in diesem Paket enthalten.

Welche Genauigkeitsunterschiede gibt es zwischen Asprise OCR SDK und IronOCR?

IronOCR erreicht eine hohe Erkennungsgenauigkeit für Standardgeschäftsdokumente, Rechnungen, Quittungen und gescannte Formulare. Bei stark degradierten Dokumenten oder ungewöhnlichen Skripten variiert die Genauigkeit je nach Qualität der Quelle. IronOCR enthält Bildvorverarbeitungsfilter zur Verbesserung der Erkennung bei Eingaben von geringer Qualität.

Unterstützt IronOCR die PDF-Textextraktion?

Ja, IronOCR extrahiert Text sowohl aus nativen PDF-Dateien als auch aus gescannten PDF-Bildern in einem einzigen Aufruf. Es unterstützt auch mehrseitige TIFF-Dateien, Bilder und Streams. Bei gescannten PDFs wird die OCR seitenweise mit seitenweisen Ergebnisobjekten angewendet.

Wie ist die Lizenzierung von Asprise OCR SDK im Vergleich zu IronOCR?

IronOCR verwendet eine unbefristete Pauschallizenz, bei der keine Gebühren pro Seite oder pro Scan anfallen. Unternehmen, die große Dokumentenmengen verarbeiten, zahlen unabhängig vom Volumen die gleichen Lizenzkosten. Einzelheiten und Volumenpreise finden Sie auf der IronOCR-Lizenzierungsseite.

Welche Sprachen unterstützt IronOCR?

IronOCR unterstützt 127 Sprachen über separate NuGet-Sprachpakete. Das Hinzufügen einer Sprache erfordert einen einzigen Befehl 'dotnet add package IronOcr.Languages.{Language}'. Es ist keine manuelle Dateiablage oder Pfadkonfiguration erforderlich.

Wie installiere ich IronOCR in einem .NET -Projekt?

Installation über NuGet: 'Install-Package IronOcr' in der Paketmanager-Konsole oder 'dotnet add package IronOcr' in der CLI. Zusätzliche Sprachpakete werden auf die gleiche Weise installiert. Es ist kein natives SDK-Installationsprogramm erforderlich.

Ist IronOCR im Gegensatz zu Asprise OCR für Docker und containerisierte Implementierungen geeignet?

Ja, IronOCR funktioniert in Docker-Containern über sein NuGet-Paket. Der Lizenzschlüssel wird über eine Umgebungsvariable festgelegt. Für die OCR-Engine selbst sind keine Lizenzdateien, SDK-Pfade oder Volume-Mounts erforderlich.

Kann ich IronOCR im Vergleich zu Asprise OCR vor dem Kauf ausprobieren?

Ja. Der IronOCR-Testmodus verarbeitet Dokumente und liefert OCR-Ergebnisse mit einem Wasserzeichen als Overlay auf der Ausgabe. Sie können die Genauigkeit an Ihren eigenen Dokumenten überprüfen, bevor Sie eine Lizenz erwerben.

Unterstützt IronOCR neben der Textextraktion auch das Lesen von Barcodes?

IronOCR konzentriert sich auf die Textextraktion und OCR. Für das Lesen von Barcodes bietet Iron Software IronBarcode als Begleitbibliothek an. Beide sind einzeln oder als Teil des Iron Suite-Pakets erhältlich.

Ist es einfach, von Asprise OCR SDK zu IronOCR zu migrieren?

Die Migration von Asprise OCR SDK zu IronOCR umfasst in der Regel das Ersetzen von Initialisierungssequenzen durch IronTesseract-Instanziierung, das Entfernen des COM-Lifecycle-Managements und die Aktualisierung von API-Aufrufen. Die meisten Migrationen reduzieren die Komplexität des Codes erheblich.

Kannaopat Udonpant
Software Ingenieur
Bevor er Software-Ingenieur wurde, absolvierte Kannapat ein PhD in Umweltressourcen an der Hokkaido University in Japan. Während seines Studiums wurde Kannapat auch Mitglied des Vehicle Robotics Laboratory, das Teil der Fakultät für Bioproduktionstechnik ist. Im Jahr 2022 nutzte er seine C#-Kenntnisse, um dem Engineering-Team von Iron Software ...
Weiterlesen

Iron-Support-Team

Wir sind 24 Stunden am Tag, 5 Tage die Woche online.
Chat
E-Mail
Rufen Sie mich an