Saltar al pie de página
USANDO IRONOCR

API de factura OCR (Tutorial para desarrolladores)

La API de OCR de facturas automatiza la extracción de datos de facturas mediante aprendizaje automático, eliminando errores de ingreso manual y capturando con precisión detalles del proveedor, números de factura y precios de documentos digitales y escaneados. Este tutorial demuestra cómo crear una solución de OCR de facturas con IronOCR.

Al aprovechar el aprendizaje automático y la visión artificial, la tecnología OCR de Invoice transforma los datos de las facturas en formatos listos para el procesamiento automatizado. Aprenderá cómo abordar desafíos comunes, como demoras, costos y errores en el ingreso manual de datos, al tiempo que extrae con precisión información de proveedores, números de factura y precios de cualquier formato de factura.

Este artículo utiliza IronOCR , una API de OCR de facturas líder para desarrolladores de .NET.

¿Qué es IronOCR?

IronOCR, desarrollado por Iron Software, proporciona herramientas de OCR integrales para desarrolladores. Utiliza aprendizaje automático y visión por computadora para extraer texto de documentos escaneados, imágenes y PDFs, permitiendo el procesamiento automatizado. Sus API se integran perfectamente con varios lenguajes y plataformas, reduciendo errores de ingreso manual de datos y mejorando la eficiencia. Los datos extraídos fluyen directamente a los sistemas existentes para su análisis y toma de decisiones. Características como el preprocesamiento de imágenes , el reconocimiento de códigos de barras y el análisis flexible de archivos mejoran su versatilidad. IronOCR permite a los desarrolladores incorporar un reconocimiento de texto sólido en sus aplicaciones.

La biblioteca admite 125 idiomas internacionales a través de paquetes de idiomas especializados, lo que la hace ideal para el procesamiento de facturas globales. Las funciones avanzadas incluyen visión artificial para encontrar texto automáticamente, lo que resulta especialmente útil para facturas con diseños variados. Además, IronOCR proporciona capacidades de procesamiento multiproceso para gestionar el procesamiento de facturas de gran volumen de manera eficiente.

¿Por qué debería utilizar IronOCR para el procesamiento de facturas?

IronOCR ofrece ventajas atractivas para las aplicaciones de procesamiento de facturas. En primer lugar, proporciona una precisión excepcional a través de su motor Tesseract 5 optimizado, específicamente mejorado para aplicaciones .NET. La biblioteca maneja varios formatos de facturas, desde documentos escaneados hasta archivos PDF , e incluso escaneos de baja calidad .

Los filtros de optimización de imagen incorporados mejoran automáticamente la calidad de la imagen antes del procesamiento, lo que da como resultado una extracción de texto más precisa. Para facturas con requisitos específicos, IronOCR admite capacitación en idiomas personalizados , lo que permite la optimización para fuentes o formatos únicos que se encuentran comúnmente en sus tipos de facturas.

¿Qué hace que IronOCR sea diferente de otras bibliotecas de OCR?

IronOCR se distingue por su capacidad simple de OCR de una línea manteniendo funciones de nivel empresarial. A diferencia de las implementaciones de Tesseract sin procesar, IronOCR proporciona una API .NET administrada que maneja operaciones complejas sin problemas. La biblioteca ofrece métodos de lectura de documentos especializados para varios tipos de documentos, incluido soporte dedicado para leer tablas en documentos , esencial para las líneas de facturación.

El Asistente de filtros determina automáticamente las mejores configuraciones de preprocesamiento para sus imágenes de facturas específicas, eliminando así las conjeturas en la optimización. IronOCR también ofrece capacidades de depuración integrales, lo que permite a los desarrolladores visualizar lo que ve el motor de OCR y solucionar problemas de extracción de manera efectiva.

¿Qué requisitos previos necesito?

Antes de trabajar con IronOCR, asegúrese de que se cumplan estos requisitos previos:

  1. Un entorno de desarrollo adecuado con un IDE como Visual Studio instalado
  2. Comprensión básica de la programación en C# para comprender y modificar ejemplos de código de manera eficaz.
  3. Biblioteca IronOCR instalada en su proyecto a través del Administrador de paquetes NuGet o la línea de comandos

Cumplir con estos requisitos previos lo preparará para comenzar a trabajar con IronOCR con éxito.

IronOCR proporciona guías de configuración completas para Windows , Linux y macOS . La biblioteca admite la implementación en la nube con tutoriales específicos para AWS Lambda y Azure Functions .

¿Qué versión de Visual Studio debo utilizar?

IronOCR es compatible con las versiones de Visual Studio desde 2017 hasta las últimas versiones. Para una compatibilidad óptima y acceso a las características más nuevas de C#, se recomienda Visual Studio 2019 o 2022. La biblioteca es totalmente compatible con .NET Framework, .NET Core y .NET 5+ , lo que garantiza flexibilidad en su entorno de desarrollo.

Para el desarrollo multiplataforma, Visual Studio Code con la extensión C# funciona bien. Los desarrolladores móviles pueden aprovechar la guía de IronOCR para implementaciones de Android e iOS , lo que lo hace adecuado para aplicaciones .NET MAUI .

¿Qué nivel de conocimiento de C# necesito?

Un conocimiento intermedio de C# es suficiente para la implementación básica de OCR de facturas. Deberías sentirte cómodo con:

El diseño intuitivo de API de IronOCR significa que no se requiere una gran experiencia en procesamiento de imágenes o aprendizaje automático. La biblioteca maneja operaciones complejas internamente, lo que le permite concentrarse en la lógica empresarial. Los principiantes pueden comenzar con ejemplos de OCR simples .

¿Cómo creo un nuevo proyecto de Visual Studio?

Para comenzar con IronOCR, primero cree un nuevo proyecto de Visual Studio.

Abra Visual Studio, vaya a Archivos, coloque el cursor sobre Nuevo y haga clic en Proyecto.

IDE de Visual Studio que muestra el menú Archivo abierto con las opciones "Nuevo" y "Proyecto" resaltadas, lo que demuestra el primer paso para crear un nuevo proyecto de API de OCR de facturas. Nuevo Proyecto

En la nueva ventana, seleccione Aplicación de consola y haga clic en Siguiente.

El cuadro de diálogo "Crear un nuevo proyecto" de Visual Studio muestra varias plantillas de proyecto, con la opción "Aplicación de consola" resaltada para crear una aplicación de línea de comandos .NET Core adecuada para el procesamiento de facturas mediante OCR. Aplicación de Consola

Aparece una nueva ventana. Ingrese el nombre y la ubicación de su proyecto y luego haga clic en Siguiente.

Nueva ventana de configuración de proyecto de Visual Studio que muestra la configuración del proyecto para una aplicación de consola denominada "IronOCR" con selección de lenguaje C# y plataforma de destino Windows para la implementación de la API de OCR de facturas. Configuración del Proyecto

Por último, seleccione el marco de destino y haga clic en Crear.

Asistente para la creación de proyectos de Visual Studio que muestra el paso "Información adicional" con .NET 5.0 Framework seleccionado para una compatibilidad óptima con IronOCR en la aplicación de procesamiento de facturas. Marco de Trabajo Objetivo

Su nuevo proyecto de Visual Studio está listo. Vamos a instalar IronOCR.

¿Qué tipo de proyecto funciona mejor para las aplicaciones de OCR?

Si bien este tutorial utiliza una aplicación de consola para simplificar, IronOCR admite varios tipos de proyectos:

  • Aplicaciones de consola : ideales para procesamiento por lotes o herramientas de línea de comandos
  • Aplicaciones web : perfectas para crear API o servicios basados en web
  • Windows Forms/WPF : adecuado para aplicaciones de escritorio con GUI
  • Aplicaciones .NET MAUI : para soluciones multiplataforma

Para un procesamiento de gran volumen, considere implementar IronOCR en una arquitectura de microservicios o de servicio de Windows. Las capacidades de seguimiento del progreso de la biblioteca facilitan el monitoreo de operaciones de larga duración.

