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 introducción manual y agiliza 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 compatibilidad con múltiples formatos.

¿Por qué elegir IronOCR para el escaneo de recibos?

IronOCR es una biblioteca IronOCR flexible que ofrece una extracción de texto fiable a partir de documentos escaneados, imágenes y archivos PDF. Gracias a algoritmos avanzados, visión artificial y modelos de aprendizaje automático, IronOCR garantiza una alta precisión incluso en situaciones complejas. La biblioteca admite múltiples idiomas y estilos de fuente, lo que la hace adecuada para aplicaciones globales. Al incorporar IronOCR a sus aplicaciones, puede automatizar la introducción de datos y el análisis de texto, lo que aumenta la productividad.

¿Cómo extrae IronOCR el texto de las imágenes de recibos?

IronOCR extrae texto de documentos, fotografías, capturas de pantalla y transmisiones de cámara en directo como respuestas JSON. Mediante algoritmos sofisticados y aprendizaje automático, IronOCR analiza datos de imagen, reconoce caracteres y los convierte en texto legible por máquina. La biblioteca utiliza la tecnología Tesseract 5, mejorada con optimizaciones propias para lograr una precisión superior.

¿Por qué IronOCR es excelente para el procesamiento de recibos?

IronOCR destaca por su capacidad para gestionar escaneos de baja calidad, formatos de recibos variados y diferentes orientaciones. Los filtros de preprocesamiento de imágenes integrados 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 cumplen los siguientes requisitos previos:

¿Qué entornos de desarrollo son compatibles?

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

¿Qué conocimientos de programación se requieren?

  1. Conocimientos de C#: Un conocimiento básico de C# te ayudará a modificar los ejemplos de código. IronOCR proporciona ejemplos sencillos y documentación de la API.

¿Qué dependencias de software son necesarias?

  1. Instalación de IronOCR: Instálalo a través del gestor de paquetes NuGet. Es posible que se requieran dependencias específicas de la plataforma.

¿Se requiere 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 el escaneo de 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 desplegado, mostrando la opción 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 a utilizar IronOCR antes de implementarlo en aplicaciones web.

Cuadro de diálogo Aplicación de Consola

¿Cómo debería llamar a mi proyecto de escáner de recibos?

Escriba el nombre y la ubicación de su proyecto y, a continuación, haga clic en Siguiente. Elige un nombre descriptivo como "ReceiptScannerAPI".

Pantalla de configuración de un nuevo proyecto de Visual Studio para crear una aplicación de consola llamada Configuración del Proyecto

¿Qué versión de .NET Framework debo seleccionar?

Seleccione .NET 5.0 o posterior para una compatibilidad óptima y, a continuación, haga clic en Crear.

Cuadro de diálogo Marco de Trabajo Objetivo

¿Cómo instalo IronOCR en mi proyecto?

Hay dos métodos de instalación sencillos disponibles:

¿Cómo se utiliza el método del gestor 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 fuentes de paquetes, junto a una estructura de proyecto C# en el explorador de soluciones Administrador de Paquetes NuGet

Busca IronOCR e instala el paquete. Para recibos que no estén en inglés, instale los paquetes específicos para cada idioma.

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

¿Cómo se utiliza la instalación desde la línea de comandos?

  1. Vaya a Herramientas > Administrador de paquetes NuGet > Consola del administrador de paquetes
  2. Introduzca este comando:

    Install-Package IronOcr

    Ventana de la consola del Administrador de paquetes de Visual Studio que muestra la ejecución del comando NuGet Consola del Administrador de Paquetes

¿Cómo puedo extraer rápidamente los datos de un recibo con IronOCR?

Extraiga datos de recibos con solo unas pocas líneas de código:

  1. Instala IronOCR con el Administrador 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

    Comienza a usar IronOCR en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer

¿Cómo extraigo datos estructurados de imágenes de recibos?

IronOCR extrae partidas, precios, impuestos y totales de diversos tipos de documentos. La biblioteca IronOCR es compatible con archivos PDF, TIFF de varias páginas 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}");
        }
    }
}
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
$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 facturas extraídos de un PDF, con artículos que incluyen descripciones, cantidades, precios, impuestos y totales Salida

¿Cómo extraigo todo el contenido del recibo?

Extraer el contenido completo del recibo conservando el formato:

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
$vbLabelText   $csharpLabel

Consola de depuración de Visual Studio que muestra datos de facturas extraídos de un PDF, con artículos que incluyen 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. Compatibilidad multilingüe: procesa recibos en más de 125 idiomas o en varios idiomas en un mismo documento.

¿Puede IronOCR leer BarCodes en recibos?

  1. Lectura de BarCodes: Detecta y lee automáticamente BarCodes y códigos QR.

¿Cómo ayuda la visión artificial al procesamiento de recibos?

  1. Visión artificial: Utiliza la detección avanzada de texto para localizar regiones de texto antes del OCR.

¿Puedo entrenar modelos personalizados para formatos de recibos únicos?

  1. Entrenamiento personalizado: Entrena fuentes personalizadas para formatos de recibos especializados.

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

  1. Optimización del rendimiento: Implementar multithreading y procesamiento asíncrono 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);
        }
    }
}
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
$vbLabelText   $csharpLabel

¿Cómo puedo abordar los retos habituales del escaneo de recibos?

El escaneo de recibos presenta retos únicos que IronOCR ayuda a resolver:

¿Cómo puedo solucionar el problema de las imágenes de recibos de mala calidad?

  • Imágenes de baja calidad: utilice el Asistente de filtros para encontrar automáticamente la configuración óptima de preprocesamiento.

¿Qué pasa con los recibos torcidos o girados?

¿Cómo proceso los recibos descoloridos o con poco contraste?

¿Puede IronOCR procesar recibos arrugados o dañados?

¿Cómo gestiono los diferentes formatos y diseños de recibos?

Los formatos de los recibos varían mucho entre los distintos comercios de Retail. 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;
    }
}
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
$vbLabelText   $csharpLabel

¿Qué puntos 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 el uso de tecnología OCR avanzada, las empresas pueden extraer automáticamente nombres de proveedores, fechas de compra, listas detalladas, precios, impuestos y totales. Gracias a la compatibilidad con múltiples idiomas, divisas y BarCodes, 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 mayor eficiencia. El conjunto completo de características de la biblioteca incluye compatibilidad con diversos tipos de documentos y mejoras recientes, como una reducción del 98 % del consumo de memoria.

Al cumplir los requisitos previos e integrar IronOCR, podrá descubrir las ventajas 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 fluida.

Para obtener más información, visita la página de licencias o consulta el tutorial de C# Tesseract OCR.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame