Zum Fußzeileninhalt springen
MIT ANDEREN KOMPONENTEN VERGLEICHEN

IronOCR vs. Iris OCR: Welche OCR-Lösung sollten Entwicklerteams wählen?

Azure Computer Visions Read API kostet $1,00 pro 1.000 Transaktionen, erfordert ein Azure-Abonnement zur Bereitstellung einer Cognitive Services-Ressource und zwingt jeden OCR-Aufruf durch einen dreistufigen asynchronen Ablauf: Serialisieren Sie Ihr Dokument zu BinaryData, rufen Sie AnalyzeAsync auf und durchlaufen Sie dann verschachtelte Blöcke und Linien, um den Text zu rekonstruieren. Das ist der minimale praktikable Weg – und jede Seite eines mehrseitigen PDFs zählt als separate Transaktion. IronOCR reduziert all das auf einen einzigen synchronen Methodenaufruf, läuft vollständig innerhalb Ihrer Infrastruktur und hat keine Abrechnung pro Transaktion.

Azure Computer Visionverstehen

Azure Computer Vision ist Microsofts Cloud-basierter kognitiver Dienst, der OCR durch zwei primäre APIs bereitstellt: die Image Analysis API (unter Verwendung von ImageAnalysisClient mit VisualFeatures.Read) für Bilder und Azure Form Recognizer's DocumentAnalysisClient für PDFs. Beide sind auf REST-basierte Dienste in Azure-Rechenzentren gestützt, auf die über die Azure.AI.Vision.ImageAnalysis und Azure.AI.FormRecognizer.DocumentAnalysis NuGet-Pakete zugegriffen wird.

Wichtigste architektonische Merkmale:

  • Immer Cloud-basiert : Jeder OCR-Vorgang überträgt Dokumentdaten über HTTPS an von Microsoft verwaltete Server. Es gibt keinen lokalen Verarbeitungsmodus.
  • Voraussetzung für die Anmeldung : Teams müssen ein Azure-Konto erstellen, eine Cognitive Services-Ressource bereitstellen, eine Endpunkt-URL abrufen und einen API-Schlüssel generieren, bevor sie auch nur eine Zeile OCR-Code schreiben können.
  • Abrechnung pro Seite : Die Read API berechnet die Kosten pro Bild oder pro PDF-Seite. Eine 50-seitige PDF-Datei entspricht 50 Transaktionen. Die Preisgestaltung beginnt bei 1,00 US-Dollar pro 1.000 Transaktionen für die erste Million, sinkt dann auf 0,60 US-Dollar und schließlich auf 0,40 US-Dollar bei höheren Volumina.
  • Obergrenze des kostenlosen Kontingents : 5.000 Transaktionen pro Monat im kostenlosen Kontingent – ​​ausreichend für Prototypen, nicht für Produktionslasten.
  • Geteilter Dienst für PDFs: Die grundlegende Bild-OCR verwendet ImageAnalysisClient. Vollständige PDF-Verarbeitung erfordert einen separaten Dienst – Form Recognizers DocumentAnalysisClient – mit eigenem Endpunkt und Konfiguration.
  • Ausschließlich asynchrones Design : Alle Read-API-Aufrufe sind asynchron. Lokale OCR kann Ergebnisse synchron zurückgeben; Cloud-Rundreisen sind nicht möglich. Jede aufrufende Methode in der Kette muss async sein.
  • Ratenbegrenzungen : Die S1-Stufe ist auf 10 Transaktionen pro Sekunde begrenzt. Für die Verarbeitung großer Datenmengen im Batch-Verfahren sind entweder Warteschlangenlogik oder eine Aufrüstung der Verarbeitungsebene erforderlich.
  • Fehleranfälligkeit : Der Produktionscode muss HTTP 429-Ratenbegrenzungsantworten, 5xx-Azure-Dienstfehler, Netzwerk-Timeouts, Authentifizierungsfehler und die Verfügbarkeit von Endpunkten verarbeiten können – jede dieser Situationen erfordert eine separate Wiederholungslogik.

Das asynchrone Abfragemuster

Die Asynchronitätsanforderung der Read-API hat strukturelle Konsequenzen für den Code. Die Bildanalyse mit AnalyzeAsync liefert sofort Ergebnisse, erfordert jedoch await; Die PDF-Verarbeitung über Form Recognizer erfordert WaitUntil.Completed, um zu blockieren, bis die Operation abgeschlossen ist, oder ein benutzerdefiniertes Abfragen mit UpdateStatusAsync für echtes asynchrones Verhalten. Die Ergebnishierarchie erfordert dann das Durchlaufen von Blöcken, Zeilen und Wörtern mittels verschachtelter Schleifen:

// Azure Computer Vision: image OCR
// Requires: Azure subscription + Cognitive Services resource + endpoint + API key
using Azure;
using Azure.AI.Vision.ImageAnalysis;

public class AzureOcrService
{
    private readonly ImageAnalysisClient _client;

    public AzureOcrService(string endpoint, string apiKey)
    {
        // Endpoint and key provisioned in Azure portal
        _client = new ImageAnalysisClient(
            new Uri(endpoint),
            new AzureKeyCredential(apiKey));
    }

    public async Task<string> ExtractTextAsync(string imagePath)
    {
        // Document is uploaded to Microsoft Azure
        using var stream = File.OpenRead(imagePath);
        var imageData = BinaryData.FromStream(stream);

        var result = await _client.AnalyzeAsync(
            imageData,
            VisualFeatures.Read);

        var text = new StringBuilder();
        foreach (var block in result.Value.Read.Blocks)
        {
            foreach (var line in block.Lines)
            {
                text.AppendLine(line.Text);
            }
        }

        return text.ToString();
    }
}
// Azure Computer Vision: image OCR
// Requires: Azure subscription + Cognitive Services resource + endpoint + API key
using Azure;
using Azure.AI.Vision.ImageAnalysis;

public class AzureOcrService
{
    private readonly ImageAnalysisClient _client;

    public AzureOcrService(string endpoint, string apiKey)
    {
        // Endpoint and key provisioned in Azure portal
        _client = new ImageAnalysisClient(
            new Uri(endpoint),
            new AzureKeyCredential(apiKey));
    }

    public async Task<string> ExtractTextAsync(string imagePath)
    {
        // Document is uploaded to Microsoft Azure
        using var stream = File.OpenRead(imagePath);
        var imageData = BinaryData.FromStream(stream);

        var result = await _client.AnalyzeAsync(
            imageData,
            VisualFeatures.Read);

        var text = new StringBuilder();
        foreach (var block in result.Value.Read.Blocks)
        {
            foreach (var line in block.Lines)
            {
                text.AppendLine(line.Text);
            }
        }

        return text.ToString();
    }
}
Imports Azure
Imports Azure.AI.Vision.ImageAnalysis
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks

Public Class AzureOcrService
    Private ReadOnly _client As ImageAnalysisClient

    Public Sub New(endpoint As String, apiKey As String)
        ' Endpoint and key provisioned in Azure portal
        _client = New ImageAnalysisClient(
            New Uri(endpoint),
            New AzureKeyCredential(apiKey))
    End Sub

    Public Async Function ExtractTextAsync(imagePath As String) As Task(Of String)
        ' Document is uploaded to Microsoft Azure
        Using stream = File.OpenRead(imagePath)
            Dim imageData = BinaryData.FromStream(stream)

            Dim result = Await _client.AnalyzeAsync(
                imageData,
                VisualFeatures.Read)

            Dim text = New StringBuilder()
            For Each block In result.Value.Read.Blocks
                For Each line In block.Lines
                    text.AppendLine(line.Text)
                Next
            Next

            Return text.ToString()
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Die PDF-Verarbeitung erhöht die Komplexität weiter – ein separater DocumentAnalysisClient mit eigenem Endpunkt, AnalyzeDocumentAsync mit WaitUntil.Completed, und eine andere Ergebnisform unter Verwendung von result.Pages und page.Lines, die auf .Content anstelle von .Text zugreifen.

IronOCR verstehen

IronOCR ist eine kommerzielle, lokal installierte OCR-Bibliothek für .NET, die als einzelnes NuGet Paket bereitgestellt wird. Es beinhaltet eine optimierte Tesseract 5-Engine mit automatischer Vorverarbeitung, nativer PDF-Unterstützung und einer synchronen API, die keine Cloud-Zugangsdaten, keine Endpunktkonfiguration und keine asynchrone Infrastruktur benötigt.

Hauptmerkmale:

  • Einzelne NuGet-Bereitstellung: dotnet add package IronOcr installiert alles – OCR-Engine, native Binärdateien und Sprachdaten für Englisch. Keine Tessdata-Ordner, keine separaten Downloads nativer Bibliotheken.
  • Perpetual Lizenzierung: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited – einmaliger Kauf, kein Abonnement. Keine Gebühren pro Dokument, unabhängig vom Umfang.
  • Lokale Verarbeitung : Die gesamte OCR-Operation läuft innerhalb Ihres Prozesses. Dokumente verlassen niemals Ihre Infrastruktur.
  • Automatische Vorverarbeitung: Schräglagenkorrektur, Rauschunterdrückung, Kontrast, Binärisierung und Auflösungsverbesserung werden automatisch oder über explizite Filteraufrufe auf OcrInput angewendet.
  • Natives PDF-Unterstützung: IronTesseract.Read("document.pdf") verarbeitet PDFs direkt, einschließlich passwortgeschützter Dateien, ohne separate Dienste oder zusätzliche NuGet-Pakete.
  • 125+ Sprachen: Installiert über separate Sprach-NuGet-Pakete – IronOcr.Languages.French, IronOcr.Languages.ChineseSimplified usw. – ohne manuelles Tessdata-Management.
  • Sicher für Mehrfachzugriffe: IronTesseract ist sicher für gleichzeitige Verwendung. Batch-Workloads können Parallel.ForEach ohne zusätzliche Synchronisierung verwenden.
  • Strukturiertes Output: OcrResult stellt .Pages, .Paragraphs, .Lines, .Words und .Barcodes Sammlungen mit Koordinaten pro Element, Vertrauensbewertungen und Begrenzungsrechtecken bereit.

Funktionsvergleich

Feature Azure Computer Vision IronOCR
Verarbeitungsort Microsoft Azure Cloud Lokal, vor Ort
Preismodell Pro Transaktion (kontaktieren Sie Microsoft für aktuelle Preisinformationen) Unbefristete Lizenz ($999+)
Internet erforderlich Ja, immer Nein
PDF-Unterstützung Über Formularerkennung (separat) Eingebaut, nativ
Komplexität der Einrichtung Azure-Konto + Ressource + Schlüssel NuGet Installation
API-Muster Asynchron (Cloud-E/A) Synchron (lokal)
Ratenbegrenzungen 10 TPS (S1) Nur hardwaregebunden

Detaillierter Funktionsvergleich

Feature Azure Computer Vision IronOCR
Einrichtung und Bereitstellung
NuGet Installation Mehrere Pakete dotnet add package IronOcr
Konfiguration der Anmeldeinformationen Endpunkt-URL + API-Schlüssel Lizenzschlüsselzeichenfolge
Azure-Abonnement erforderlich Ja Nein
Internetanbindung erforderlich Ja, jede Anfrage Nein
Air-Gapped-Bereitstellung Unmöglich Vollständig unterstützt
Docker-Einsatz Erfordert ausgehendes Netzwerk In sich geschlossen
OCR-Fähigkeiten
Bild-OCR Ja (AnalyzeAsync) Ja (Read())
PDF-OCR Über Formularerkennung (Zusatzdienst) Nativ, integriert
Passwortgeschütztes PDF Über Formularerkennung Einzelne Password: Parameter
Mehrseitiges PDF (Abrechnung pro Seite) Ja – jede Seite = 1 Transaktion Keine Kosten pro Seite
Durchsuchbare PDF-Ausgabe Manuelle Konstruktion SaveAsSearchablePdf()
Automatische Vorverarbeitung Beschränkte serverseitige Entzerren, Rauschen entfernen, Kontrast erhöhen, Binarisieren
Barcode-Lesung während der OCR Beschränkt ReadBarCodes = true
Regionsbasierte OCR Nicht direkt (manuell zuschneiden) CropRectangle auf OcrInput
Sprachunterstützung
Wortanzahl 164+ 125+
Sprachinstallation Serviceebene (die Cloud kümmert sich darum) NuGet Sprachpakete
Mehrere gleichzeitige Sprachen Ja Ja (AddSecondaryLanguage)
Ausgabe und Struktur
Klartext Ja Ja
Begrenzungsrahmen pro Wort Polygonbasiert Rechteckbasiert
Vertrauenswerte pro Wort Ja Ja (Skala 0-100)
Strukturierte Hierarchie Blöcke / Linien / Wörter Seiten / Absätze / Zeilen / Wörter
hOCR-Export Nein Ja (SaveAsHocrFile)
Kosten und Einhaltung
Kosten pro Dokument 0,001 US-Dollar pro Seite (Formularerkennung) None
HIPAA-konforme Bereitstellung Komplex (BAA + Wolke) Unkompliziert (nur lokal)
ITAR-Eignung Nicht für kontrollierte Daten Vollständig vor Ort
FedRAMP-Luftspalt Nein Ja
Zuverlässigkeit
Netzwerkausfallmodi Ja None
Fehler bei der Ratenbegrenzung Ja (429 bei 10 TPS) None
Verfügbarkeits-SLA 99,9 % (Azure) Ihre Infrastruktur

Kostenmodell

Der Preisunterschied zwischen Azure Computer Visionund IronOCR wird bei Produktionsvolumina entscheidend. Der Kostenrechner in den Azure-Quelldateien zeigt die Berechnungen präzise an.

Azure-Computer-Vision-Ansatz

Azure berechnet pro Transaktion mit gestaffelten Preisen basierend auf dem Volumen. Konsultieren Sie die Azure Computer Vision Preisseite für aktuelle Tarife. Jede PDF-Seite entspricht einer Transaktion. Ein 10-seitiges PDF entspricht 10 abrechnungsfähigen Anrufen. Eine Freimenge von 5.000 Transaktionen pro Monat ist verfügbar.

// Azure bills per transaction — costs grow with every document processed
// Free tier: 5,000 transactions/month
// Volume tiers apply at higher usage levels
// (Every PDF page multiplies the bill)
// Azure bills per transaction — costs grow with every document processed
// Free tier: 5,000 transactions/month
// Volume tiers apply at higher usage levels
// (Every PDF page multiplies the bill)
' Azure bills per transaction — costs grow with every document processed
' Free tier: 5,000 transactions/month
' Volume tiers apply at higher usage levels
' (Every PDF page multiplies the bill)
$vbLabelText   $csharpLabel

Bei mittleren bis hohen Dokumentvolumina amortisiert sich die unbefristete Lizenz von IronOCR schnell im Vergleich zu den fortlaufenden Azure-Transaktionskosten, nach denen jedes zusätzliche Dokument Ersparnisse bedeutet.

IronOCR-Ansatz

Das Preismodell von IronOCR besteht aus einer einzigen Zahl. Installieren Sie das NuGet Paket, legen Sie den Lizenzschlüssel fest und verarbeiten Sie ein beliebiges Volumen ohne laufenden Zähler:

// Install: dotnet add package IronOcr
// License: one-time, perpetual

IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();

// Process 1 document or 1 million — same cost
foreach (var path in documentPaths)
{
    var result = ocr.Read(path);
    Console.WriteLine($"Processed: {path}");
}

// Multi-page PDFs — no per-page billing
foreach (var path in pdfPaths)
{
    // 1 page or 100 pages, still no extra cost
    var result = ocr.Read(path);
    Console.WriteLine($"{path}: {result.Pages.Length} pages processed");
}
// Install: dotnet add package IronOcr
// License: one-time, perpetual

IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();

// Process 1 document or 1 million — same cost
foreach (var path in documentPaths)
{
    var result = ocr.Read(path);
    Console.WriteLine($"Processed: {path}");
}

// Multi-page PDFs — no per-page billing
foreach (var path in pdfPaths)
{
    // 1 page or 100 pages, still no extra cost
    var result = ocr.Read(path);
    Console.WriteLine($"{path}: {result.Pages.Length} pages processed");
}
' Install: dotnet add package IronOcr
' License: one-time, perpetual

IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

Dim ocr As New IronTesseract()

' Process 1 document or 1 million — same cost
For Each path In documentPaths
    Dim result = ocr.Read(path)
    Console.WriteLine($"Processed: {path}")
Next

' Multi-page PDFs — no per-page billing
For Each path In pdfPaths
    ' 1 page or 100 pages, still no extra cost
    Dim result = ocr.Read(path)
    Console.WriteLine($"{path}: {result.Pages.Length} pages processed")
Next
$vbLabelText   $csharpLabel

Keine Zählerablesung, keine Nutzungsverfolgung, keine Budgetwarnungen erforderlich. Vorhersehbare Kosten vom ersten Tag an. Eine vollständige Schritt-für-Schritt-Anleitung finden Sie im Tutorial "Text aus Bildern lesen" .

Datensouveränität und Offline-Fähigkeit

Die Auswirkungen von Cloud-OCR auf die Einhaltung von Vorschriften sind nicht theoretischer Natur. Jedes von Azure Computer Visionverarbeitete Dokument überschreitet eine Organisationsgrenze. Die Azure README-Datei dokumentiert die betroffenen spezifischen regulatorischen Rahmenbedingungen: HIPAA-pflichtige Einrichtungen, ITAR-Verteidigungsauftragnehmer, CMMC-zertifizierte Organisationen, DSGVO-regulierte europäische Unternehmen und jeglicher Betrieb in einem Air-Gap-Netzwerk.

Azure-Computer-Vision-Ansatz

Selbst bei regionaler Endpunktauswahl und einer unterzeichneten Vereinbarung zur Auftragsverarbeitung ist der Datenfluss festgelegt:

// Azure: data flow for every OCR call
// 1. Your application reads the file
// 2. File is serialized to BinaryData
// 3. HTTPS transmission to Azure data center
// 4. Microsoft infrastructure processes the document
// 5. Result returned over HTTPS
// 6. You parse the result

using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);  // Document in memory

// This call transmits your document to Azure
var result = await _client.AnalyzeAsync(
    imageData,           // Document leaves your network here
    VisualFeatures.Read);
// Azure: data flow for every OCR call
// 1. Your application reads the file
// 2. File is serialized to BinaryData
// 3. HTTPS transmission to Azure data center
// 4. Microsoft infrastructure processes the document
// 5. Result returned over HTTPS
// 6. You parse the result

using var stream = File.OpenRead(imagePath);
var imageData = BinaryData.FromStream(stream);  // Document in memory

// This call transmits your document to Azure
var result = await _client.AnalyzeAsync(
    imageData,           // Document leaves your network here
    VisualFeatures.Read);
Imports System.IO
Imports Azure.AI.FormRecognizer.DocumentAnalysis

' Azure: data flow for every OCR call
' 1. Your application reads the file
' 2. File is serialized to BinaryData
' 3. HTTPS transmission to Azure data center
' 4. Microsoft infrastructure processes the document
' 5. Result returned over HTTPS
' 6. You parse the result

Using stream As FileStream = File.OpenRead(imagePath)
    Dim imageData As BinaryData = BinaryData.FromStream(stream) ' Document in memory

    ' This call transmits your document to Azure
    Dim result = Await _client.AnalyzeAsync(
        imageData,           ' Document leaves your network here
        VisualFeatures.Read)
End Using
$vbLabelText   $csharpLabel

Ein vom Netzwerk isoliertes Netzwerk kann die Endpunkt-URL überhaupt nicht erreichen – Azure Computer Visionverfügt über keinen Offline-Modus. Für Organisationen, die SCIFs, militärische Einrichtungen oder isolierte Verarbeitungsumgebungen betreiben, ist der Dienst unabhängig vom Preis architektonisch inkompatibel.

IronOCR-Ansatz

IronOCR verarbeitet Dokumente innerhalb des Anrufprozesses. Es besteht keine ausgehende Verbindung:

// IronOCR: data never leaves your infrastructure
using IronOcr;

public class OnPremiseOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string imagePath)
    {
        // Runs entirely in-process
        //Neinnetwork call, no serialization to external endpoint
        var result = _ocr.Read(imagePath);
        return result.Text;
    }

    public string ExtractFromPdf(string pdfPath)
    {
        // PDF processed entirely on-premise, native support
        using var input = new OcrInput();
        input.LoadPdf(pdfPath);
        return _ocr.Read(input).Text;
    }

    public string ExtractFromEncryptedPdf(string pdfPath, string password)
    {
        // Encrypted PDFs also stay local
        using var input = new OcrInput();
        input.LoadPdf(pdfPath, Password: password);
        return _ocr.Read(input).Text;
    }
}
// IronOCR: data never leaves your infrastructure
using IronOcr;

public class OnPremiseOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string imagePath)
    {
        // Runs entirely in-process
        //Neinnetwork call, no serialization to external endpoint
        var result = _ocr.Read(imagePath);
        return result.Text;
    }

    public string ExtractFromPdf(string pdfPath)
    {
        // PDF processed entirely on-premise, native support
        using var input = new OcrInput();
        input.LoadPdf(pdfPath);
        return _ocr.Read(input).Text;
    }

    public string ExtractFromEncryptedPdf(string pdfPath, string password)
    {
        // Encrypted PDFs also stay local
        using var input = new OcrInput();
        input.LoadPdf(pdfPath, Password: password);
        return _ocr.Read(input).Text;
    }
}
Imports IronOcr

Public Class OnPremiseOcrService
    Private ReadOnly _ocr As New IronTesseract()

    Public Function ExtractText(imagePath As String) As String
        ' Runs entirely in-process
        ' No network call, no serialization to external endpoint
        Dim result = _ocr.Read(imagePath)
        Return result.Text
    End Function

    Public Function ExtractFromPdf(pdfPath As String) As String
        ' PDF processed entirely on-premise, native support
        Using input As New OcrInput()
            input.LoadPdf(pdfPath)
            Return _ocr.Read(input).Text
        End Using
    End Function

    Public Function ExtractFromEncryptedPdf(pdfPath As String, password As String) As String
        ' Encrypted PDFs also stay local
        Using input As New OcrInput()
            input.LoadPdf(pdfPath, Password:=password)
            Return _ocr.Read(input).Text
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Durch die Docker-Bereitstellung entfallen die Anforderungen an ausgehende Netzwerkverbindungen vollständig.

FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y libgdiplus
WORKDIR /app
COPY --from=build /app/publish .
ENV IRONOCR_LICENSE=your-key
#NeinAzure endpoint, no API key, no outbound network rules needed
ENTRYPOINT ["dotnet", "YourApp.dll"]

Für HIPAA-konforme Einrichtungen, ITAR-konforme Systeme oder FedRAMP-Air-Gap-Szenarien eliminiert IronOCR die gesamte Kategorie des Risikos durch Drittanbieter-Datenverarbeiter. Informationen zum Ausführen von IronOCR innerhalb der Azure-Infrastruktur unter Beibehaltung der Dokumente lokal auf der Compute-Instanz finden Sie im Azure-Bereitstellungsleitfaden , Informationen zur Containerkonfiguration im Docker-Bereitstellungsleitfaden .

Synchrones vs. asynchrones API-Design

Die Azure Read API ist asynchron, da sie nicht synchron sein kann – Cloud-E/A weist Netzwerklatenz auf.IronOCR verarbeitet lokal und kann synchron zurückgeben, was den Aufrufcode vereinfacht, async-Ausbreitung durch den Aufrufstapel eliminiert und die versagensanfälligen Modi des Netzwerk-I/O entfernt.

Azure-Computer-Vision-Ansatz

Jeder Azure OCR-Aufruf erfordert await. Der Produktionscode fügt eine Wiederholungslogik für 429-Ratenbegrenzungsfehler und 5xx-Dienstfehler hinzu. Eine minimale Produktionsimplementierung sieht folgendermaßen aus:

public async Task<string> RobustExtractAsync(string imagePath)
{
    const int maxRetries = 3;
    int attempt = 0;

    while (attempt < maxRetries)
    {
        try
        {
            using var stream = File.OpenRead(imagePath);
            var imageData = BinaryData.FromStream(stream);

            var result = await _client.AnalyzeAsync(
                imageData,
                VisualFeatures.Read);

            return string.Join("\n",
                result.Value.Read.Blocks
                    .SelectMany(b => b.Lines)
                    .Select(l => l.Text));
        }
        catch (RequestFailedException ex) when (ex.Status == 429)
        {
            // Rate limited — Azure caps S1 at 10 TPS
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
        }
        catch (RequestFailedException ex) when (ex.Status >= 500)
        {
            // Azure service error
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(1));
        }
        catch (RequestFailedException ex)
        {
            // Client error — bad credential, invalid endpoint
            throw new Exception($"Azure OCR failed: {ex.Message}", ex);
        }
    }

    throw new Exception("Max retries exceeded for Azure OCR");
}
public async Task<string> RobustExtractAsync(string imagePath)
{
    const int maxRetries = 3;
    int attempt = 0;

    while (attempt < maxRetries)
    {
        try
        {
            using var stream = File.OpenRead(imagePath);
            var imageData = BinaryData.FromStream(stream);

            var result = await _client.AnalyzeAsync(
                imageData,
                VisualFeatures.Read);

            return string.Join("\n",
                result.Value.Read.Blocks
                    .SelectMany(b => b.Lines)
                    .Select(l => l.Text));
        }
        catch (RequestFailedException ex) when (ex.Status == 429)
        {
            // Rate limited — Azure caps S1 at 10 TPS
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)));
        }
        catch (RequestFailedException ex) when (ex.Status >= 500)
        {
            // Azure service error
            attempt++;
            await Task.Delay(TimeSpan.FromSeconds(1));
        }
        catch (RequestFailedException ex)
        {
            // Client error — bad credential, invalid endpoint
            throw new Exception($"Azure OCR failed: {ex.Message}", ex);
        }
    }

    throw new Exception("Max retries exceeded for Azure OCR");
}
Imports System.IO
Imports System.Threading.Tasks

Public Async Function RobustExtractAsync(imagePath As String) As Task(Of String)
    Const maxRetries As Integer = 3
    Dim attempt As Integer = 0

    While attempt < maxRetries
        Try
            Using stream = File.OpenRead(imagePath)
                Dim imageData = BinaryData.FromStream(stream)

                Dim result = Await _client.AnalyzeAsync(
                    imageData,
                    VisualFeatures.Read)

                Return String.Join(vbCrLf,
                    result.Value.Read.Blocks _
                        .SelectMany(Function(b) b.Lines) _
                        .Select(Function(l) l.Text))
            End Using
        Catch ex As RequestFailedException When ex.Status = 429
            ' Rate limited — Azure caps S1 at 10 TPS
            attempt += 1
            Await Task.Delay(TimeSpan.FromSeconds(Math.Pow(2, attempt)))
        Catch ex As RequestFailedException When ex.Status >= 500
            ' Azure service error
            attempt += 1
            Await Task.Delay(TimeSpan.FromSeconds(1))
        Catch ex As RequestFailedException
            ' Client error — bad credential, invalid endpoint
            Throw New Exception($"Azure OCR failed: {ex.Message}", ex)
        End Try
    End While

    Throw New Exception("Max retries exceeded for Azure OCR")
End Function
$vbLabelText   $csharpLabel

Dies ist keine übertriebene Sicherheitsvorkehrung – es ist das absolute Minimum, das für jeden Azure-API-Aufruf in der Produktion erforderlich ist. Ratenbegrenzungen, Dienstausfälle und vorübergehende Fehler sind reale Zustände, mit denen jeder Azure-Nutzer konfrontiert wird.

IronOCR-Ansatz

Die lokale Verarbeitung eliminiert die Angriffsfläche des Netzwerks. Der Umfang der Fehlerbehandlung beschränkt sich auf das Dateisystem und die Eingabevalidierung:

//Neinasync required — local processing returns synchronously
public string ExtractText(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return result.Text;
}

// One line for simple cases
public string OneLineOcr(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// Confidence-aware extraction
public (string Text, double Confidence) ExtractWithConfidence(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return (result.Text, result.Confidence);
}
//Neinasync required — local processing returns synchronously
public string ExtractText(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return result.Text;
}

// One line for simple cases
public string OneLineOcr(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// Confidence-aware extraction
public (string Text, double Confidence) ExtractWithConfidence(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);
    return (result.Text, result.Confidence);
}
Imports IronTesseract

Public Class OcrProcessor

    ' Neinasync required — local processing returns synchronously
    Public Function ExtractText(imagePath As String) As String
        Dim result = New IronTesseract().Read(imagePath)
        Return result.Text
    End Function

    ' One line for simple cases
    Public Function OneLineOcr(imagePath As String) As String
        Return New IronTesseract().Read(imagePath).Text
    End Function

    ' Confidence-aware extraction
    Public Function ExtractWithConfidence(imagePath As String) As (Text As String, Confidence As Double)
        Dim result = New IronTesseract().Read(imagePath)
        Return (result.Text, result.Confidence)
    End Function

End Class
$vbLabelText   $csharpLabel

Kein RequestFailedException, keine erneuten Schleifen, keine Task.WhenAll-Koordination für Batch-Jobs. Wenn Sie asynchron für die Integration mit einer asynchronen Controller-Pipeline benötigen, umschließt Task.Run(() => ocr.Read(path)) den synchronen Anruf, ohne strukturelle Änderungen an der OCR-Logik selbst vorzunehmen. Die IronTesseract-API-Referenz beschreibt die vollständige synchrone Schnittstelle. Für Arbeitslasten, die tatsächlich asynchrone Muster erfordern, bietet IronOCR auch einen speziellen Leitfaden für asynchrone OCR an.

Anmeldeinformationen und Endpunktkonfiguration

Azure Computer Vision erfordert die Bereitstellung der Infrastruktur vor dem ersten Test.IronOCR benötigt eine NuGet Installation und optional einen Lizenzschlüssel.

Azure-Computer-Vision-Ansatz

Die Azure-Einrichtungssequenz vor dem Schreiben von OCR-Code:

  1. Erstellen Sie ein Azure-Konto, falls noch keines existiert.
  2. Navigieren Sie zum Azure-Portal und erstellen Sie eine Cognitive Services-Ressource (oder eine Azure AI Services-Ressource).
  3. Wählen Sie eine Preisstufe und eine Region.
  4. Kopieren Sie die Endpunkt-URL (Format: https://your-resource.cognitiveservices.azure.com/).
  5. Kopieren Sie einen der beiden API-Schlüssel.
  6. Speichern Sie beide Werte sicher – in Umgebungsvariablen, Azure Key Vault oder appsettings.json (nur Nicht-Produktivumgebung).
  7. Installieren Sie Azure.AI.Vision.ImageAnalysis über NuGet.
  8. Initialisieren Sie ImageAnalysisClient mit dem Endpunkt und den Anmeldeinformationen.

Wiederholen Sie für die PDF-Verarbeitung die Schritte 2-8 für eine Form Recognizer Ressource mit einem anderen NuGet-Paket (Azure.AI.FormRecognizer) und einer anderen Client-Klasse (DocumentAnalysisClient).

Die appsettings.json speichert Endpunkt und Schlüssel:

{
  "Azure": {
    "ComputerVision": {
      "Endpoint": "https://your-resource.cognitiveservices.azure.com/",
      "ApiKey": "your-api-key"
    }
  }
}

Das Rotieren von API-Schlüsseln, das Verwalten des Ablaufs von Anmeldeinformationen und das Managen von Endpunkt-URLs in verschiedenen Umgebungen (Entwicklung, Staging, Produktion) sind laufende operative Aufgaben, für die es keine Entsprechung in der lokalen Verarbeitung gibt.

IronOCR-Ansatz

Die IronTesseract-Einrichtungsanleitung reduziert die Einrichtung auf zwei Schritte:

dotnet add package IronOcr
// Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

// Then use immediately — no endpoint, no credential rotation, no portal setup
var text = new IronTesseract().Read("document.jpg").Text;
// Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

// Then use immediately — no endpoint, no credential rotation, no portal setup
var text = new IronTesseract().Read("document.jpg").Text;
Imports System

' Set once at application startup — environment variable recommended
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

' Then use immediately — no endpoint, no credential rotation, no portal setup
Dim text As String = (New IronTesseract()).Read("document.jpg").Text
$vbLabelText   $csharpLabel

Der Lizenzschlüssel ist eine statische Zeichenkette. Es läuft nicht pro Anfrage ab, erfordert keine Rotation und ruft nach der Aktivierung keine Bestätigung beim Server ab. Für die Funktion der OCR-Texterkennung sind in den Bereitstellungsumgebungen keine ausgehenden Firewall-Regeln erforderlich.

API-Mapping-Referenz

Azure Computer Vision IronOCR-Äquivalent
ImageAnalysisClient IronTesseract
new AzureKeyCredential(apiKey) IronOcr.License.LicenseKey = key
client.AnalyzeAsync(data, VisualFeatures.Read) ocr.Read(imagePath)
BinaryData.FromStream(stream) input.LoadImage(stream)
result.Value.Read.Blocks result.Paragraphs
block.Lines result.Lines
line.Text line.Text
line.Words result.Words
word.Confidence word.Confidence (0-100 Skala im Vergleich zu Azures 0-1)
word.BoundingPolygon word.X, word.Y, word.Width, word.Height
DocumentAnalysisClient IronTesseract + OcrInput
AnalyzeDocumentAsync(WaitUntil.Completed, "prebuilt-read", stream) ocr.Read(input) mit input.LoadPdf(path)
operation.Value.Pages result.Pages
page.Lines / line.Content result.Lines / line.Text
RequestFailedException (429 Wiederholungsversuch) Nicht anwendbar – keine Ratenbegrenzungen
RequestFailedException (500 Wiederholungsversuch) Nicht zutreffend – keine Servicefehler

Wenn Teams einen Wechsel von Azure Computer Visionzu IronOCR erwägen

Konformitätsanforderungen Block Cloud-Verarbeitung

Ein Softwareanbieter im Gesundheitswesen, der ein Dokumentenmanagementsystem entwickelt, beginnt mit Azure Computer Vision, da es sich schnell integrieren lässt. Dann kommt der erste Enterprise – ein Krankenhaussystem mit einem HIPAA-Sicherheitsbeauftragten, der zwei Fragen stellt: "Wohin gehen unsere PHI?" und "Können Sie uns die Vereinbarung zur Auftragsverarbeitung (Business Associate Agreement, BAA) für diesen Drittanbieter zeigen?" Azure hat eine BAA, aber die Antwort auf die erste Frage – "Microsoft-Rechenzentren" – löst eine langwierige Sicherheitsprüfung, eine Anfrage nach Microsoft-Prüfberichten und einen Compliance-Zeitplan aus, der den Vertrag verzögert. Der Wechsel zu IronOCR erübrigt sich vollständig. PHI verlässt niemals die Umgebung des Kunden. Der Geltungsbereich der Compliance bleibt auf die eigene Organisation des Kunden beschränkt.

Das steigende Transaktionsvolumen macht eine transaktionsbasierte Preisgestaltung unhaltbar.

Ein Betriebsteam startet eine Pipeline zur Rechnungsverarbeitung mit einer Kapazität von 5.000 Dokumenten pro Monat – und liegt damit problemlos innerhalb des kostenlosen Kontingents von Azure. Mit wachsendem Volumen summieren sich die Kosten pro Transaktion mit jedem verarbeiteten Dokument.IronOCR Professional ($2,999) ist ein einmaliger Kauf ohne Gebühren pro Dokument. Teams, die auch nur ein moderates Mengenwachstum erwarten, erreichen schnell die Gewinnschwelle, danach bedeutet jedes zusätzliche Dokument Einsparungen.

Netzwerklatenz beeinflusst die Verarbeitungs-SLAs

Ein Dokumentenverarbeitungsdienst strebt eine durchgängige Service-Level-Vereinbarung (SLA) von 2 Sekunden an. Azure Computer Visionfügt bei Anrufen innerhalb derselben Region eine Netzwerklatenz von 200-800 ms und bei regionsübergreifenden Bereitstellungen eine Latenz von 500-2000 ms hinzu – noch vor der eigentlichen OCR-Berechnung. Unter Last führt die Begrenzung der Transaktionsrate auf S1 auf 10 TPS zu einer Warteschlangenbildung, was die Latenz weiter erhöht.IronOCR verarbeitet ein einzelnes 300-DPI-Bild in 100–400 ms auf Standardserverhardware ohne Warteschlange, ohne Datenratenbegrenzung und ohne Netzwerk-Hops. Die Service-Level-Vereinbarung (SLA) ist vorhersehbar, da sie ausschließlich von der Hardware und nicht vom Zustand des Azure-Dienstes oder den Netzwerkbedingungen abhängt.

Anforderungen an eine Air-Gapped-Infrastruktur

Rüstungsunternehmen, Geheimdienste und Betreiber kritischer Infrastrukturen führen ihre Arbeitslasten standardmäßig in Netzwerken ohne Internetanbindung aus. Azure Computer Visionist technisch nicht mit diesen Umgebungen kompatibel – der Endpunkt kann nicht erreicht werden. Teams in diesen Sektoren benötigen eine Bibliothek, die als eigenständige Binärdatei bereitgestellt werden kann, ohne ausgehende Verbindung funktioniert und Sicherheitsprüfungen besteht, die die Übertragung von Cloud-Daten ausdrücklich verbieten. Dank der Linux-Bereitstellungs- und Docker-Unterstützung kann IronOCR ohne Modifikationen auch in eingeschränkten Umgebungen eingesetzt werden.

Vereinfachung der Bereitstellung in mehreren Umgebungen

Ein Team, das Entwicklungs-, Staging- und Produktionsumgebungen für eine SaaS-Anwendung verwaltet, verwendet drei Azure Cognitive Services-Ressourcen, drei Sätze von API-Schlüsseln und drei Endpunkt-URLs – jede erfordert sicheren Speicher, Rotationsrichtlinien und umgebungsspezifische Konfiguration. Jede Bereitstellungsumgebung benötigt ausgehenden Netzwerkzugriff auf Azure.IronOCR reduziert die pro-Umgebung Konfiguration auf eine Umgebungsvariable (IRONOCR_LICENSE), beseitigt die Anforderung des Netzwerkzugriffs und entfernt den betrieblichen Aufwand der Anmeldedatenverwaltung über Umgebungen hinweg.

Gemeinsame Überlegungen zur Migration

Asynchrones zu synchronem Muster

Der Azure-Verbrauchscode ist async aus Notwendigkeit.IronOCR benötigt keine asynchrone Verarbeitung, der Übergang erfolgt jedoch mechanisch. Ersetzen Sie async Task<string>-Rückgabetypen durch string, entfernen Sie die await- und async-Schlüsselwörter und löschen Sie die Wiederholungsschleife. Wenn die aufrufende Methode ein ASP.NET Controller oder Dienst ist, der asynchron bleiben muss, umschließen Sie den IronOCR-Aufruf in Task.Run:

// Before: Azure async chain
public async Task<string> ReadTextAsync(string imagePath)
{
    using var stream = File.OpenRead(imagePath);
    var data = BinaryData.FromStream(stream);
    var result = await _client.AnalyzeAsync(data, VisualFeatures.Read);
    return string.Join("\n", result.Value.Read.Blocks
        .SelectMany(b => b.Lines)
        .Select(l => l.Text));
}

// After:IronOCR synchronous
public string ReadText(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// If async signature must be preserved for interface compatibility
public Task<string> ReadTextAsync(string imagePath)
{
    return Task.Run(() => new IronTesseract().Read(imagePath).Text);
}
// Before: Azure async chain
public async Task<string> ReadTextAsync(string imagePath)
{
    using var stream = File.OpenRead(imagePath);
    var data = BinaryData.FromStream(stream);
    var result = await _client.AnalyzeAsync(data, VisualFeatures.Read);
    return string.Join("\n", result.Value.Read.Blocks
        .SelectMany(b => b.Lines)
        .Select(l => l.Text));
}

// After:IronOCR synchronous
public string ReadText(string imagePath)
{
    return new IronTesseract().Read(imagePath).Text;
}

// If async signature must be preserved for interface compatibility
public Task<string> ReadTextAsync(string imagePath)
{
    return Task.Run(() => new IronTesseract().Read(imagePath).Text);
}
Imports System.IO
Imports System.Threading.Tasks
Imports System.Linq

' Before: Azure async chain
Public Async Function ReadTextAsync(imagePath As String) As Task(Of String)
    Using stream = File.OpenRead(imagePath)
        Dim data = BinaryData.FromStream(stream)
        Dim result = Await _client.AnalyzeAsync(data, VisualFeatures.Read)
        Return String.Join(vbLf, result.Value.Read.Blocks _
            .SelectMany(Function(b) b.Lines) _
            .Select(Function(l) l.Text))
    End Using
End Function

' After: IronOCR synchronous
Public Function ReadText(imagePath As String) As String
    Return New IronTesseract().Read(imagePath).Text
End Function

' If async signature must be preserved for interface compatibility
Public Function ReadTextAsync(imagePath As String) As Task(Of String)
    Return Task.Run(Function() New IronTesseract().Read(imagePath).Text)
End Function
$vbLabelText   $csharpLabel

Normalisierung der Konfidenzskala

Azure Computer Vision gibt das Vertrauensniveau von Wörtern als float zwischen 0 und 1 zurück.IronOCR gibt das Vertrauensniveau als double auf einer Skala von 0-100 zurück. Jeglicher Code, der Schwellenwerte für Azure-Konfidenzwerte festlegt, muss angepasst werden:

// Azure: confidence is 0.0 - 1.0
foreach (var word in line.Words)
{
    if (word.Confidence > 0.85f) { /* high confidence */ }
}

// IronOCR: confidence is 0 - 100
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
    if (word.Confidence > 85.0) { /* equivalent threshold */ }
}
Console.WriteLine($"Overall: {result.Confidence}%");
// Azure: confidence is 0.0 - 1.0
foreach (var word in line.Words)
{
    if (word.Confidence > 0.85f) { /* high confidence */ }
}

// IronOCR: confidence is 0 - 100
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
    if (word.Confidence > 85.0) { /* equivalent threshold */ }
}
Console.WriteLine($"Overall: {result.Confidence}%");
Imports IronOcr

' Azure: confidence is 0.0 - 1.0
For Each word In line.Words
    If word.Confidence > 0.85F Then
        ' high confidence
    End If
Next

' IronOCR: confidence is 0 - 100
Dim result = New IronTesseract().Read(imagePath)
For Each word In result.Words
    If word.Confidence > 85.0 Then
        ' equivalent threshold
    End If
Next
Console.WriteLine($"Overall: {result.Confidence}%")
$vbLabelText   $csharpLabel

Die OcrResult-API-Referenzdokumentation umfasst alle Ergebniseigenschaften einschließlich der Konfidenzskala. Die Anleitung zur Berechnung von Konfidenzwerten umfasst die Auswahl von Schwellenwerten und die Interpretation der einzelnen Elemente.

Konsolidierung von PDF-Verarbeitungsdiensten

Azure trennt die Bild-OCR und die PDF-OCR auf zwei separate Dienste mit separaten Clients, NuGet -Paketen und Endpunktkonfigurationen auf. Migration bedeutet, beide Wege in eine einzelne IronTesseract-Instanz zu konsolidieren. Die OcrInput.LoadPdf-Methode akzeptiert einen Dateipfad, einen Stream oder ein Byte-Array mit einem optionalen Password-Parameter für verschlüsselte Dateien – kein zweiter Client erforderlich:

// Before: Two separate Azure clients for images vs PDFs
// Image: ImageAnalysisClient + AnalyzeAsync
// PDF:   DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)

// After: One IronTesseract instance handles both
var ocr = new IronTesseract();

// Image
var imageResult = ocr.Read("document.jpg");

// PDF (same client, same Read method)
using var pdfInput = new OcrInput();
pdfInput.LoadPdf("document.pdf");
var pdfResult = ocr.Read(pdfInput);

// Password-protected PDF
using var encInput = new OcrInput();
encInput.LoadPdf("secured.pdf", Password: "secret");
var encResult = ocr.Read(encInput);

// Durchsuchbare PDF-Ausgabe — no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf");
// Before: Two separate Azure clients for images vs PDFs
// Image: ImageAnalysisClient + AnalyzeAsync
// PDF:   DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)

// After: One IronTesseract instance handles both
var ocr = new IronTesseract();

// Image
var imageResult = ocr.Read("document.jpg");

// PDF (same client, same Read method)
using var pdfInput = new OcrInput();
pdfInput.LoadPdf("document.pdf");
var pdfResult = ocr.Read(pdfInput);

// Password-protected PDF
using var encInput = new OcrInput();
encInput.LoadPdf("secured.pdf", Password: "secret");
var encResult = ocr.Read(encInput);

// Durchsuchbare PDF-Ausgabe — no manual construction
pdfResult.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr

' Before: Two separate Azure clients for images vs PDFs
' Image: ImageAnalysisClient + AnalyzeAsync
' PDF:   DocumentAnalysisClient + AnalyzeDocumentAsync(WaitUntil.Completed, ...)

' After: One IronTesseract instance handles both
Dim ocr As New IronTesseract()

' Image
Dim imageResult = ocr.Read("document.jpg")

' PDF (same client, same Read method)
Using pdfInput As New OcrInput()
    pdfInput.LoadPdf("document.pdf")
    Dim pdfResult = ocr.Read(pdfInput)

    ' Password-protected PDF
    Using encInput As New OcrInput()
        encInput.LoadPdf("secured.pdf", Password:="secret")
        Dim encResult = ocr.Read(encInput)
    End Using

    ' Durchsuchbare PDF-Ausgabe — no manual construction
    pdfResult.SaveAsSearchablePdf("searchable-output.pdf")
End Using
$vbLabelText   $csharpLabel

Die PDF-Eingabeanleitung behandelt die Auswahl von Seitenbereichen, die Stream-Eingabe und die native PDF-Rendering-Pipeline. Informationen zur Bildeingabe finden Sie in der Bildeingabeanleitung .

Strukturierte Datenextraktion ohne Formularerkennung

Teams, die Form Recognizers vorgefertigte Modelle (Rechnungen, Quittungen, Ausweisdokumente) zur Felderfassung verwenden, müssen diese Extraktionslogik in IronOCR mithilfe von regionsbasiertem OCR mit CropRectangle nachbilden. Die Positionsbestimmung erfolgt explizit und nicht modellbasiert:

// Form Recognizer extracted named fields automatically
// IronOCR: define extraction zones for known document layouts
var ocr = new IronTesseract();

// Define regions matching the document template
var vendorZone   = new CropRectangle(0,   0,   300, 100);
var invoiceDate  = new CropRectangle(400, 0,   200, 50);
var totalAmount  = new CropRectangle(400, 500, 200, 100);

string vendor, date, total;

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", vendorZone);
    vendor = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", invoiceDate);
    date = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", totalAmount);
    total = ocr.Read(input).Text.Trim();
}
// Form Recognizer extracted named fields automatically
// IronOCR: define extraction zones for known document layouts
var ocr = new IronTesseract();