¿Qué versión de .NET Framework debería elegir?

IronOCR ofrece una amplia compatibilidad entre las versiones .NET . Para proyectos nuevos, utilice .NET 6.0 o superior para obtener un rendimiento óptimo y las funciones más recientes. La biblioteca mantiene una excelente compatibilidad con versiones anteriores:

  • .NET Framework 4.6.2+ : para aplicaciones empresariales heredadas
  • .NET Core 3.1 : Soporte a largo plazo para implementaciones estables
  • .NET 5.0+ : marco moderno con mejoras de rendimiento
  • .NET Standard 2.0 : Máxima compatibilidad entre plataformas

Al implementar en contenedores Docker , .NET 6.0 o posterior proporciona tamaños de imagen más pequeños y un mejor rendimiento. Para Azure Functions , se admiten tanto .NET 6.0 como .NET Framework.

¿Cómo instalo IronOCR?

Existen dos métodos simples para descargar e instalar IronOCR:

  1. Uso del Administrador de paquetes NuGet de Visual Studio
  2. Uso de la línea de comandos de Visual Studio

¿Cuándo debería utilizar el Administrador de paquetes NuGet en lugar de la línea de comandos?

Elija entre la GUI del Administrador de paquetes NuGet y la línea de comandos según su flujo de trabajo:

La GUI del Administrador de paquetes NuGet funciona mejor cuando:

La línea de comandos (consola del administrador de paquetes) es excelente cuando:

  • Te sientes cómodo con las interfaces de comando.
  • Sigues implementaciones programadas
  • Necesita versiones específicas rápidamente
  • Utiliza opciones de instalación avanzadas

Ambos métodos logran resultados idénticos: elija según su comodidad y requisitos.

¿Qué paquetes de idiomas adicionales podría necesitar?

IronOCR admite 125 idiomas internacionales a través de paquetes especializados. Para el procesamiento de facturas, considere:

Los paquetes de idiomas se instalan junto con el paquete principal IronOCR y mejoran significativamente la precisión del texto que no está en inglés.

Uso del Administrador de paquetes NuGet de Visual Studio

Incluya IronOCR en su proyecto C# utilizando el Administrador de paquetes NuGet de Visual Studio.

Vaya a Herramientas > Administrador de paquetes NuGet > Administrar paquetes NuGet para la solución

IDE de Visual Studio que muestra la interfaz del Administrador de paquetes NuGet con los resultados de búsqueda de paquetes IronOCR, incluyendo las opciones de instalación y los detalles del paquete para configurar las capacidades de OCR de facturas. Administrador de Paquetes NuGet

Busque IronOCR e instale el paquete en su proyecto.

Interfaz del Administrador de paquetes NuGet que muestra IronOCR v2022.1.0 y paquetes de idiomas relacionados, incluyendo capacidades de OCR para árabe, hebreo y español, con números de versión y descripciones para cada paquete de reconocimiento especializado. Selecciona el paquete IronOCR en el Administrador de Paquetes NuGet

Instale paquetes de idiomas adicionales utilizando el mismo método.

Uso de la línea de comandos de Visual Studio

  1. En Visual Studio, ve a Herramientas > Administrador de Paquetes NuGet > Consola del Administrador de Paquetes
  2. Ingrese este comando en la consola del administrador de paquetes:

    Install-Package IronOcr

La consola del Administrador de paquetes de Visual Studio muestra la ejecución correcta del comando "Install-Package IronOCR", lo que demuestra el método de instalación de la biblioteca OCR mediante línea de comandos. Consola del Administrador de Paquetes

El paquete se descarga e instala en su proyecto actual, listo para usar.

¿Cómo extraigo datos de las facturas utilizando IronOCR?

Extraiga datos de facturas fácilmente con IronOCR utilizando solo unas pocas líneas de código. Esto reemplaza la entrada manual de datos y agiliza su flujo de trabajo.

