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 RecognizersDocumentAnalysisClient– 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
asyncsein. - 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
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 IronOcrinstalliert 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
OcrInputangewendet. - 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.ChineseSimplifiedusw. – ohne manuelles Tessdata-Management. - Sicher für Mehrfachzugriffe:
IronTesseractist sicher für gleichzeitige Verwendung. Batch-Workloads könnenParallel.ForEachohne zusätzliche Synchronisierung verwenden. - Strukturiertes Output:
OcrResultstellt.Pages,.Paragraphs,.Lines,.Wordsund.BarcodesSammlungen 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)
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
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
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
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
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
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:
- Erstellen Sie ein Azure-Konto, falls noch keines existiert.
- Navigieren Sie zum Azure-Portal und erstellen Sie eine Cognitive Services-Ressource (oder eine Azure AI Services-Ressource).
- Wählen Sie eine Preisstufe und eine Region.
- Kopieren Sie die Endpunkt-URL (Format:
https://your-resource.cognitiveservices.azure.com/). - Kopieren Sie einen der beiden API-Schlüssel.
- Speichern Sie beide Werte sicher – in Umgebungsvariablen, Azure Key Vault oder
appsettings.json(nur Nicht-Produktivumgebung). - Installieren Sie
Azure.AI.Vision.ImageAnalysisüber NuGet. - Initialisieren Sie
ImageAnalysisClientmit 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
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
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}%")
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
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
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.
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.