// Define regions matching the document template
var vendorZone   = new CropRectangle(0,   0,   300, 100);
var invoiceDate  = new CropRectangle(400, 0,   200, 50);
var totalAmount  = new CropRectangle(400, 500, 200, 100);

string vendor, date, total;

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", vendorZone);
    vendor = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", invoiceDate);
    date = ocr.Read(input).Text.Trim();
}

using (var input = new OcrInput())
{
    input.LoadImage("invoice.jpg", totalAmount);
    total = ocr.Read(input).Text.Trim();
}
Imports IronOcr

' Form Recognizer extracted named fields automatically
' IronOCR: define extraction zones for known document layouts
Dim ocr As New IronTesseract()

' Define regions matching the document template
Dim vendorZone As New CropRectangle(0, 0, 300, 100)
Dim invoiceDate As New CropRectangle(400, 0, 200, 50)
Dim totalAmount As New CropRectangle(400, 500, 200, 100)

Dim vendor As String
Dim [date] As String
Dim total As String

Using input As New OcrInput()
    input.LoadImage("invoice.jpg", vendorZone)
    vendor = ocr.Read(input).Text.Trim()
End Using

Using input As New OcrInput()
    input.LoadImage("invoice.jpg", invoiceDate)
    [date] = ocr.Read(input).Text.Trim()