A continuación se muestra un ejemplo de factura para extracción de texto:

Ejemplo de factura con datos del cliente, número de factura INV/2023/00039, tres partidas por servicios de limpieza por un total de $80.50, que muestra un formato de factura típico para la extracción con OCR. La factura de muestra

Extraigamos todos los datos de esta factura:

using IronOcr;
using System;

// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();

// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:

- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

Invoice formats vary between vendors, but IronOCR provides flexible solutions:

1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___

For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.

### What Are Common Extraction Patterns for Invoice Data?

Invoice data follows recognizable patterns extractable using regular expressions with OCR results:

```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

public class `InvoiceDataExtractor`
{
    private readonly `IronTesseract` ocr;

    public `InvoiceDataExtractor`()
    {
        ocr = new `IronTesseract`();
        // Configure for optimal invoice reading
        `ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
        `ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
    }

    public `InvoiceData` `ExtractInvoiceData`(string imagePath)
    {
        var invoiceData = new `InvoiceData`();

        using (var input = new `OcrInput`(imagePath))
        {
            // Apply filters for better accuracy
            input.`EnhanceResolution`(300);
            `input.Sharpen`();

            var result = `ocr.Read`(input);
            var text = `result.Text`;

            // Extract invoice number
            invoiceData.`InvoiceNumber` = `ExtractPattern`(text, 
                @"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");

            // Extract dates
            invoiceData.`InvoiceDate` = `ExtractDate`(text, 
                @"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
            invoiceData.`DueDate` = `ExtractDate`(text, 
                @"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");

            // Extract amounts
            `invoiceData.Total` = `ExtractAmount`(text, 
                @"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
            `invoiceData.Tax` = `ExtractAmount`(text, 
                @"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");

            // Extract vendor information
            invoiceData.`VendorName` = `ExtractVendorName`(text);

            // Extract line items using table detection
            invoiceData.`LineItems` = `ExtractLineItems`(result);

            // Extract any barcodes found
            if (`result.Barcodes`.Length > 0)
            {
                invoiceData.`BarcodeValues` = new List<string>();
                foreach (var barcode in `result.Barcodes`)
                {
                    invoiceData.`BarcodeValues`.Add(`barcode.Value`);
                }
            }
        }

        return invoiceData;
    }

    private string `ExtractPattern`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        return `match.Success` ? `match.Value` : `string.Empty`;
    }

    private `DateTime`? `ExtractDate`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
                return date;
        }
        return null;
    }

    private decimal `ExtractAmount`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            var amountStr = `match.Groups`[1].Value.Replace(",", "");
            if (decimal.`TryParse`(amountStr, out decimal amount))
                return amount;
        }
        return 0;
    }

    private string `ExtractVendorName`(string text)
    {
        // Usually the vendor name appears in the first few lines
        var lines = `text.Split`('\n');
        if (`lines.Length` > 0)
        {
            // Simple heuristic: first non-empty line that's not a common header
            foreach (var line in lines)
            {
                var trimmed = `line.Trim`();
                if (!string.`IsNullOrEmpty`(trimmed) && 
                    !trimmed.`ToLower`().Contains("invoice") &&
                    `trimmed.Length` > 3)
                {
                    return trimmed;
                }
            }
        }
        return `string.Empty`;
    }

    private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
    {
        var lineItems = new List<`LineItem`>();

        // Use IronOCR's table detection capabilities
        if (`result.Tables` != null && `result.Tables`.Count > 0)
        {
            foreach (var table in `result.Tables`)
            {
                // Process each row as a potential line item
                for (int i = 1; i < table.`RowCount`; i++) // Skip header row
                {
                    var item = new `LineItem`
                    {
                        Description = table[i, 0]?.Text ?? "",
                        Quantity = `ParseQuantity`(table[i, 1]?.Text),
                        `UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
                        Total = `ParseAmount`(table[i, 3]?.Text)
                    };

                    if (!string.`IsNullOrEmpty`(`item.Description`))
                        `lineItems.Add`(item);
                }
            }
        }

        return lineItems;
    }

    private int `ParseQuantity`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d]", "");
        return int.`TryParse`(cleaned, out int qty) ? qty : 0;
    }

    private decimal `ParseAmount`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d.]", "");
        return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
    }
}

