API de escaneo de recibos: extraiga datos de recibos con C# e IronOCR
Las API de escaneo de recibos automatizan la extracción de datos de los recibos mediante tecnología OCR, lo que reduce significativamente los errores de ingreso manual y acelera el procesamiento. Esta guía muestra cómo utilizar IronOCR en C# para extraer con precisión nombres de proveedores, fechas, artículos, precios y totales de imágenes de recibos, con preprocesamiento de imágenes integrado y soporte para múltiples formatos.
¿Por qué elegir IronOCR para escanear recibos?
IronOCR es una biblioteca de OCR flexible que ofrece extracción de texto confiable de documentos escaneados, imágenes y PDF. Con algoritmos avanzados, visión artificial y modelos de aprendizaje automático, IronOCR garantiza una alta precisión incluso en escenarios desafiantes. La biblioteca admite varios idiomas y estilos de fuente, lo que la hace adecuada para aplicaciones globales. Al incorporar IronOCR a sus aplicaciones, puede automatizar la entrada de datos y el análisis de texto, aumentando la productividad.
¿Cómo extrae IronOCR texto de las imágenes de recibos?
IronOCR recupera texto de documentos, fotografías, capturas de pantalla y transmisiones de cámaras en vivo como respuestas JSON. Utilizando algoritmos sofisticados y aprendizaje automático, IronOCR analiza datos de imágenes , reconoce caracteres y los convierte en texto legible por máquina. La biblioteca utiliza tecnología Tesseract 5 mejorada con mejoras patentadas para lograr una precisión superior.
¿Por qué IronOCR es excelente para el procesamiento de recibos?
IronOCR se destaca en el manejo de escaneos de baja calidad , distintos formatos de recibos y diferentes orientaciones . Los filtros de preprocesamiento de imágenes incorporados mejoran automáticamente la calidad de la imagen antes del procesamiento, lo que garantiza resultados óptimos incluso con recibos arrugados o descoloridos.
¿Qué necesito para utilizar IronOCR?
Antes de trabajar con IronOCR, asegúrese de que se cumplan estos requisitos previos:
¿Qué entornos de desarrollo son compatibles?
¿Qué habilidades de programación se requieren?
- Conocimiento de C# : una comprensión básica de C# le ayudará a modificar ejemplos de código. IronOCR proporciona ejemplos simples y documentación API .
¿Qué dependencias de software son necesarias?
- Instalación de IronOCR : instalar a través del Administrador de paquetes NuGet . Es posible que se requieran dependencias específicas de la plataforma.
¿Es necesaria una clave de licencia?
- Clave de licencia (opcional) : prueba gratuita disponible; El uso en producción requiere una licencia .
¿Cómo creo un nuevo proyecto de Visual Studio para escanear recibos?
¿Cómo inicio un nuevo proyecto en Visual Studio?
Abre Visual Studio y ve a Archivos, luego pasa por encima de Nuevo y haz clic en Proyecto.
! IDE de Visual Studio con el menú Archivo expandido, mostrando la opción 'Nuevo > Proyecto' resaltada, y el editor de código mostrando código C# para cargar un libro de Excel Imagen de Nuevo Proyecto
¿Qué plantilla de proyecto debo elegir?
Seleccione Aplicación de consola y haga clic en Siguiente. Esta plantilla es ideal para aprender IronOCR antes de implementarlo en aplicaciones web.
Cuadro de diálogo "Crear un nuevo proyecto" de Visual Studio que muestra la plantilla de aplicación de consola seleccionada con opciones de plataforma para Windows, Linux y macOS. Aplicación de Consola
¿Cómo debo nombrar mi proyecto de escáner de recibos?
Escriba el nombre y la ubicación de su proyecto y luego haga clic en Siguiente. Elija un nombre descriptivo como " ReceiptScanner API".
Pantalla de configuración del nuevo proyecto de Visual Studio para crear una aplicación de consola llamada "IronOCR" con C# seleccionado y la configuración de la solución mostrada. Configuración del Proyecto
¿Qué versión de .NET Framework debo seleccionar?
Seleccione .NET 5.0 o posterior para una compatibilidad óptima y luego haga clic en Crear.
Cuadro de diálogo "Información adicional" de Visual Studio que muestra la configuración de la aplicación de consola con .NET 5.0 seleccionado como marco de destino y las opciones de plataforma para Linux, macOS, Windows y consola. Marco de Trabajo Objetivo
¿Cómo instalo IronOCR en mi proyecto?
Hay dos métodos de instalación simples disponibles:
¿Cómo uso el método del Administrador de paquetes NuGet?
Vaya a Herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para la solución
Cuadro de diálogo de configuración del Administrador de paquetes NuGet de Visual Studio con la configuración de orígenes de paquetes, junto con una estructura de proyecto de C# en el explorador de soluciones. Administrador de Paquetes NuGet
Busque IronOCR e instale el paquete. Para recibos que no estén en inglés, instale paquetes específicos del idioma .
¿Cómo utilizar la instalación de línea de comandos?
- Vaya a Herramientas > Administrador de paquetes NuGet > Consola del administrador de paquetes
Ingrese este comando:
Install-Package IronOcr
Ventana de la consola del Administrador de paquetes de Visual Studio que muestra el comando NuGet 'PM> Install-Package IronOCR' ejecutándose para un proyecto llamado 'Crear PDF' Consola del Administrador de Paquetes
¿Cómo puedo extraer rápidamente datos de recibos con IronOCR?
Extraiga los datos del recibo con solo unas pocas líneas de código:
Empieza a crear PDF con NuGet ahora:
Instalar IronOCR con el gestor de paquetes NuGet
Copie y ejecute este fragmento de código.
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}%"); }Despliegue para probar en su entorno real
Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
¿Cómo extraigo datos estructurados de las imágenes de recibos?
IronOCR extrae partidas, precios, impuestos y totales de diversos tipos de documentos. La biblioteca admite archivos PDF , TIFF multipágina y diversos formatos de imagen .
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}");
}
}
}¿Qué técnicas mejoran la precisión del escaneo de recibos?
Técnicas clave para un escaneo preciso de recibos:
- Lista blanca de caracteres : limita el reconocimiento a los caracteres esperados
- Preprocesamiento de imágenes : utiliza corrección de sesgo , mejora de resolución y eliminación de ruido.
- Coincidencia de patrones : extrae datos estructurados utilizando expresiones regulares
- Puntuación de confianza : valida los resultados en función de la confianza del reconocimiento.
¿Cómo extraigo el contenido completo del recibo?
Extraiga el contenido completo del recibo con el formato conservado:
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");
}
}
}Consola de depuración de Visual Studio que muestra datos de factura extraídos de un PDF, incluyendo artículos con descripciones, cantidades, precios, impuestos y totales. Salida de la API de Escaneo de Recibos
¿Qué funciones avanzadas mejoran el escaneo de recibos?
IronOCR ofrece varias funciones avanzadas que mejoran significativamente la precisión del escaneo de recibos:
¿Qué idiomas admite IronOCR?
- Soporte multilingüe : procese recibos en más de 125 idiomas o en varios idiomas en un solo documento .
¿Puede IronOCR leer códigos de barras en recibos?
- Lectura de códigos de barras : detecta y lee automáticamente códigos de barras y códigos QR .
¿Cómo ayuda la visión artificial al procesamiento de recibos?
- Visión por computadora : utilice detección de texto avanzada para localizar regiones de texto antes del OCR.
¿Puedo entrenar modelos personalizados para formatos de recibos únicos?
- Capacitación personalizada : capacite fuentes personalizadas para formatos de recibos especializados.
¿Cómo puedo mejorar el rendimiento del procesamiento masivo?
- Optimización del rendimiento : Implemente subprocesos múltiples y procesamiento asincrónico para operaciones masivas.
// 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);
}
}
}¿Cómo puedo solucionar los problemas más comunes al escanear recibos?
El escaneo de recibos presenta desafíos únicos que IronOCR ayuda a abordar:
¿Cómo puedo lidiar con imágenes de recibos de mala calidad?
- Imágenes de mala calidad : utilice el Asistente de filtros para encontrar automáticamente la configuración de preprocesamiento óptima.
¿Qué pasa con los recibos sesgados o rotados?
- Recibos torcidos o rotados : la detección automática de rotación de página garantiza una orientación adecuada.
¿Cómo proceso recibos descoloridos o con bajo contraste?
- Texto descolorido o con bajo contraste : aplicar filtros de mejora y corrección de color .
¿Puede IronOCR gestionar recibos arrugados o dañados?
- Recibos arrugados o dañados : el preprocesamiento avanzado recupera texto de imágenes complejas.
¿Cómo gestiono diferentes formatos y diseños de recibos?
Los formatos de recibos varían ampliamente entre minoristas. IronOCR ofrece enfoques flexibles:
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;
}
}¿Qué aspectos clave debo recordar sobre las API de escaneo de recibos?
Las API de escaneo de recibos, como IronOCR, ofrecen soluciones fiables para automatizar la extracción de datos de los recibos. Mediante tecnología OCR avanzada, las empresas pueden extraer automáticamente nombres de proveedores, fechas de compra, listas detalladas, precios, impuestos y totales. Con soporte para múltiples idiomas , monedas y compatibilidad con códigos de barras , las empresas pueden simplificar la gestión de recibos, ahorrar tiempo y tomar decisiones basadas en datos.
IronOCR proporciona las herramientas que los desarrolladores necesitan para una extracción de texto precisa y eficiente, lo que permite la automatización de tareas y una mejor eficiencia. El conjunto completo de funciones de la biblioteca incluye soporte para varios tipos de documentos y mejoras recientes como la reducción de memoria del 98% .
Al cumplir con los requisitos previos e integrar IronOCR, puede revelar los beneficios del procesamiento automatizado de recibos. La documentación , los ejemplos y las guías de resolución de problemas de la biblioteca garantizan una implementación sin problemas.
Para obtener más información, visite la página de licencias o explore el tutorial de OCR de C# Tesseract .
Preguntas Frecuentes
¿Cómo puedo automatizar la extracción de datos de recibos usando OCR en C#?
Puede automatizar la extracción de datos de recibos en C# utilizando IronOCR, que le permite extraer detalles clave como artículos de línea, precios, impuestos y montos totales de las imágenes de recibos con alta precisión.
¿Cuáles son los requisitos previos para configurar un proyecto de escaneo de recibos en C#?
Para configurar un proyecto de escaneo de recibos en C#, necesita Visual Studio, conocimiento básico de programación en C# y la biblioteca IronOCR instalada en su proyecto.
¿Cómo instalo la biblioteca OCR usando NuGet Package Manager en Visual Studio?
Abra Visual Studio y vaya a Herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para la solución, busque IronOCR e instálelo en su proyecto.
¿Puedo instalar la biblioteca OCR utilizando la línea de comandos de Visual Studio?
Sí, puede instalar IronOCR abriendo la consola del Administrador de Paquetes en Visual Studio y ejecutando el comando: Install-Package IronOcr.
¿Cómo extraigo texto de un recibo completo usando OCR?
Para extraer texto de un recibo completo, use IronOCR para realizar OCR en la imagen completa del recibo y luego muestre el texto extraído usando código en C#.
¿Qué beneficios proporciona una API de escaneo de recibos?
Una API de escaneo de recibos como IronOCR automatiza la extracción de datos, minimiza errores manuales, mejora la productividad y proporciona información sobre patrones de gasto para mejores decisiones comerciales.
¿La biblioteca OCR es compatible con múltiples idiomas y monedas?
Sí, IronOCR es compatible con múltiples idiomas, monedas y formatos de recibos, lo que lo hace ideal para aplicaciones globales.
¿Qué tan precisa es la biblioteca OCR para extraer texto de imágenes?
IronOCR garantiza alta precisión utilizando algoritmos avanzados de OCR, visión por computadora y modelos de aprendizaje automático, incluso en escenarios desafiantes.
¿Qué tipos de datos se pueden extraer de los recibos usando OCR?
IronOCR puede extraer datos como artículos de línea, precios, montos de impuestos, montos totales y otros detalles del recibo.
¿Cómo puede la automatización del análisis de recibos mejorar los procesos empresariales?
La automatización del análisis de recibos con IronOCR mejora los procesos empresariales al reducir la entrada manual, permitir la recopilación precisa de datos y habilitar la toma de decisiones basada en datos.