End Using

Using input As New OcrInput()
    input.LoadImage("invoice.jpg", totalAmount)
    total = ocr.Read(input).Text.Trim()
End Using
$vbLabelText   $csharpLabel

Der regionsbasierte OCR-Leitfaden behandelt die Nutzung von CropRectangle im Detail. Für Workflows, die speziell auf Rechnungen zugeschnitten sind, demonstriert das Tutorial zur Rechnungs-OCR das vollständige Extraktionsmuster.

Zusätzliche Funktionen von IronOCR

Über die oben genannten Vergleichspunkte hinaus bietet IronOCR Funktionen, die Azure Computer Visionüber seine Standard-OCR-API nicht bereitstellt:

  • Verarbeitung gescannter Dokumente : Die gesamte Vorverarbeitungspipeline – Entzerren, Rauschen entfernen, Kontrast anpassen, Binarisieren, Schärfen – wird angewendet, bevor die OCR-Engine das Bild sieht. Dies verbessert die Genauigkeit bei Scans, die von Cloud-APIs leere oder wenig aussagekräftige Ergebnisse liefern.
  • Fortschrittsverfolgung für lange Dokumente : Abonnieren Sie Fortschrittsereignisse während der Verarbeitung mehrseitiger PDFs – nützlich für langlaufende Stapelverarbeitungsaufträge mit UI-Feedback-Anforderungen.
  • Computer Vision Preprocessing : Deep Learning-basierte Vorverarbeitung für anspruchsvolle Dokumente wie Fotos, die unter schrägen Winkeln oder bei ungleichmäßiger Beleuchtung aufgenommen wurden.