// Data classes for structured invoice information
public class `InvoiceData`
{
    public string `InvoiceNumber` { get; set; }
    public `DateTime`? `InvoiceDate` { get; set; }
    public `DateTime`? `DueDate` { get; set; }
    public string `VendorName` { get; set; }
    public decimal Total { get; set; }
    public decimal Tax { get; set; }
    public List<`LineItem`> `LineItems` { get; set; }
    public List<string> `BarcodeValues` { get; set; }
}

public class `LineItem`
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal `UnitPrice` { get; set; }
    public decimal Total { get; set; }
}
using IronOcr;
using System;

// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();

// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:

- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

Invoice formats vary between vendors, but IronOCR provides flexible solutions:

1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___

For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.

### What Are Common Extraction Patterns for Invoice Data?

Invoice data follows recognizable patterns extractable using regular expressions with OCR results:

```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

public class `InvoiceDataExtractor`
{
    private readonly `IronTesseract` ocr;

    public `InvoiceDataExtractor`()
    {
        ocr = new `IronTesseract`();
        // Configure for optimal invoice reading
        `ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
        `ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
    }

    public `InvoiceData` `ExtractInvoiceData`(string imagePath)
    {
        var invoiceData = new `InvoiceData`();

        using (var input = new `OcrInput`(imagePath))
        {
            // Apply filters for better accuracy
            input.`EnhanceResolution`(300);
            `input.Sharpen`();

            var result = `ocr.Read`(input);
            var text = `result.Text`;

            // Extract invoice number
            invoiceData.`InvoiceNumber` = `ExtractPattern`(text, 
                @"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");

            // Extract dates
            invoiceData.`InvoiceDate` = `ExtractDate`(text, 
                @"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
            invoiceData.`DueDate` = `ExtractDate`(text, 
                @"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");

            // Extract amounts
            `invoiceData.Total` = `ExtractAmount`(text, 
                @"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
            `invoiceData.Tax` = `ExtractAmount`(text, 
                @"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");

            // Extract vendor information
            invoiceData.`VendorName` = `ExtractVendorName`(text);

            // Extract line items using table detection
            invoiceData.`LineItems` = `ExtractLineItems`(result);

            // Extract any barcodes found
            if (`result.Barcodes`.Length > 0)
            {
                invoiceData.`BarcodeValues` = new List<string>();
                foreach (var barcode in `result.Barcodes`)
                {
                    invoiceData.`BarcodeValues`.Add(`barcode.Value`);
                }
            }
        }

        return invoiceData;
    }

    private string `ExtractPattern`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        return `match.Success` ? `match.Value` : `string.Empty`;
    }

    private `DateTime`? `ExtractDate`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
                return date;
        }
        return null;
    }

    private decimal `ExtractAmount`(string text, string pattern)
    {
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
        {
            var amountStr = `match.Groups`[1].Value.Replace(",", "");
            if (decimal.`TryParse`(amountStr, out decimal amount))
                return amount;
        }
        return 0;
    }

    private string `ExtractVendorName`(string text)
    {
        // Usually the vendor name appears in the first few lines
        var lines = `text.Split`('\n');
        if (`lines.Length` > 0)
        {
            // Simple heuristic: first non-empty line that's not a common header
            foreach (var line in lines)
            {
                var trimmed = `line.Trim`();
                if (!string.`IsNullOrEmpty`(trimmed) && 
                    !trimmed.`ToLower`().Contains("invoice") &&
                    `trimmed.Length` > 3)
                {
                    return trimmed;
                }
            }
        }
        return `string.Empty`;
    }

    private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
    {
        var lineItems = new List<`LineItem`>();

        // Use IronOCR's table detection capabilities
        if (`result.Tables` != null && `result.Tables`.Count > 0)
        {
            foreach (var table in `result.Tables`)
            {
                // Process each row as a potential line item
                for (int i = 1; i < table.`RowCount`; i++) // Skip header row
                {
                    var item = new `LineItem`
                    {
                        Description = table[i, 0]?.Text ?? "",
                        Quantity = `ParseQuantity`(table[i, 1]?.Text),
                        `UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
                        Total = `ParseAmount`(table[i, 3]?.Text)
                    };

                    if (!string.`IsNullOrEmpty`(`item.Description`))
                        `lineItems.Add`(item);
                }
            }
        }

        return lineItems;
    }

    private int `ParseQuantity`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d]", "");
        return int.`TryParse`(cleaned, out int qty) ? qty : 0;
    }

    private decimal `ParseAmount`(string text)
    {
        if (string.`IsNullOrEmpty`(text)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d.]", "");
        return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
    }
}

