Rechnungs-OCR-API (Entwicklertutorial)
Die Invoice OCR API automatisiert die Extraktion von Rechnungsdaten mithilfe von maschinellem Lernen und eliminiert so manuelle Eingabefehler. Gleichzeitig werden Lieferantendetails, Rechnungsnummern und Preise sowohl aus digitalen als auch aus gescannten Dokumenten präzise erfasst. Dieses Tutorial zeigt, wie man mit IronOCR eine OCR-Lösung für Rechnungen erstellt.
Durch den Einsatz von maschinellem Lernen und Computer Vision wandelt die Invoice OCR-Technologie Rechnungsdaten in Formate um, die für die automatisierte Verarbeitung geeignet sind. Sie lernen, wie Sie häufige Herausforderungen wie Verzögerungen, Kosten und Fehler bei der manuellen Dateneingabe bewältigen und gleichzeitig Lieferanteninformationen, Rechnungsnummern und Preise aus jedem Rechnungsformat präzise extrahieren.
Dieser Artikel verwendet IronOCR , eine führende OCR-API für Rechnungen for .NET Entwickler.
Wie erstellt man eine Invoice OCR API?
- Herunterladen und Installieren der Invoice OCR API
- Erstellen Sie ein neues C#-Projekt in Visual Studio oder öffnen Sie ein bestehendes.
- Load an existing image file using ``OcrInput`` method
- Extrahieren Sie den Text aus dem Bild mit der Methode `Ocr.Read`.
- Print the extracted text in Console using `Console.`WriteLine``
Was ist IronOCR?
IronOCR, entwickelt von Iron Software, bietet umfassende OCR-Tools für Entwickler. Es nutzt maschinelles Lernen und Computer Vision, um Text aus gescannten Dokumenten, Bildern und PDFs zu extrahieren, wodurch eine automatisierte Verarbeitung ermöglicht wird. Die APIs lassen sich nahtlos in verschiedene Sprachen und Plattformen integrieren, wodurch Fehler bei der manuellen Dateneingabe reduziert und die Effizienz gesteigert werden. Die extrahierten Daten fließen direkt in bestehende Systeme zur Analyse und Entscheidungsfindung ein. Funktionen wie Bildvorverarbeitung , Barcode-Erkennung und flexibles Datei-Parsing erhöhen seine Vielseitigkeit. IronOCR ermöglicht es Entwicklern, eine robuste Texterkennung in ihre Anwendungen zu integrieren.
Die Bibliothek unterstützt 125 internationale Sprachen durch spezielle Sprachpakete und ist damit ideal für die globale Rechnungsverarbeitung geeignet. Zu den erweiterten Funktionen gehört Computer Vision zur automatischen Texterkennung , was insbesondere bei Rechnungen mit unterschiedlichen Layouts nützlich ist. Darüber hinaus bietet IronOCR Multithread-Verarbeitungsfunktionen , um die Verarbeitung großer Rechnungsmengen effizient zu bewältigen.
Warum sollte ich IronOCR für die Rechnungsverarbeitung verwenden?
IronOCR bietet überzeugende Vorteile für Anwendungen zur Rechnungsverarbeitung. Erstens bietet es dank seiner optimierten Tesseract 5-Engine , die speziell for .NET Anwendungen entwickelt wurde, eine außergewöhnliche Genauigkeit. Die Bibliothek verarbeitet verschiedene Rechnungsformate, von gescannten Dokumenten bis hin zu PDF-Dateien und sogar Scans mit geringer Qualität .
Integrierte Bildoptimierungsfilter verbessern automatisch die Bildqualität vor der Verarbeitung, was zu einer genaueren Textextraktion führt. Für Rechnungen mit besonderen Anforderungen unterstützt IronOCR das Training benutzerdefinierter Sprachen und ermöglicht so die Optimierung für spezielle Schriftarten oder Formate, die häufig in Ihren Rechnungsarten vorkommen.
Was unterscheidet IronOCR von anderen OCR-Bibliotheken?
IronOCR zeichnet sich durch seine einfache Einzeilen-OCR-Funktion aus und bietet gleichzeitig Funktionen auf Unternehmensebene. Im Gegensatz zu herkömmlichen Tesseract-Implementierungen bietet IronOCR eine verwaltete .NET API, die komplexe Operationen nahtlos abwickelt. Die Bibliothek bietet spezielle Methoden zum Lesen von Dokumenten für verschiedene Dokumenttypen, einschließlich einer speziellen Unterstützung für das Lesen von Tabellen in Dokumenten , was für Rechnungspositionen unerlässlich ist.
Der Filterassistent ermittelt automatisch die besten Vorverarbeitungseinstellungen für Ihre spezifischen Rechnungsbilder und macht so das Rätselraten bei der Optimierung überflüssig. IronOCR bietet außerdem umfassende Debugging-Funktionen , die es Entwicklern ermöglichen, zu visualisieren, was die OCR-Engine sieht, und Extraktionsprobleme effektiv zu beheben.
Welche Voraussetzungen benötige ich?
Bevor Sie mit IronOCR arbeiten, stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind:
- Eine geeignete Entwicklungsumgebung mit einer installierten IDE wie Visual Studio.
- Grundlegendes Verständnis der C#-Programmierung, um Codebeispiele effektiv zu verstehen und anzupassen.
- Die IronOCR Bibliothek wurde über den NuGet Paketmanager oder die Befehlszeile in Ihr Projekt installiert.
Wenn Sie diese Voraussetzungen erfüllen, sind Sie bestens gerüstet, um erfolgreich mit IronOCR zu arbeiten.
IronOCR bietet umfassende Einrichtungsanleitungen für Windows , Linux und macOS . Die Bibliothek unterstützt die Cloud-Bereitstellung mit spezifischen Tutorials für AWS Lambda und Azure Functions .
Welche Version von Visual Studio sollte ich verwenden?
IronOCR unterstützt Visual Studio-Versionen von 2017 bis zu den neuesten Versionen. Für optimale Kompatibilität und Zugriff auf die neuesten C#-Funktionen wird Visual Studio 2019 oder 2022 empfohlen. Die Bibliothek ist vollständig kompatibel mit .NET Framework, .NET Core und .NET 5+ und gewährleistet so Flexibilität in Ihrer Entwicklungsumgebung.
Für die plattformübergreifende Entwicklung eignet sich Visual Studio Code mit der C#-Erweiterung gut. Mobile-Entwickler können die Anleitungen von IronOCR für Android- und iOS -Implementierungen nutzen, wodurch es sich auch für .NET MAUI Anwendungen eignet.
Welche C#-Kenntnisse benötige ich?
Für die grundlegende Implementierung einer OCR-Lösung für Rechnungen reichen mittlere C#-Kenntnisse aus. Sie sollten sich mit Folgendem wohlfühlen:
- Konzepte der objektorientierten Programmierung
- Arbeiten mit Streams und Datei-E/A
- Grundlegende async/await-Muster
- Reguläre Ausdrücke für die Mustererkennung
- Ausnahmebehandlung für robustes Fehlermanagement
Dank des intuitiven API-Designs von IronOCR sind keine tiefgreifenden Fachkenntnisse in Bildverarbeitung oder maschinellem Lernen erforderlich. Die Bibliothek übernimmt komplexe Operationen intern, sodass Sie sich auf die Geschäftslogik konzentrieren können. Anfänger können mit einfachen OCR-Beispielen beginnen.
Wie erstelle ich ein neues Visual Studio-Projekt?
Um mit IronOCR zu beginnen, erstellen Sie zunächst ein neues Visual Studio-Projekt.
Öffnen Sie Visual Studio, gehen Sie zu Dateien, bewegen Sie den Mauszeiger über Neu und klicken Sie auf Projekt.
Neues Projekt
Im neuen Fenster wählen Sie "Konsolenanwendung" und klicken auf "Weiter".
Konsolenanwendung
Ein neues Fenster erscheint. Geben Sie den Projektnamen und den Projektort ein und klicken Sie dann auf Weiter.
Projektkonfiguration
Wählen Sie abschließend das Zielframework aus und klicken Sie auf Erstellen.
Ziel-Framework
Ihr neues Visual Studio-Projekt ist fertig. Lassen Sie uns IronOCR installieren.
Welcher Projekttyp eignet sich am besten für OCR-Anwendungen?
Obwohl dieses Tutorial der Einfachheit halber eine Konsolenanwendung verwendet, unterstützt IronOCR verschiedene Projekttypen:
- Konsolenanwendungen : Ideal für die Stapelverarbeitung oder Kommandozeilen-Tools
- Webanwendungen : Ideal zum Erstellen von APIs oder webbasierten Diensten
- Windows Forms/WPF : Geeignet für Desktop-Anwendungen mit grafischer Benutzeroberfläche
- .NET MAUI Apps : Für plattformübergreifende Lösungen
Für die Verarbeitung großer Datenmengen empfiehlt sich die Implementierung von IronOCR in einer Windows-Dienst- oder Microservices-Architektur. Die Fortschrittsverfolgungsfunktionen der Bibliothek erleichtern die Überwachung von langlaufenden Vorgängen.
Welche .NET Framework Version sollte ich anvisieren?
IronOCR bietet umfassende Kompatibilität mit verschiedenen .NET Versionen . Für neue Projekte empfiehlt sich .NET 6.0 oder höher, um optimale Leistung und die neuesten Funktionen zu gewährleisten. Die Bibliothek bietet eine hervorragende Abwärtskompatibilität:
- .NET Framework 4.6.2+ : Für ältere Enterprise
- .NET Core 3.1 : Langfristige Unterstützung für stabile Bereitstellungen
- .NET 5.0+ : Modernes Framework mit Leistungsverbesserungen
- .NET Standard 2.0 : Maximale Kompatibilität über verschiedene Plattformen hinweg
Bei der Bereitstellung in Docker-Containern bietet .NET 6.0 oder höher kleinere Image-Größen und eine bessere Performance. Für Azure Functions werden sowohl .NET 6.0 als auch .NET Framework unterstützt.
Wie installiere ich IronOCR?
Es gibt zwei einfache Methoden zum Herunterladen und Installieren von IronOCR:
- Verwenden des Visual Studio NuGet -Paketmanagers
- Verwenden der Visual Studio-Befehlszeile
Wann sollte ich den NuGet Paketmanager und wann die Befehlszeile verwenden?
Wählen Sie je nach Ihrem Arbeitsablauf zwischen der grafischen Benutzeroberfläche des NuGet Paketmanagers und der Befehlszeile:
Die Benutzeroberfläche des NuGet Paketmanagers funktioniert am besten, wenn:
- Sie sind neu bei NuGet -Paketen
- Sie möchten die IronOCR Sprachpakete durchsuchen
- Sie bevorzugen eine visuelle Bestätigung
- Sie verwalten mehrere Pakete
Die Befehlszeile (Paket-Manager-Konsole) ist besonders geeignet, wenn:
- Sie sind mit Befehlsschnittstellen vertraut.
- Sie folgen vorgegebenen Bereitstellungsskripten Sie benötigen schnell bestimmte Versionen.
- Sie verwenden erweiterte Installationsoptionen
Beide Methoden erzielen identische Ergebnisse – wählen Sie je nach Komfort und Anforderungen.
Welche zusätzlichen Sprachpakete benötige ich möglicherweise?
IronOCR unterstützt 125 internationale Sprachen durch spezielle Pakete. Für die Rechnungsverarbeitung sollten Sie Folgendes beachten:
- Branchenspezifische Pakete : Finanzsprachepaket für Finanzdokumente
- Regionale Sprachen : Basierend auf den Rechnungsquellen (Spanisch, Französisch, Deutsch)
- Mehrsprachige Unterstützung : Für Rechnungen mit mehreren Sprachen
- Benutzerdefinierte Sprachen : Für spezielle Schriftarten oder benutzerdefinierte Trainingsdaten
Sprachpakete werden zusammen mit dem Hauptpaket IronOCR installiert und verbessern die Genauigkeit bei nicht-englischen Texten erheblich.
Verwendung des Visual Studio NuGet Package Manager
Binden Sie IronOCR mithilfe des Visual Studio NuGet Paketmanagers in Ihr C#-Projekt ein.
Navigieren Sie zu Tools > NuGet Paket-Manager > NuGet Pakete für die Projektmappe verwalten
NuGet-Paket-Manager
Suchen Sie nach IronOCR und installieren Sie das Paket in Ihrem Projekt.
IronOCR-Paket im NuGet-Paket-Manager UI auswählen
Installieren Sie zusätzliche Sprachpakete mit der gleichen Methode.
Verwendung der Visual Studio Befehlszeile
- Gehen Sie in Visual Studio zu Tools > NuGet-Paket-Manager > Paket-Manager-Konsole
-
Geben Sie diesen Befehl in der Paket-Manager-Konsole ein:
Install-Package IronOcr
Paket-Manager-Konsole
Das Paket wird heruntergeladen und in Ihrem aktuellen Projekt installiert und ist sofort einsatzbereit.
Wie extrahiere ich Daten aus Rechnungen mit IronOCR?
Mit IronOCR lassen sich Rechnungsdaten ganz einfach und mit nur wenigen Codezeilen extrahieren. Dies ersetzt die manuelle Dateneingabe und optimiert Ihren Arbeitsablauf.
Hier ist eine Beispielrechnung zur Textextraktion:
Die Musterrechnung
Lassen Sie uns alle Daten aus dieser Rechnung extrahieren:
using IronOcr;
using System;
// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();
// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:
- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability
!___PROTECTED_LINK_53___
**Invoice Parser**
### How Do I Handle Different Invoice Formats?
Invoice formats vary between vendors, but IronOCR provides flexible solutions:
1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___
For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.
### What Are Common Extraction Patterns for Invoice Data?
Invoice data follows recognizable patterns extractable using regular expressions with OCR results:
```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;
public class `InvoiceDataExtractor`
{
private readonly `IronTesseract` ocr;
public `InvoiceDataExtractor`()
{
ocr = new `IronTesseract`();
// Configure for optimal invoice reading
`ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
`ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
}
public `InvoiceData` `ExtractInvoiceData`(string imagePath)
{
var invoiceData = new `InvoiceData`();
using (var input = new `OcrInput`(imagePath))
{
// Apply filters for better accuracy
input.`EnhanceResolution`(300);
`input.Sharpen`();
var result = `ocr.Read`(input);
var text = `result.Text`;
// Extract invoice number
invoiceData.`InvoiceNumber` = `ExtractPattern`(text,
@"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");
// Extract dates
invoiceData.`InvoiceDate` = `ExtractDate`(text,
@"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
invoiceData.`DueDate` = `ExtractDate`(text,
@"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
// Extract amounts
`invoiceData.Total` = `ExtractAmount`(text,
@"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
`invoiceData.Tax` = `ExtractAmount`(text,
@"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");
// Extract vendor information
invoiceData.`VendorName` = `ExtractVendorName`(text);
// Extract line items using table detection
invoiceData.`LineItems` = `ExtractLineItems`(result);
// Extract any barcodes found
if (`result.Barcodes`.Length > 0)
{
invoiceData.`BarcodeValues` = new List<string>();
foreach (var barcode in `result.Barcodes`)
{
invoiceData.`BarcodeValues`.Add(`barcode.Value`);
}
}
}
return invoiceData;
}
private string `ExtractPattern`(string text, string pattern)
{
var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
return `match.Success` ? `match.Value` : `string.Empty`;
}
private `DateTime`? `ExtractDate`(string text, string pattern)
{
var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
if (`match.Success` && `match.Groups`.Count > 1)
{
if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
return date;
}
return null;
}
private decimal `ExtractAmount`(string text, string pattern)
{
var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
if (`match.Success` && `match.Groups`.Count > 1)
{
var amountStr = `match.Groups`[1].Value.Replace(",", "");
if (decimal.`TryParse`(amountStr, out decimal amount))
return amount;
}
return 0;
}
private string `ExtractVendorName`(string text)
{
// Usually the vendor name appears in the first few lines
var lines = `text.Split`('\n');
if (`lines.Length` > 0)
{
// Simple heuristic: first non-empty line that's not a common header
foreach (var line in lines)
{
var trimmed = `line.Trim`();
if (!string.`IsNullOrEmpty`(trimmed) &&
!trimmed.`ToLower`().Contains("invoice") &&
`trimmed.Length` > 3)
{
return trimmed;
}
}
}
return `string.Empty`;
}
private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
{
var lineItems = new List<`LineItem`>();
// Use IronOCR's table detection capabilities
if (`result.Tables` != null && `result.Tables`.Count > 0)
{
foreach (var table in `result.Tables`)
{
// Process each row as a potential line item
for (int i = 1; i < table.`RowCount`; i++) // Skip header row
{
var item = new `LineItem`
{
Description = table[i, 0]?.Text ?? "",
Quantity = `ParseQuantity`(table[i, 1]?.Text),
`UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
Total = `ParseAmount`(table[i, 3]?.Text)
};
if (!string.`IsNullOrEmpty`(`item.Description`))
`lineItems.Add`(item);
}
}
}
return lineItems;
}
private int `ParseQuantity`(string text)
{
if (string.`IsNullOrEmpty`(text)) return 0;
var cleaned = Regex.Replace(text, @"[^\d]", "");
return int.`TryParse`(cleaned, out int qty) ? qty : 0;
}
private decimal `ParseAmount`(string text)
{
if (string.`IsNullOrEmpty`(text)) return 0;
var cleaned = Regex.Replace(text, @"[^\d.]", "");
return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
}
}
// Data classes for structured invoice information
public class `InvoiceData`
{
public string `InvoiceNumber` { get; set; }
public `DateTime`? `InvoiceDate` { get; set; }
public `DateTime`? `DueDate` { get; set; }
public string `VendorName` { get; set; }
public decimal Total { get; set; }
public decimal Tax { get; set; }
public List<`LineItem`> `LineItems` { get; set; }
public List<string> `BarcodeValues` { get; set; }
}
public class `LineItem`
{
public string Description { get; set; }
public int Quantity { get; set; }
public decimal `UnitPrice` { get; set; }
public decimal Total { get; set; }
}
using IronOcr;
using System;
// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();
// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:
- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability
!___PROTECTED_LINK_53___
**Invoice Parser**
### How Do I Handle Different Invoice Formats?
Invoice formats vary between vendors, but IronOCR provides flexible solutions:
1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___
For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.
### What Are Common Extraction Patterns for Invoice Data?
Invoice data follows recognizable patterns extractable using regular expressions with OCR results:
```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;
public class `InvoiceDataExtractor`
{
private readonly `IronTesseract` ocr;
public `InvoiceDataExtractor`()
{
ocr = new `IronTesseract`();
// Configure for optimal invoice reading
`ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
`ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
}
public `InvoiceData` `ExtractInvoiceData`(string imagePath)
{
var invoiceData = new `InvoiceData`();
using (var input = new `OcrInput`(imagePath))
{
// Apply filters for better accuracy
input.`EnhanceResolution`(300);
`input.Sharpen`();
var result = `ocr.Read`(input);
var text = `result.Text`;
// Extract invoice number
invoiceData.`InvoiceNumber` = `ExtractPattern`(text,
@"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");
// Extract dates
invoiceData.`InvoiceDate` = `ExtractDate`(text,
@"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
invoiceData.`DueDate` = `ExtractDate`(text,
@"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
// Extract amounts
`invoiceData.Total` = `ExtractAmount`(text,
@"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
`invoiceData.Tax` = `ExtractAmount`(text,
@"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");
// Extract vendor information
invoiceData.`VendorName` = `ExtractVendorName`(text);
// Extract line items using table detection
invoiceData.`LineItems` = `ExtractLineItems`(result);
// Extract any barcodes found
if (`result.Barcodes`.Length > 0)
{
invoiceData.`BarcodeValues` = new List<string>();
foreach (var barcode in `result.Barcodes`)
{
invoiceData.`BarcodeValues`.Add(`barcode.Value`);
}
}
}
return invoiceData;
}
private string `ExtractPattern`(string text, string pattern)
{
var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
return `match.Success` ? `match.Value` : `string.Empty`;
}
private `DateTime`? `ExtractDate`(string text, string pattern)
{
var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
if (`match.Success` && `match.Groups`.Count > 1)
{
if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
return date;
}
return null;
}
private decimal `ExtractAmount`(string text, string pattern)
{
var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
if (`match.Success` && `match.Groups`.Count > 1)
{
var amountStr = `match.Groups`[1].Value.Replace(",", "");
if (decimal.`TryParse`(amountStr, out decimal amount))
return amount;
}
return 0;
}
private string `ExtractVendorName`(string text)
{
// Usually the vendor name appears in the first few lines
var lines = `text.Split`('\n');
if (`lines.Length` > 0)
{
// Simple heuristic: first non-empty line that's not a common header
foreach (var line in lines)
{
var trimmed = `line.Trim`();
if (!string.`IsNullOrEmpty`(trimmed) &&
!trimmed.`ToLower`().Contains("invoice") &&
`trimmed.Length` > 3)
{
return trimmed;
}
}
}
return `string.Empty`;
}
private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
{
var lineItems = new List<`LineItem`>();
// Use IronOCR's table detection capabilities
if (`result.Tables` != null && `result.Tables`.Count > 0)
{
foreach (var table in `result.Tables`)
{
// Process each row as a potential line item
for (int i = 1; i < table.`RowCount`; i++) // Skip header row
{
var item = new `LineItem`
{
Description = table[i, 0]?.Text ?? "",
Quantity = `ParseQuantity`(table[i, 1]?.Text),
`UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
Total = `ParseAmount`(table[i, 3]?.Text)
};
if (!string.`IsNullOrEmpty`(`item.Description`))
`lineItems.Add`(item);
}
}
}
return lineItems;
}
private int `ParseQuantity`(string text)
{
if (string.`IsNullOrEmpty`(text)) return 0;
var cleaned = Regex.Replace(text, @"[^\d]", "");
return int.`TryParse`(cleaned, out int qty) ? qty : 0;
}
private decimal `ParseAmount`(string text)
{
if (string.`IsNullOrEmpty`(text)) return 0;
var cleaned = Regex.Replace(text, @"[^\d.]", "");
return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
}
}
// Data classes for structured invoice information
public class `InvoiceData`
{
public string `InvoiceNumber` { get; set; }
public `DateTime`? `InvoiceDate` { get; set; }
public `DateTime`? `DueDate` { get; set; }
public string `VendorName` { get; set; }
public decimal Total { get; set; }
public decimal Tax { get; set; }
public List<`LineItem`> `LineItems` { get; set; }
public List<string> `BarcodeValues` { get; set; }
}
public class `LineItem`
{
public string Description { get; set; }
public int Quantity { get; set; }
public decimal `UnitPrice` { get; set; }
public decimal Total { get; set; }
}
Imports IronOcr
Imports System
Imports System.Text.RegularExpressions
Imports System.Collections.Generic
Public Class InvoiceDataExtractor
Private ReadOnly ocr As IronTesseract
Public Sub New()
ocr = New IronTesseract()
' Configure for optimal invoice reading
ocr.Configuration.ReadBarcodes = True ' Many invoices include barcodes
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
End Sub
Public Function ExtractInvoiceData(imagePath As String) As InvoiceData
Dim invoiceData As New InvoiceData()
Using input As New OcrInput(imagePath)
' Apply filters for better accuracy
input.EnhanceResolution(300)
input.Sharpen()
Dim result = ocr.Read(input)
Dim text = result.Text
' Extract invoice number
invoiceData.InvoiceNumber = ExtractPattern(text, "INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)")
' Extract dates
invoiceData.InvoiceDate = ExtractDate(text, "Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})")
invoiceData.DueDate = ExtractDate(text, "Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})")
' Extract amounts
invoiceData.Total = ExtractAmount(text, "Total\s*:?\s*\$?\s*([\d,]+\.?\d*)")
invoiceData.Tax = ExtractAmount(text, "Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)")
' Extract vendor information
invoiceData.VendorName = ExtractVendorName(text)
' Extract line items using table detection
invoiceData.LineItems = ExtractLineItems(result)
' Extract any barcodes found
If result.Barcodes.Length > 0 Then
invoiceData.BarcodeValues = New List(Of String)()
For Each barcode In result.Barcodes
invoiceData.BarcodeValues.Add(barcode.Value)
Next
End If
End Using
Return invoiceData
End Function
Private Function ExtractPattern(text As String, pattern As String) As String
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
Return If(match.Success, match.Value, String.Empty)
End Function
Private Function ExtractDate(text As String, pattern As String) As DateTime?
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
If match.Success AndAlso match.Groups.Count > 1 Then
Dim dateValue As DateTime
If DateTime.TryParse(match.Groups(1).Value, dateValue) Then
Return dateValue
End If
End If
Return Nothing
End Function
Private Function ExtractAmount(text As String, pattern As String) As Decimal
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
If match.Success AndAlso match.Groups.Count > 1 Then
Dim amountStr = match.Groups(1).Value.Replace(",", "")
Dim amount As Decimal
If Decimal.TryParse(amountStr, amount) Then
Return amount
End If
End If
Return 0
End Function
Private Function ExtractVendorName(text As String) As String
' Usually the vendor name appears in the first few lines
Dim lines = text.Split(ControlChars.Lf)
If lines.Length > 0 Then
' Simple heuristic: first non-empty line that's not a common header
For Each line In lines
Dim trimmed = line.Trim()
If Not String.IsNullOrEmpty(trimmed) AndAlso
Not trimmed.ToLower().Contains("invoice") AndAlso
trimmed.Length > 3 Then
Return trimmed
End If
Next
End If
Return String.Empty
End Function
Private Function ExtractLineItems(result As OcrResult) As List(Of LineItem)
Dim lineItems As New List(Of LineItem)()
' Use IronOCR's table detection capabilities
If result.Tables IsNot Nothing AndAlso result.Tables.Count > 0 Then
For Each table In result.Tables
' Process each row as a potential line item
For i As Integer = 1 To table.RowCount - 1 ' Skip header row
Dim item As New LineItem With {
.Description = If(table(i, 0)?.Text, ""),
.Quantity = ParseQuantity(table(i, 1)?.Text),
.UnitPrice = ParseAmount(table(i, 2)?.Text),
.Total = ParseAmount(table(i, 3)?.Text)
}
If Not String.IsNullOrEmpty(item.Description) Then
lineItems.Add(item)
End If
Next
Next
End If
Return lineItems
End Function
Private Function ParseQuantity(text As String) As Integer
If String.IsNullOrEmpty(text) Then Return 0
Dim cleaned = Regex.Replace(text, "[^\d]", "")
Dim qty As Integer
Return If(Integer.TryParse(cleaned, qty), qty, 0)
End Function
Private Function ParseAmount(text As String) As Decimal
If String.IsNullOrEmpty(text) Then Return 0
Dim cleaned = Regex.Replace(text, "[^\d.]", "")
Dim amt As Decimal
Return If(Decimal.TryParse(cleaned, amt), amt, 0)
End Function
End Class
' Data classes for structured invoice information
Public Class InvoiceData
Public Property InvoiceNumber As String
Public Property InvoiceDate As DateTime?
Public Property DueDate As DateTime?
Public Property VendorName As String
Public Property Total As Decimal
Public Property Tax As Decimal
Public Property LineItems As List(Of LineItem)
Public Property BarcodeValues As List(Of String)
End Class
Public Class LineItem
Public Property Description As String
Public Property Quantity As Integer
Public Property UnitPrice As Decimal
Public Property Total As Decimal
End Class
Rechnungsverarbeitung zur Extraktion spezifischer Daten aus Rechnungen
Mit diesem Code können Sie spezifische Rechnungsdaten wie Kundenrechnungsnummern extrahieren:
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();
// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
// Perform OCR on the image
var result = `ocr.Read`(input);
// Define a regular expression pattern for the invoice number
var linePattern = @"INV\/\d{4}\/\d{5}";
// Match the pattern in the extracted text
var lineMatch = Regex.Match(`result.Text`, linePattern);
// Check if the pattern matches any part of the text
if (`lineMatch.Success`)
{
// If a match is found, print the invoice number
var lineValue = `lineMatch.Value`;
Console.`WriteLine`("Customer Invoice number: " + lineValue);
}
}
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();
// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
// Perform OCR on the image
var result = `ocr.Read`(input);
// Define a regular expression pattern for the invoice number
var linePattern = @"INV\/\d{4}\/\d{5}";
// Match the pattern in the extracted text
var lineMatch = Regex.Match(`result.Text`, linePattern);
// Check if the pattern matches any part of the text
if (`lineMatch.Success`)
{
// If a match is found, print the invoice number
var lineValue = `lineMatch.Value`;
Console.`WriteLine`("Customer Invoice number: " + lineValue);
}
}
Imports IronOcr
Imports System
Imports System.Text.RegularExpressions
' Initialize a new instance of the IronTesseract class
Dim ocr As New IronTesseract()
' Use the OcrInput object to load the image file
Using input As New OcrInput("r2.png")
' Perform OCR on the image
Dim result = ocr.Read(input)
' Define a regular expression pattern for the invoice number
Dim linePattern As String = "INV/\d{4}/\d{5}"
' Match the pattern in the extracted text
Dim lineMatch As Match = Regex.Match(result.Text, linePattern)
' Check if the pattern matches any part of the text
If lineMatch.Success Then
' If a match is found, print the invoice number
Dim lineValue As String = lineMatch.Value
Console.WriteLine("Customer Invoice number: " & lineValue)
End If
End Using
Rechnung Scanning
Für komplexe Extraktionsszenarien verwenden Sie spezielle OCR-Konfigurationen , um die Verarbeitung für Ihre Rechnungstypen zu optimieren. Die Klasse "OcrResult" liefert detaillierte Informationen zu jedem erkannten Element, einschließlich Koordinaten und Konfidenzwerten zur Validierung.
Was sind die wichtigsten Vorteile der Invoice OCR API?
Die Invoice OCR API von IronOCR revolutioniert die Rechnungsverarbeitung durch maschinelles Lernen und Computer Vision. Diese Technologie wandelt Rechnungstexte in maschinenlesbare Formate um und vereinfacht so die Datenextraktion für Analyse, Integration und Prozessverbesserung. Es bietet eine robuste Automatisierung für die Rechnungsverarbeitung, verbessert die Genauigkeit und optimiert Arbeitsabläufe wie die Kreditorenbuchhaltung.
IronOCR bietet außergewöhnliche Genauigkeit durch optimierte Tesseract-Ergebnisse ohne zusätzliche Konfiguration. Sie unterstützt Multipage frame TIFF, PDF-Dateien und alle gängigen Bildformate. Das Auslesen von Barcodes aus Bildern eröffnet eine weitere Extraktionsdimension.
Wichtigste Vorteile der Rechnungsverarbeitung:
- Zeitersparnis : Stunden auf Sekunden reduzieren
- Genauigkeit : Minimieren Sie Fehler durch Konfidenzbewertung.
- Skalierbarkeit : Tausende Prozesse mit Multithreading verarbeiten
- Integration : Export in durchsuchbare PDFs oder strukturierte Formate
- Kostenreduzierung : Niedrigere Betriebskosten
Die flexible Bereitstellung der Bibliothek ermöglicht die Integration in bestehende Systeme – lokal, in der Cloud oder hybrid. Dank der Unterstützung für Docker , Azure und AWS skaliert IronOCR mit Ihren Bedürfnissen.
Produktionsumgebungen profitieren von den Lizenzierungsoptionen von IronOCR, einschließlich dediziertem Support und regelmäßigen Updates . Die Fehlerbehebungsleitfäden und der technische Support der Bibliothek gewährleisten eine reibungslose Implementierung.
Besuchen Sie die Homepage für weitere Informationen zu IronOCR. Weitere Anleitungen zur Rechnungs-OCR finden Sie in diesem ausführlichen Leitfaden zur Rechnungs-OCR . Um mehr über die Verwendung von Computer Vision für Rechnungsfelder zu erfahren, sehen Sie sich dieses Computer-Vision-Tutorial an.
Häufig gestellte Fragen
Wie kann ich die Rechnungsdatenverarbeitung mit OCR automatisieren?
Sie können IronOCR verwenden, um die Rechnungsdatenverarbeitung zu automatisieren, indem Sie seine maschinellen Lernalgorithmen nutzen. IronOCR extrahiert Details wie Lieferanteninformationen, Rechnungsnummern und Preise aus digitalen und gescannten Rechnungen, wodurch manuelle Eingabefehler reduziert und die Effizienz gesteigert wird.
Welche Schritte sind bei der Einrichtung einer Rechnungs-OCR-API beteiligt?
Um eine Rechnungs-OCR-API mit IronOCR einzurichten, beginnen Sie mit dem Herunterladen und Installieren der Bibliothek über den NuGet Package Manager von Visual Studio. Erstellen Sie anschließend ein neues C#-Projekt, integrieren Sie IronOCR und verwenden Sie seine Methoden, um Bilddateien zu laden und zu lesen, um Text zu extrahieren.
Kann IronOCR spezifische Daten wie Rechnungsnummern extrahieren?
Ja, IronOCR kann spezifische Daten wie Rechnungsnummern extrahieren. Es nutzt reguläre Ausdrücke, um Muster im extrahierten Text zu erkennen, sodass Sie spezifische Informationen aus Rechnungen entnehmen können.
Welche Merkmale von IronOCR sind vorteilhaft für die Rechnungsverarbeitung?
IronOCR umfasst Funktionen wie Bildvorverarbeitung, Barcode-Erkennung und Dateiparsing. Diese verbessern seine Fähigkeit, Text aus verschiedenen Rechnungsformaten genau zu extrahieren und zu verarbeiten, was die Datenerfassung und Workflow-Effizienz steigert.
Wie kann die Bildvorverarbeitung die OCR-Ergebnisse verbessern?
Die Bildvorverarbeitung in IronOCR hilft, OCR-Ergebnisse zu verbessern, indem die Bildqualität vor der Textextraktion optimiert wird. Dies beinhaltet Vorgänge wie Kontrasteinstellung und Rauschunterdrückung, die zu einer genaueren Datenerfassung aus Rechnungen führen können.
Ist es möglich, IronOCR für sowohl digitale als auch gescannte Rechnungen zu verwenden?
Ja, IronOCR ist in der Lage, sowohl digitale als auch gescannte Rechnungen zu verarbeiten. Es verwendet fortschrittliche maschinelle Lern- und Computervisionstechniken, um Text aus verschiedenen Formaten und Bildqualitäten genau zu extrahieren.
Wie geht IronOCR mit verschiedenen Seitenformaten und Dateitypen um?
IronOCR unterstützt mehrere Seitenformate und beliebte Bild- und PDF-Dateitypen. Es kann effizient Text aus komplexen Dokumenten extrahieren, was es vielseitig für verschiedene Rechnungsverarbeitungsanwendungen macht.
Wo finden Entwickler Tutorials zur Verwendung von IronOCR?
Entwickler können Tutorials und zusätzliche Ressourcen auf der IronOCR-Website finden. Die Seite bietet eine Vielzahl an Lernmaterialien, einschließlich Anleitungen und Blogbeiträge zur Anwendung von IronOCR in unterschiedlichen Szenarien.



