API zum Scannen von Belegen: Daten aus Belegen mit C# und IronOCR extrahieren
Belegscanning-APIs automatisieren die Datenextraktion von Belegen mithilfe von OCR-Technologie, wodurch manuelle Eingabefehler deutlich reduziert und die Verarbeitung beschleunigt wird. Dieser Leitfaden zeigt, wie man mit IronOCR in C# Lieferantennamen, Datum, Artikel, Preise und Summen präzise aus Belegbildern extrahiert, mit integrierter Bildvorverarbeitung und Unterstützung für mehrere Formate.
Warum IronOCR zum Scannen von Belegen wählen?
IronOCR ist eine flexible OCR-Bibliothek , die eine zuverlässige Textextraktion aus gescannten Dokumenten, Bildern und PDFs bietet. Mit fortschrittlichen Algorithmen, Computer Vision und Modellen des maschinellen Lernens gewährleistet IronOCR auch in anspruchsvollen Szenarien eine hohe Genauigkeit. Die Bibliothek unterstützt mehrere Sprachen und Schriftarten und eignet sich daher für globale Anwendungen. Durch die Integration von IronOCR in Ihre Anwendungen können Sie die Dateneingabe und Textanalyse automatisieren und so die Produktivität steigern.
Wie extrahiert IronOCR Text aus Belegbildern?
IronOCR extrahiert Text aus Dokumenten, Fotos, Screenshots und Live-Kamerabildern als JSON-Antworten. Mithilfe ausgefeilter Algorithmen und maschinellem Lernen analysiert IronOCR Bilddaten , erkennt Zeichen und wandelt sie in maschinenlesbaren Text um. Die Bibliothek nutzt die Tesseract 5-Technologie, die durch firmeneigene Verbesserungen für überragende Genauigkeit optimiert wurde.
Warum eignet sich IronOCR hervorragend für die Belegverarbeitung?
IronOCR zeichnet sich durch seine Fähigkeit aus , Scans mit geringer Qualität , unterschiedliche Belegformate und verschiedene Ausrichtungen problemlos zu verarbeiten. Integrierte Bildvorverarbeitungsfilter verbessern automatisch die Bildqualität vor der eigentlichen Verarbeitung und gewährleisten so optimale Ergebnisse auch bei zerknitterten oder verblassten Belegen.
Was benötige ich, um IronOCR zu verwenden?
Bevor Sie mit IronOCR arbeiten, stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind:
Welche Entwicklungsumgebungen werden unterstützt?
Welche Programmierkenntnisse sind erforderlich?
- C#-Kenntnisse : Grundlegende C#-Kenntnisse helfen Ihnen, Codebeispiele anzupassen. IronOCR bietet einfache Beispiele und eine API-Dokumentation .
Welche Softwareabhängigkeiten sind notwendig?
- IronOCR Installation : Installation über den NuGet Paketmanager . Plattformspezifische Abhängigkeiten können erforderlich sein.
Ist ein Lizenzschlüssel erforderlich?
- Lizenzschlüssel (optional) : Kostenlose Testversion verfügbar; Für die Nutzung in Produktionsprozessen ist eine Lizenz erforderlich.
Wie erstelle ich ein neues Visual Studio-Projekt zum Scannen von Belegen?
Wie starte ich ein neues Projekt in Visual Studio?
Öffnen Sie Visual Studio und gehen Sie zu Dateien, klicken Sie dann auf Neu und dann auf Projekt.
Neues Projektbild
Welche Projektvorlage soll ich wählen?
Wählen Sie "Konsolenanwendung" und klicken Sie auf "Weiter". Diese Vorlage eignet sich ideal zum Erlernen von IronOCR vor der Implementierung in Webanwendungen.
Konsolenanwendung
Wie soll ich mein Projekt zur Entwicklung eines Belegscanners nennen?
Geben Sie den Projektnamen und den Projektort ein und klicken Sie dann auf Weiter. Wählen Sie einen aussagekräftigen Namen wie "ReceiptScannerAPI".
Projektkonfiguration
Welche .NET Framework Version soll ich auswählen?
Wählen Sie .NET 5.0 oder höher für optimale Kompatibilität und klicken Sie dann auf Erstellen.
Ziel-Framework
Wie installiere ich IronOCR in meinem Projekt?
Es stehen zwei einfache Installationsmethoden zur Verfügung:
Wie verwende ich die NuGet Paketmanager-Methode?
Gehen 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. Für nicht-englische Belege installieren Sie sprachspezifische Pakete .
IronOCR
Wie installiere ich über die Kommandozeile?
- Gehen Sie zu "Tools" > "NuGet Paket-Manager" > "Paket-Manager-Konsole" .
-
Geben Sie diesen Befehl ein:
Install-Package IronOcr
Package Manager Console
Wie kann ich mit IronOCR schnell Belegdaten extrahieren?
Belegdaten mit nur wenigen Codezeilen extrahieren:
-
Installieren Sie IronOCR mit NuGet Package Manager
PM > Install-Package IronOcr -
Kopieren Sie diesen Codeausschnitt und führen Sie ihn aus.
using IronOcr; using System; var ocr = new IronTesseract(); // Configure for receipt scanning ocr.Configuration.ReadBarCodes = true; ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% "; using (var input = new OcrInput(@"receipt.jpg")) { // Apply automatic image enhancement input.DeNoise(); input.Deskew(); input.EnhanceResolution(225); // Extract text from receipt var result = ocr.Read(input); // Display extracted text and confidence Console.WriteLine($"Extracted Text:\n{result.Text}"); Console.WriteLine($"\nConfidence: {result.Confidence}%"); } -
Bereitstellen zum Testen in Ihrer Live-Umgebung
Beginnen Sie noch heute, IronOCR in Ihrem Projekt zu verwenden, mit einer kostenlosen Testversion
Wie extrahiere ich strukturierte Daten aus Belegbildern?
IronOCR extrahiert Positionen, Preise, Steuern und Summen aus verschiedenen Dokumenttypen. Die Bibliothek unterstützt PDFs , mehrseitige TIFFs und verschiedene Bildformate .
using IronOcr;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class ReceiptScanner
{
static void Main()
{
var ocr = new IronTesseract();
// Configure OCR for optimal receipt reading
ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% ";
ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\\";
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
// Load the image of the receipt
using (var input = new OcrInput(@"r2.png"))
{
// Apply image enhancement filters
input.Deskew(); // Fix image rotation
input.EnhanceResolution(225); // Optimal DPI for receipts
input.DeNoise(); // Remove background noise
input.Sharpen(); // Improve text clarity
// Perform OCR on the input image
var result = ocr.Read(input);
// Regular expression patterns to extract relevant details from the OCR result
var descriptionPattern = @"\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)";
var pricePattern = @"\$\d+(\.\d{2})?";
var datePattern = @"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}";
// Variables to store extracted data
var descriptions = new List<string>();
var unitPrices = new List<decimal>();
var taxes = new List<decimal>();
var amounts = new List<decimal>();
var lines = result.Text.Split('\n');
foreach (var line in lines)
{
// Match each line against the description pattern
var descriptionMatch = Regex.Match(line, descriptionPattern);
if (descriptionMatch.Success)
{
descriptions.Add(descriptionMatch.Groups[1].Value.Trim());
unitPrices.Add(decimal.Parse(descriptionMatch.Groups[2].Value));
// Calculate tax and total amount for each item
var tax = unitPrices[unitPrices.Count - 1] * 0.15m;
taxes.Add(tax);
amounts.Add(unitPrices[unitPrices.Count - 1] + tax);
}
// Extract date if found
var dateMatch = Regex.Match(line, datePattern);
if (dateMatch.Success)
{
Console.WriteLine($"Receipt Date: {dateMatch.Value}");
}
}
// Output the extracted data
for (int i = 0; i < descriptions.Count; i++)
{
Console.WriteLine($"Description: {descriptions[i]}");
Console.WriteLine($"Quantity: 1.00 Units");
Console.WriteLine($"Unit Price: ${unitPrices[i]:0.00}");
Console.WriteLine($"Taxes: ${taxes[i]:0.00}");
Console.WriteLine($"Amount: ${amounts[i]:0.00}");
Console.WriteLine("-----------------------");
}
// Calculate and display totals
var subtotal = unitPrices.Sum();
var totalTax = taxes.Sum();
var grandTotal = amounts.Sum();
Console.WriteLine($"\nSubtotal: ${subtotal:0.00}");
Console.WriteLine($"Total Tax: ${totalTax:0.00}");
Console.WriteLine($"Grand Total: ${grandTotal:0.00}");
}
}
}
using IronOcr;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
class ReceiptScanner
{
static void Main()
{
var ocr = new IronTesseract();
// Configure OCR for optimal receipt reading
ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% ";
ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\\";
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
// Load the image of the receipt
using (var input = new OcrInput(@"r2.png"))
{
// Apply image enhancement filters
input.Deskew(); // Fix image rotation
input.EnhanceResolution(225); // Optimal DPI for receipts
input.DeNoise(); // Remove background noise
input.Sharpen(); // Improve text clarity
// Perform OCR on the input image
var result = ocr.Read(input);
// Regular expression patterns to extract relevant details from the OCR result
var descriptionPattern = @"\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)";
var pricePattern = @"\$\d+(\.\d{2})?";
var datePattern = @"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}";
// Variables to store extracted data
var descriptions = new List<string>();
var unitPrices = new List<decimal>();
var taxes = new List<decimal>();
var amounts = new List<decimal>();
var lines = result.Text.Split('\n');
foreach (var line in lines)
{
// Match each line against the description pattern
var descriptionMatch = Regex.Match(line, descriptionPattern);
if (descriptionMatch.Success)
{
descriptions.Add(descriptionMatch.Groups[1].Value.Trim());
unitPrices.Add(decimal.Parse(descriptionMatch.Groups[2].Value));
// Calculate tax and total amount for each item
var tax = unitPrices[unitPrices.Count - 1] * 0.15m;
taxes.Add(tax);
amounts.Add(unitPrices[unitPrices.Count - 1] + tax);
}
// Extract date if found
var dateMatch = Regex.Match(line, datePattern);
if (dateMatch.Success)
{
Console.WriteLine($"Receipt Date: {dateMatch.Value}");
}
}
// Output the extracted data
for (int i = 0; i < descriptions.Count; i++)
{
Console.WriteLine($"Description: {descriptions[i]}");
Console.WriteLine($"Quantity: 1.00 Units");
Console.WriteLine($"Unit Price: ${unitPrices[i]:0.00}");
Console.WriteLine($"Taxes: ${taxes[i]:0.00}");
Console.WriteLine($"Amount: ${amounts[i]:0.00}");
Console.WriteLine("-----------------------");
}
// Calculate and display totals
var subtotal = unitPrices.Sum();
var totalTax = taxes.Sum();
var grandTotal = amounts.Sum();
Console.WriteLine($"\nSubtotal: ${subtotal:0.00}");
Console.WriteLine($"Total Tax: ${totalTax:0.00}");
Console.WriteLine($"Grand Total: ${grandTotal:0.00}");
}
}
}
Imports IronOcr
Imports System
Imports System.Collections.Generic
Imports System.Text.RegularExpressions
Imports System.Linq
Class ReceiptScanner
Shared Sub Main()
Dim ocr = New IronTesseract()
' Configure OCR for optimal receipt reading
ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% "
ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\"
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
' Load the image of the receipt
Using input = New OcrInput("r2.png")
' Apply image enhancement filters
input.Deskew() ' Fix image rotation
input.EnhanceResolution(225) ' Optimal DPI for receipts
input.DeNoise() ' Remove background noise
input.Sharpen() ' Improve text clarity
' Perform OCR on the input image
Dim result = ocr.Read(input)
' Regular expression patterns to extract relevant details from the OCR result
Dim descriptionPattern = "\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)"
Dim pricePattern = "\$\d+(\.\d{2})?"
Dim datePattern = "\d{1,2}[/-]\d{1,2}[/-]\d{2,4}"
' Variables to store extracted data
Dim descriptions = New List(Of String)()
Dim unitPrices = New List(Of Decimal)()
Dim taxes = New List(Of Decimal)()
Dim amounts = New List(Of Decimal)()
Dim lines = result.Text.Split(ControlChars.Lf)
For Each line In lines
' Match each line against the description pattern
Dim descriptionMatch = Regex.Match(line, descriptionPattern)
If descriptionMatch.Success Then
descriptions.Add(descriptionMatch.Groups(1).Value.Trim())
unitPrices.Add(Decimal.Parse(descriptionMatch.Groups(2).Value))
' Calculate tax and total amount for each item
Dim tax = unitPrices(unitPrices.Count - 1) * 0.15D
taxes.Add(tax)
amounts.Add(unitPrices(unitPrices.Count - 1) + tax)
End If
' Extract date if found
Dim dateMatch = Regex.Match(line, datePattern)
If dateMatch.Success Then
Console.WriteLine($"Receipt Date: {dateMatch.Value}")
End If
Next
' Output the extracted data
For i As Integer = 0 To descriptions.Count - 1
Console.WriteLine($"Description: {descriptions(i)}")
Console.WriteLine("Quantity: 1.00 Units")
Console.WriteLine($"Unit Price: ${unitPrices(i):0.00}")
Console.WriteLine($"Taxes: ${taxes(i):0.00}")
Console.WriteLine($"Amount: ${amounts(i):0.00}")
Console.WriteLine("-----------------------")
Next
' Calculate and display totals
Dim subtotal = unitPrices.Sum()
Dim totalTax = taxes.Sum()
Dim grandTotal = amounts.Sum()
Console.WriteLine(vbCrLf & $"Subtotal: ${subtotal:0.00}")
Console.WriteLine($"Total Tax: ${totalTax:0.00}")
Console.WriteLine($"Grand Total: ${grandTotal:0.00}")
End Using
End Sub
End Class
Welche Techniken verbessern die Genauigkeit beim Scannen von Kassenbons?
Wichtige Techniken für das korrekte Scannen von Belegen:
- Zeichen-Whitelist : Beschränkt die Erkennung auf erwartete Zeichen
- Bildvorverarbeitung : Wendet Entzerrung , Auflösungsverbesserung und Rauschunterdrückung an.
- Mustererkennung : Extrahiert strukturierte Daten mithilfe regulärer Ausdrücke
- Konfidenzbewertung : Validiert Ergebnisse basierend auf der Erkennungssicherheit.
Ausgabe
Wie kann ich den gesamten Inhalt des Kassenbons extrahieren?
Extrahieren Sie den vollständigen Beleginhalt unter Beibehaltung der Formatierung:
using IronOcr;
using System;
using System.Linq;
class WholeReceiptExtractor
{
static void Main()
{
var ocr = new IronTesseract();
// Configure for receipt scanning
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // Use latest engine
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm; // Best accuracy
using (var input = new OcrInput(@"r3.png"))
{
// Apply automatic image correction
input.WithTitle("Receipt Scan");
// Use computer vision to find text regions
var textRegions = input.FindTextRegions();
Console.WriteLine($"Found {textRegions.Count()} text regions");
// Apply optimal filters for receipt processing
input.ApplyOcrInputFilters();
// Perform OCR on the entire receipt
var result = ocr.Read(input);
// Display extracted text
Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===");
Console.WriteLine(result.Text);
// Get detailed results
Console.WriteLine($"\n=== OCR STATISTICS ===");
Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%");
Console.WriteLine($"Pages Processed: {result.Pages.Length}");
Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}");
Console.WriteLine($"Lines Detected: {result.Lines.Length}");
Console.WriteLine($"Words Recognized: {result.Words.Length}");
// Extract any barcodes found
if (result.Barcodes.Any())
{
Console.WriteLine("\n=== BARCODES DETECTED ===");
foreach(var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Type}");
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}");
}
}
// Save as searchable PDF
result.SaveAsSearchablePdf("receipt_searchable.pdf");
Console.WriteLine("\nSearchable PDF saved as: receipt_searchable.pdf");
// Export as hOCR for preservation
result.SaveAsHocrFile("receipt_hocr.html");
Console.WriteLine("hOCR file saved as: receipt_hocr.html");
}
}
}
using IronOcr;
using System;
using System.Linq;
class WholeReceiptExtractor
{
static void Main()
{
var ocr = new IronTesseract();
// Configure for receipt scanning
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // Use latest engine
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm; // Best accuracy
using (var input = new OcrInput(@"r3.png"))
{
// Apply automatic image correction
input.WithTitle("Receipt Scan");
// Use computer vision to find text regions
var textRegions = input.FindTextRegions();
Console.WriteLine($"Found {textRegions.Count()} text regions");
// Apply optimal filters for receipt processing
input.ApplyOcrInputFilters();
// Perform OCR on the entire receipt
var result = ocr.Read(input);
// Display extracted text
Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===");
Console.WriteLine(result.Text);
// Get detailed results
Console.WriteLine($"\n=== OCR STATISTICS ===");
Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%");
Console.WriteLine($"Pages Processed: {result.Pages.Length}");
Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}");
Console.WriteLine($"Lines Detected: {result.Lines.Length}");
Console.WriteLine($"Words Recognized: {result.Words.Length}");
// Extract any barcodes found
if (result.Barcodes.Any())
{
Console.WriteLine("\n=== BARCODES DETECTED ===");
foreach(var barcode in result.Barcodes)
{
Console.WriteLine($"Type: {barcode.Type}");
Console.WriteLine($"Value: {barcode.Value}");
Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}");
}
}
// Save as searchable PDF
result.SaveAsSearchablePdf("receipt_searchable.pdf");
Console.WriteLine("\nSearchable PDF saved as: receipt_searchable.pdf");
// Export as hOCR for preservation
result.SaveAsHocrFile("receipt_hocr.html");
Console.WriteLine("hOCR file saved as: receipt_hocr.html");
}
}
}
Imports IronOcr
Imports System
Imports System.Linq
Class WholeReceiptExtractor
Shared Sub Main()
Dim ocr = New IronTesseract()
' Configure for receipt scanning
ocr.Configuration.ReadBarCodes = True ' Enable barcode detection
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 ' Use latest engine
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm ' Best accuracy
Using input = New OcrInput("r3.png")
' Apply automatic image correction
input.WithTitle("Receipt Scan")
' Use computer vision to find text regions
Dim textRegions = input.FindTextRegions()
Console.WriteLine($"Found {textRegions.Count()} text regions")
' Apply optimal filters for receipt processing
input.ApplyOcrInputFilters()
' Perform OCR on the entire receipt
Dim result = ocr.Read(input)
' Display extracted text
Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===")
Console.WriteLine(result.Text)
' Get detailed results
Console.WriteLine(vbCrLf & "=== OCR STATISTICS ===")
Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%")
Console.WriteLine($"Pages Processed: {result.Pages.Length}")
Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}")
Console.WriteLine($"Lines Detected: {result.Lines.Length}")
Console.WriteLine($"Words Recognized: {result.Words.Length}")
' Extract any barcodes found
If result.Barcodes.Any() Then
Console.WriteLine(vbCrLf & "=== BARCODES DETECTED ===")
For Each barcode In result.Barcodes
Console.WriteLine($"Type: {barcode.Type}")
Console.WriteLine($"Value: {barcode.Value}")
Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}")
Next
End If
' Save as searchable PDF
result.SaveAsSearchablePdf("receipt_searchable.pdf")
Console.WriteLine(vbCrLf & "Searchable PDF saved as: receipt_searchable.pdf")
' Export as hOCR for preservation
result.SaveAsHocrFile("receipt_hocr.html")
Console.WriteLine("hOCR file saved as: receipt_hocr.html")
End Using
End Sub
End Class
Scan-Empfangs-API-Ausgabe
Welche erweiterten Funktionen verbessern das Scannen von Belegen?
IronOCR bietet mehrere fortschrittliche Funktionen, die die Genauigkeit des Belegscannens deutlich verbessern:
Welche Sprachen unterstützt IronOCR ?
- Mehrsprachige Unterstützung : Belege in über 125 Sprachen oder in mehreren Sprachen in einem Dokument verarbeiten.
Kann IronOCR Barcodes auf Kassenbons lesen?
- Barcode-Lesung : Automatisches Erkennen und Lesen von Barcodes und QR-Codes .
Wie hilft Computer Vision bei der Belegverarbeitung?
- Computer Vision : Nutzen Sie fortschrittliche Texterkennung , um Textbereiche vor der OCR zu lokalisieren.
Kann ich benutzerdefinierte Modelle für spezielle Belegformate trainieren?
- Kundenspezifisches Training : Schulung von benutzerdefinierten Schriftarten für spezielle Belegformate.
Wie kann ich die Leistung bei der Massenverarbeitung verbessern?
- Leistungsoptimierung : Implementierung von Multithreading und asynchroner Verarbeitung für Massenoperationen.
// Example: Async receipt processing for high-volume scenarios
using IronOcr;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;
class BulkReceiptProcessor
{
static async Task Main()
{
var ocr = new IronTesseract();
// Configure for optimal performance
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
ocr.Configuration.UseMultiThreading = true;
ocr.Configuration.ProcessorCount = Environment.ProcessorCount;
// Process multiple receipts asynchronously
var receiptFiles = Directory.GetFiles(@"C:\Receipts\", "*.jpg");
var tasks = new List<Task<OcrResult>>();
foreach (var file in receiptFiles)
{
tasks.Add(ProcessReceiptAsync(ocr, file));
}
// Wait for all receipts to be processed
var results = await Task.WhenAll(tasks);
// Aggregate results
decimal totalAmount = 0;
foreach (var result in results)
{
// Extract total from each receipt
var match = System.Text.RegularExpressions.Regex.Match(
result.Text, @"Total:?\s*\$?(\d+\.\d{2})");
if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
{
totalAmount += amount;
}
}
Console.WriteLine($"Processed {results.Length} receipts");
Console.WriteLine($"Combined total: ${totalAmount:F2}");
}
static async Task<OcrResult> ProcessReceiptAsync(IronTesseract ocr, string filePath)
{
using (var input = new OcrInput(filePath))
{
// Apply preprocessing
input.DeNoise();
input.Deskew();
input.EnhanceResolution(200);
// Process asynchronously
return await ocr.ReadAsync(input);
}
}
}
// Example: Async receipt processing for high-volume scenarios
using IronOcr;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;
class BulkReceiptProcessor
{
static async Task Main()
{
var ocr = new IronTesseract();
// Configure for optimal performance
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
ocr.Configuration.UseMultiThreading = true;
ocr.Configuration.ProcessorCount = Environment.ProcessorCount;
// Process multiple receipts asynchronously
var receiptFiles = Directory.GetFiles(@"C:\Receipts\", "*.jpg");
var tasks = new List<Task<OcrResult>>();
foreach (var file in receiptFiles)
{
tasks.Add(ProcessReceiptAsync(ocr, file));
}
// Wait for all receipts to be processed
var results = await Task.WhenAll(tasks);
// Aggregate results
decimal totalAmount = 0;
foreach (var result in results)
{
// Extract total from each receipt
var match = System.Text.RegularExpressions.Regex.Match(
result.Text, @"Total:?\s*\$?(\d+\.\d{2})");
if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
{
totalAmount += amount;
}
}
Console.WriteLine($"Processed {results.Length} receipts");
Console.WriteLine($"Combined total: ${totalAmount:F2}");
}
static async Task<OcrResult> ProcessReceiptAsync(IronTesseract ocr, string filePath)
{
using (var input = new OcrInput(filePath))
{
// Apply preprocessing
input.DeNoise();
input.Deskew();
input.EnhanceResolution(200);
// Process asynchronously
return await ocr.ReadAsync(input);
}
}
}
Imports IronOcr
Imports System
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.IO
Imports System.Text.RegularExpressions
Module BulkReceiptProcessor
Sub Main()
MainAsync().GetAwaiter().GetResult()
End Sub
Private Async Function MainAsync() As Task
Dim ocr As New IronTesseract()
' Configure for optimal performance
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
ocr.Configuration.UseMultiThreading = True
ocr.Configuration.ProcessorCount = Environment.ProcessorCount
' Process multiple receipts asynchronously
Dim receiptFiles = Directory.GetFiles("C:\Receipts\", "*.jpg")
Dim tasks As New List(Of Task(Of OcrResult))()
For Each file In receiptFiles
tasks.Add(ProcessReceiptAsync(ocr, file))
Next
' Wait for all receipts to be processed
Dim results = Await Task.WhenAll(tasks)
' Aggregate results
Dim totalAmount As Decimal = 0
For Each result In results
' Extract total from each receipt
Dim match = Regex.Match(result.Text, "Total:?\s*\$?(\d+\.\d{2})")
If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, totalAmount) Then
totalAmount += totalAmount
End If
Next
Console.WriteLine($"Processed {results.Length} receipts")
Console.WriteLine($"Combined total: ${totalAmount:F2}")
End Function
Private Async Function ProcessReceiptAsync(ocr As IronTesseract, filePath As String) As Task(Of OcrResult)
Using input As New OcrInput(filePath)
' Apply preprocessing
input.DeNoise()
input.Deskew()
input.EnhanceResolution(200)
' Process asynchronously
Return Await ocr.ReadAsync(input)
End Using
End Function
End Module
Wie gehe ich mit häufigen Herausforderungen beim Scannen von Kassenbons um?
Das Scannen von Belegen stellt besondere Herausforderungen dar, bei deren Bewältigung IronOCR hilft:
Wie gehe ich mit qualitativ minderwertigen Belegbildern um?
- Bilder von geringer Qualität : Verwenden Sie den Filterassistenten , um automatisch optimale Vorverarbeitungseinstellungen zu finden.
Was ist mit schiefen oder gedrehten Kassenbons?
- Schiefe oder gedrehte Belege : Die automatische Seitenrotationserkennung gewährleistet die korrekte Ausrichtung.
Wie bearbeite ich verblasste oder kontrastarme Kassenbons?
- Verblasster oder kontrastarmer Text : Farbkorrektur- und Verbesserungsfilter anwenden.
Kann IronOCR auch zerknitterte oder beschädigte Kassenbons verarbeiten?
- Zerknitterte oder beschädigte Quittungen : Dank fortschrittlicher Vorverarbeitung wird der Text auch aus schwierigen Bildern wiederhergestellt.
Wie verwalte ich unterschiedliche Belegformate und -layouts?
Die Formate der Kassenbons variieren stark zwischen den Einzelhändlern. IronOCR bietet flexible Ansätze:
using IronOcr;
using System;
using System.Collections.Generic;
using System.Linq;
class ReceiptLayoutHandler
{
static void Main()
{
var ocr = new IronTesseract();
// Configure for different receipt layouts
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm;
using (var input = new OcrInput(@"complex_receipt.jpg"))
{
// Apply region-specific processing
var cropRegion = new CropRectangle(x: 0, y: 100, width: 400, height: 800);
input.AddImage(@"complex_receipt.jpg", cropRegion);
// Process with confidence tracking
var result = ocr.Read(input);
// Parse using confidence scores
var highConfidenceLines = result.Lines
.Where(line => line.Confidence > 85)
.Select(line => line.Text)
.ToList();
// Extract data with fallback strategies
var total = ExtractTotal(highConfidenceLines)
?? ExtractTotalAlternative(result.Text);
Console.WriteLine($"Receipt Total: {total}");
}
}
static decimal? ExtractTotal(List<string> lines)
{
// Primary extraction method
foreach (var line in lines)
{
if (line.Contains("TOTAL") &&
System.Text.RegularExpressions.Regex.IsMatch(line, @"\d+\.\d{2}"))
{
var match = System.Text.RegularExpressions.Regex.Match(line, @"(\d+\.\d{2})");
if (decimal.TryParse(match.Value, out var total))
return total;
}
}
return null;
}
static decimal? ExtractTotalAlternative(string fullText)
{
// Fallback extraction method
var pattern = @"(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})";
var match = System.Text.RegularExpressions.Regex.Match(fullText, pattern);
if (match.Success && decimal.TryParse(match.Groups[1].Value, out var total))
return total;
return null;
}
}
using IronOcr;
using System;
using System.Collections.Generic;
using System.Linq;
class ReceiptLayoutHandler
{
static void Main()
{
var ocr = new IronTesseract();
// Configure for different receipt layouts
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm;
using (var input = new OcrInput(@"complex_receipt.jpg"))
{
// Apply region-specific processing
var cropRegion = new CropRectangle(x: 0, y: 100, width: 400, height: 800);
input.AddImage(@"complex_receipt.jpg", cropRegion);
// Process with confidence tracking
var result = ocr.Read(input);
// Parse using confidence scores
var highConfidenceLines = result.Lines
.Where(line => line.Confidence > 85)
.Select(line => line.Text)
.ToList();
// Extract data with fallback strategies
var total = ExtractTotal(highConfidenceLines)
?? ExtractTotalAlternative(result.Text);
Console.WriteLine($"Receipt Total: {total}");
}
}
static decimal? ExtractTotal(List<string> lines)
{
// Primary extraction method
foreach (var line in lines)
{
if (line.Contains("TOTAL") &&
System.Text.RegularExpressions.Regex.IsMatch(line, @"\d+\.\d{2}"))
{
var match = System.Text.RegularExpressions.Regex.Match(line, @"(\d+\.\d{2})");
if (decimal.TryParse(match.Value, out var total))
return total;
}
}
return null;
}
static decimal? ExtractTotalAlternative(string fullText)
{
// Fallback extraction method
var pattern = @"(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})";
var match = System.Text.RegularExpressions.Regex.Match(fullText, pattern);
if (match.Success && decimal.TryParse(match.Groups[1].Value, out var total))
return total;
return null;
}
}
Imports IronOcr
Imports System
Imports System.Collections.Generic
Imports System.Linq
Class ReceiptLayoutHandler
Shared Sub Main()
Dim ocr = New IronTesseract()
' Configure for different receipt layouts
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm
Using input = New OcrInput("complex_receipt.jpg")
' Apply region-specific processing
Dim cropRegion = New CropRectangle(x:=0, y:=100, width:=400, height:=800)
input.AddImage("complex_receipt.jpg", cropRegion)
' Process with confidence tracking
Dim result = ocr.Read(input)
' Parse using confidence scores
Dim highConfidenceLines = result.Lines _
.Where(Function(line) line.Confidence > 85) _
.Select(Function(line) line.Text) _
.ToList()
' Extract data with fallback strategies
Dim total = ExtractTotal(highConfidenceLines) _
OrElse ExtractTotalAlternative(result.Text)
Console.WriteLine($"Receipt Total: {total}")
End Using
End Sub
Shared Function ExtractTotal(lines As List(Of String)) As Decimal?
' Primary extraction method
For Each line In lines
If line.Contains("TOTAL") AndAlso _
System.Text.RegularExpressions.Regex.IsMatch(line, "\d+\.\d{2}") Then
Dim match = System.Text.RegularExpressions.Regex.Match(line, "(\d+\.\d{2})")
Dim total As Decimal
If Decimal.TryParse(match.Value, total) Then
Return total
End If
End If
Next
Return Nothing
End Function
Shared Function ExtractTotalAlternative(fullText As String) As Decimal?
' Fallback extraction method
Dim pattern = "(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})"
Dim match = System.Text.RegularExpressions.Regex.Match(fullText, pattern)
Dim total As Decimal
If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, total) Then
Return total
End If
Return Nothing
End Function
End Class
Welche wichtigen Punkte sollte ich mir bei APIs zum Scannen von Belegen merken?
APIs zur Belegscannung wie IronOCR bieten zuverlässige Lösungen zur automatisierten Datenextraktion von Belegen. Mithilfe fortschrittlicher OCR-Technologie können Unternehmen automatisch Lieferantennamen, Kaufdaten, Einzelposten, Preise, Steuern und Summen extrahieren. Dank der Unterstützung mehrerer Sprachen , Währungen und Barcodes können Unternehmen die Belegverwaltung vereinfachen, Zeit sparen und datengestützte Entscheidungen treffen.
IronOCR bietet Entwicklern die Werkzeuge, die sie für eine genaue und effiziente Textextraktion benötigen, und ermöglicht so die Automatisierung von Aufgaben und eine verbesserte Effizienz. Der vollständige Funktionsumfang der Bibliothek umfasst die Unterstützung verschiedener Dokumenttypen und aktuelle Verbesserungen wie eine Speicherreduzierung von 98 % .
Durch die Erfüllung der Voraussetzungen und die Integration von IronOCR können Sie die Vorteile der automatisierten Belegverarbeitung nutzen. Die Dokumentation , die Beispiele und die Anleitungen zur Fehlerbehebung der Bibliothek gewährleisten eine reibungslose Implementierung.
Weitere Informationen finden Sie auf der Lizenzseite oder im C# Tesseract OCR-Tutorial .
Häufig gestellte Fragen
Wie kann ich die Datenextraktion von Quittungen in C# mithilfe von OCR automatisieren?
Sie können die Datenextraktion von Quittungen in C# automatisieren, indem Sie IronOCR verwenden, das es Ihnen ermöglicht, wichtige Details wie Posten, Preise, Steuern und Gesamtsummen aus Quittungsbildern mit hoher Genauigkeit zu extrahieren.
Was sind die Voraussetzungen für die Einrichtung eines Projekts zur Quittungserfassung in C#?
Um ein Projekt zur Quittungserfassung in C# einzurichten, benötigen Sie Visual Studio, grundlegende C#-Programmierkenntnisse und die in Ihrem Projekt installierte IronOCR-Bibliothek.
Wie installiere ich die OCR-Bibliothek mit dem NuGet-Paketmanager in Visual Studio?
Öffnen Sie Visual Studio und gehen Sie zu Extras > NuGet-Paketmanager > NuGet-Pakete für die Lösung verwalten, suchen Sie IronOCR und installieren Sie es in Ihrem Projekt.
Kann ich die OCR-Bibliothek mit der Visual Studio-Befehlszeile installieren?
Ja, Sie können IronOCR installieren, indem Sie die Paket-Manager-Konsole in Visual Studio öffnen und den Befehl Install-Package IronOcr ausführen.
Wie extrahiere ich Text aus einer gesamten Quittung mithilfe von OCR?
Um Text aus einer gesamten Quittung zu extrahieren, verwenden Sie IronOCR, um OCR auf dem vollständigen Quittungsbild durchzuführen, und geben Sie den extrahierten Text mit C#-Code aus.
Welche Vorteile bietet eine Quittungs-Scan-API?
Eine Quittungs-Scan-API wie IronOCR automatisiert die Datenerfassung, minimiert manuelle Fehler, steigert die Produktivität und bietet Einblicke in das Ausgabeverhalten für bessere Geschäftsentscheidungen.
Unterstützt die OCR-Bibliothek mehrere Sprachen und Währungen?
Ja, IronOCR unterstützt mehrere Sprachen, Währungen und Quittungsformate, was es ideal für globale Anwendungen macht.
Wie genau ist die OCR-Bibliothek beim Extrahieren von Text aus Bildern?
IronOCR gewährleistet hohe Genauigkeit durch die Verwendung fortschrittlicher OCR-Algorithmen, Computer Vision und maschineller Lernmodelle, selbst in herausfordernden Szenarien.
Welche Arten von Daten können aus Quittungen mithilfe von OCR extrahiert werden?
IronOCR kann Daten wie Posten, Preise, Steuerbeträge, Gesamtsummen und andere Details von Quittungen extrahieren.
Wie kann die Automatisierung der Quittungsbearbeitung Geschäftsprozesse verbessern?
Die Automatisierung der Quittungsbearbeitung mit IronOCR verbessert Geschäftsprozesse, indem manuelle Eingaben reduziert, eine genaue Datenerfassung ermöglicht und datenbasierte Entscheidungen unterstützt.