// Data classes for structured invoice information
public class `InvoiceData`
{
    public string `InvoiceNumber` { get; set; }
    public `DateTime`? `InvoiceDate` { get; set; }
    public `DateTime`? `DueDate` { get; set; }
    public string `VendorName` { get; set; }
    public decimal Total { get; set; }
    public decimal Tax { get; set; }
    public List<`LineItem`> `LineItems` { get; set; }
    public List<string> `BarcodeValues` { get; set; }
}

public class `LineItem`
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal `UnitPrice` { get; set; }
    public decimal Total { get; set; }
}
$vbLabelText   $csharpLabel

Procesamiento de facturas para extraer datos específicos de las facturas

Extraiga datos específicos de la factura, como números de factura de clientes, con este código:

using IronOcr;
using System;
using System.Text.`RegularExpressions`;

// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();

// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
    // Perform OCR on the image
    var result = `ocr.Read`(input);

    // Define a regular expression pattern for the invoice number
    var linePattern = @"INV\/\d{4}\/\d{5}";

    // Match the pattern in the extracted text
    var lineMatch = Regex.Match(`result.Text`, linePattern);

    // Check if the pattern matches any part of the text
    if (`lineMatch.Success`)
    {
        // If a match is found, print the invoice number
        var lineValue = `lineMatch.Value`;
        Console.`WriteLine`("Customer Invoice number: " + lineValue);
    }
}
using IronOcr;
using System;
using System.Text.`RegularExpressions`;

// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();

// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
    // Perform OCR on the image
    var result = `ocr.Read`(input);

    // Define a regular expression pattern for the invoice number
    var linePattern = @"INV\/\d{4}\/\d{5}";

    // Match the pattern in the extracted text
    var lineMatch = Regex.Match(`result.Text`, linePattern);

    // Check if the pattern matches any part of the text
    if (`lineMatch.Success`)
    {
        // If a match is found, print the invoice number
        var lineValue = `lineMatch.Value`;
        Console.`WriteLine`("Customer Invoice number: " + lineValue);
    }
}
$vbLabelText   $csharpLabel

La consola de depuración de Visual Studio muestra la creación exitosa de un PDF con el número de factura del cliente INV/2023/00039 extraído mediante IronOCR, lo que confirma que el proceso de OCR se completó sin errores. Escaneo de Facturas

Para escenarios de extracción complejos, utilice configuraciones de OCR especializadas para optimizar sus tipos de factura. La clase OcrResult proporciona información detallada sobre cada elemento reconocido, incluyendo coordenadas y niveles de confianza para la validación.

¿Cuáles son los beneficios clave de la API de OCR de facturas?

La API de OCR de facturas de IronOCR transforma el procesamiento de facturas a través del aprendizaje automático y la visión artificial. Esta tecnología convierte el texto de la factura en formatos legibles por máquina, simplificando la extracción de datos para su análisis, integración y mejora de procesos. Ofrece una automatización robusta para el procesamiento de facturas, mejorando la precisión y optimizando flujos de trabajo como las cuentas a pagar.