.NET-Kompatibilität und Zukunftsfähigkeit

IronOCR unterstützt .NET 8, .NET 9, .NET Standard 2.0 und .NET Framework 4.6.2 bis 4.8 über ein einziges NuGet Paket. Es unterstützt Windows x64, Windows x86, Linux x64, macOS (Intel und Apple Silicon) und ARM64 – und deckt damit die gesamte Bandbreite moderner .NET -Bereitstellungsziele ab, darunter Azure App Service, AWS Lambda, Docker-Container und lokale Linux-Server. Das .NET SDK (Azure.AI.Vision.ImageAnalysis) von Azure Computer Visionsorgt auch für eine moderne .NET-Kompatibilität, aber aufgrund der Cloud-Architektur ist die Kompatibilität mit dem Sprachlaufzeit weniger wichtig als die Kompatibilität mit dem Azure-Endpunkt, der unabhängig vom SDK versioniert und aktualisiert wird.IronOCR liefert Sprach- und Engine-Updates über NuGet aus und sorgt so für ein mit dem Rest des .NET Ökosystems konsistentes Update-Modell.

Abschluss

Azure Computer Vision ist ein leistungsfähiger OCR-Dienst für Teams, die bereits im Azure-Ökosystem tätig sind, deren Dokumente keinen regulatorischen Beschränkungen hinsichtlich der Cloud-Übertragung unterliegen und deren Volumen in den kostenlosen Tarif oder in kostenpflichtige Tarife mit geringem Volumen fällt. Die asynchrone API ist funktional, die Genauigkeit bei Standarddokumenten ist zuverlässig, und die vordefinierten Modelle des Formularerkenners reduzieren den Entwicklungsaufwand für strukturierte Dokumenttypen wie Rechnungen und Quittungen.

Das Kostenmodell ist jedoch nicht skalierbar. Bei 50.000 Dokumenten pro Monat amortisiert sich IronOCR Lite in weniger als zwei Monaten durch die eingesparten Azure-Transaktionsgebühren. Die Abrechnung pro Seite für mehrseitige PDFs treibt die Kosten in die Höhe. Jedes Geschäftsjahr, in dem die Gewinnschwelle überschritten wird, bedeutet einen Geldverlust für Microsoft. Für jedes Team, das mit einem Wachstum von mehr als 10.000 Dokumenten pro Monat rechnet, ist die langfristige Wirtschaftlichkeit einer unbefristeten On-Premise-Lizenz überlegen.

Das Argument der Datensouveränität ist absoluter. Wenn PHI, ITAR-kontrollierte Daten, vertrauliche Kommunikation zwischen Anwalt und Mandant oder Dokumente jeglicher Kategorie, die aus rechtlichen oder vertraglichen Gründen nicht über Organisationsgrenzen hinweg übertragen werden dürfen, durch Ihre OCR-Pipeline fließen, ist Azure Computer Visionvon der Konzeption ausgeschlossen – nicht benachteiligt, sondern ausgeschlossen. Das lokale Verarbeitungsmodell von IronOCR bewältigt diese Arbeitslasten ohne architektonische Kompromisse.

Die Komplexität des asynchronen Pollings stellt einen echten Mehraufwand dar. Die Wiederholungslogik, die Ratenbegrenzungsbehandlung, die Netzwerkfehler-Modi und die Aufteilung zwischen ImageAnalysisClient und DocumentAnalysisClient für Bilder gegenüber PDFs fügen Code hinzu, der keinen OCR-Wert hat – es handelt sich um Cloud-Integrationscode. Die synchronisierten Read() Methode von IronOCR verarbeitet Bilder und PDFs mit identischem Code, keine asynchrone Ausbreitung erforderlich und keine Wiederholungslogik erforderlich. Für Teams, die ihre Entwicklungsressourcen lieber in die Anwendung als in die Cloud-API-Infrastruktur investieren möchten, hat diese Einfachheit im Laufe eines Projekts einen enormen Mehrwert.

Hinweis:Azure Computer Vision und Tesseract sind eingetragene Marken ihrer jeweiligen Inhaber. Diese Website ist nicht mit Google oder Microsoft verbunden, nicht gesponsert oder unterstützt. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.

Häufig gestellte Fragen

Was ist Azure Computer Vision OCR?

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

Wie ist IronOCR im Vergleich zu Azure Computer Vision OCR for .NET-Entwicklern?

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

Ist IronOCR einfacher einzurichten als Azure Computer Vision OCR?

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 bestehen zwischen Azure Computer Vision OCR 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 sieht die Lizenzierung von Azure Computer Vision OCR im Vergleich zu IronOCR aus?

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 Azure Computer Vision für Docker und containerisierte Bereitstellungen 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 Azure Computer Vision 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 Azure Computer Vision OCR zu IronOCR zu migrieren?

Die Migration von Azure Computer Vision OCR 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 Codekomplexität 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