Saltar al pie de página
USANDO IRONOCR

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?

  1. Entorno de desarrollo : instale un IDE adecuado como Visual Studio. IronOCR es compatible con Windows , Linux , macOS , Azure y AWS .

¿Qué habilidades de programación se requieren?

  1. 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?

  1. 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?

  1. 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 .

El Administrador de paquetes NuGet en Visual Studio muestra los paquetes IronOCR instalados, incluyendo la biblioteca principal y los paquetes de OCR específicos para árabe, hebreo y español. IronOCR

¿Cómo utilizar la instalación de línea de comandos?

  1. Vaya a Herramientas > Administrador de paquetes NuGet > Consola del administrador de paquetes
  2. 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:

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronOCR con el gestor de paquetes NuGet

    PM > Install-Package IronOcr

  2. 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}%");
    }
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer

¿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}");
        }
    }
}
$vbLabelText   $csharpLabel

¿Qué técnicas mejoran la precisión del escaneo de recibos?

Técnicas clave para un escaneo preciso de recibos:

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

¿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");
        }
    }
}
$vbLabelText   $csharpLabel

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?

  1. 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?

  1. 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?

  1. 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?

  1. Capacitación personalizada : capacite fuentes personalizadas para formatos de recibos especializados.

¿Cómo puedo mejorar el rendimiento del procesamiento masivo?

  1. 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);
        }
    }
}
$vbLabelText   $csharpLabel

¿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?

¿Cómo proceso recibos descoloridos o con bajo contraste?

¿Puede IronOCR gestionar recibos arrugados o dañados?

¿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;
    }
}
$vbLabelText   $csharpLabel

¿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.

Kannaopat Udonpant
Ingeniero de Software
Antes de convertirse en Ingeniero de Software, Kannapat completó un doctorado en Recursos Ambientales de la Universidad de Hokkaido en Japón. Mientras perseguía su grado, Kannapat también se convirtió en miembro del Laboratorio de Robótica de Vehículos, que es parte del Departamento de Ingeniería ...
Leer más