IronOCR ofrece una precisión excepcional utilizando resultados Tesseract optimizados sin configuración adicional. Soporta TIFF de frame multipágina, archivos PDF y todos los formatos de imagen populares. La lectura de códigos de barras a partir de imágenes agrega otra dimensión de extracción.

Beneficios clave del procesamiento de facturas:

  1. Ahorro de tiempo : reduce horas a segundos
  2. Precisión : Minimiza los errores con una puntuación de confianza
  3. Escalabilidad : procesa miles con subprocesos múltiples
  4. Integración : Exportación a archivos PDF con capacidad de búsqueda o formatos estructurados
  5. Reducción de costos : menores costos operativos

La flexibilidad de implementación de la biblioteca permite la integración en sistemas existentes (locales, en la nube o híbridos). Con soporte para Docker , Azure y AWS , IronOCR se adapta a sus necesidades.

Los entornos de producción se benefician de las opciones de licencia de IronOCR, que incluyen soporte dedicado y actualizaciones periódicas . Las guías de resolución de problemas y el soporte de ingeniería de la biblioteca garantizan una implementación sin problemas.

Visite la página de inicio para obtener más información sobre IronOCR. Para obtener tutoriales de OCR de facturas adicionales, consulte esta guía detallada de OCR de facturas . Para aprender a usar la visión artificial para los campos de factura, consulte este tutorial de visión artificial .

Preguntas Frecuentes

¿Cómo puedo automatizar el procesamiento de datos de facturas usando OCR?

Puede usar IronOCR para automatizar el procesamiento de datos de facturas aprovechando sus algoritmos de aprendizaje automático. IronOCR extrae detalles como información del proveedor, números de factura y precios de facturas digitales y escaneadas, reduciendo errores de entrada manual e incrementando la eficiencia.

¿Qué pasos se involucran en la configuración de una API de Factura OCR?

Para configurar una API de Factura OCR usando IronOCR, comience descargando e instalando la biblioteca a través del Gestor de Paquetes NuGet de Visual Studio. A continuación, cree un nuevo proyecto en C#, integre IronOCR, y use sus métodos para cargar y leer archivos de imagen para la extracción de texto.

¿Puede IronOCR extraer datos específicos como los números de factura?

Sí, IronOCR puede extraer datos específicos como los números de factura. Utiliza expresiones regulares para coincidir patrones en el texto extraído, permitiéndole obtener información específica de las facturas.

¿Cuáles son algunas características de IronOCR que benefician el procesamiento de facturas?

IronOCR incluye características como preprocesamiento de imágenes, reconocimiento de códigos de barras, y análisis de archivos. Estas mejoran su capacidad para extraer y procesar texto con precisión de varios formatos de factura, mejorando la captura de datos y la eficiencia del flujo de trabajo.

¿Cómo mejora el preprocesamiento de imágenes los resultados de OCR?

El preprocesamiento de imágenes en IronOCR ayuda a mejorar los resultados de OCR al optimizar la calidad de la imagen antes de la extracción de texto. Esto incluye operaciones como ajuste de contraste y reducción de ruido, que pueden llevar a una extracción de datos más precisa de las facturas.

¿Es posible usar IronOCR para facturas tanto digitales como escaneadas?

Sí, IronOCR es capaz de procesar facturas tanto digitales como escaneadas. Utiliza técnicas avanzadas de aprendizaje automático y visión por computadora para extraer texto con precisión de varios formatos y calidades de imagen.

¿Cómo maneja IronOCR múltiples formatos de página y tipos de archivo?

IronOCR admite múltiples formatos de página y tipos populares de archivos de imagen y PDF. Puede extraer texto eficientemente de documentos complejos, haciéndolo versátil para varias aplicaciones de procesamiento de facturas.

¿Dónde pueden los desarrolladores encontrar tutoriales para usar IronOCR?

Los desarrolladores pueden encontrar tutoriales y recursos adicionales en el sitio web de IronOCR. El sitio ofrece una variedad de materiales de aprendizaje, incluidos guías prácticas y artículos de blog para aplicar IronOCR en diferentes escenarios.

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