Saltar al pie de página
USANDO IRONOCR

API de factura OCR (Tutorial para desarrolladores)

La API de OCR para facturas automatiza la extracción de datos de facturas mediante el aprendizaje automático, lo que elimina los errores de introducción manual y captura con precisión los datos de los proveedores, los números de factura y los precios, tanto de documentos digitales como escaneados. Este tutorial muestra cómo crear una solución de OCR para facturas con IronOCR.

Al aprovechar el aprendizaje automático y la visión artificial, la tecnología OCR para facturas transforma los datos de las facturas en formatos listos para su procesamiento automatizado. Aprenderás a abordar retos comunes como los retrasos, los costes y los errores derivados de la introducción manual de datos, al tiempo que extraes con precisión la información del proveedor, los números de factura y los precios de cualquier formato de factura.

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

¿Qué es IronOCR?

IronOCR, desarrollado por Iron Software, ofrece herramientas de OCR completas 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 a la perfección con diversos lenguajes y plataformas, lo que reduce los errores de introducción manual de datos y mejora la eficiencia. Los datos extraídos se transfieren directamente a los sistemas existentes para su análisis y la toma de decisiones. Características como el preprocesamiento de imágenes, el reconocimiento de BarCodes y el análisis flexible de archivos aumentan su versatilidad. IronOCR permite a los desarrolladores incorporar un reconocimiento de texto robusto 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 global de facturas. Entre las funciones avanzadas se incluye la visión artificial para detectar texto automáticamente, lo que resulta especialmente útil para facturas con diseños variables. Además, IronOCR ofrece capacidades de procesamiento multihilo para gestionar de forma eficiente el procesamiento de grandes volúmenes de facturas.

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

IronOCR ofrece ventajas convincentes para las aplicaciones de procesamiento de facturas. En primer lugar, ofrece una precisión excepcional gracias a su motor Tesseract 5 optimizado, mejorado específicamente para aplicaciones .NET. La biblioteca admite diversos formatos de factura, desde documentos escaneados hasta archivos PDF, e incluso escaneos de baja calidad.

Los filtros de optimización de imágenes integrados 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 el entrenamiento de idiomas personalizado, lo que permite la optimización para fuentes o formatos únicos que suelen encontrarse en sus tipos de factura.

¿Qué diferencia a IronOCR de otras bibliotecas de OCR?

IronOCR se distingue por su sencilla capacidad de OCR en una sola línea, al tiempo que mantiene características de nivel Enterprise. A diferencia de las implementaciones básicas de Tesseract, IronOCR proporciona una API .NET gestionada que maneja operaciones complejas a la perfección. La biblioteca ofrece métodos especializados de lectura de documentos para diversos tipos de documentos, incluyendo soporte específico para la lectura de tablas en documentos, algo esencial para las partidas de factura.

El Asistente de filtros determina automáticamente la mejor configuración de preprocesamiento para tus imágenes de facturas específicas, eliminando las conjeturas en la optimización. IronOCR también ofrece amplias capacidades de depuración, lo que permite a los desarrolladores visualizar lo que ve el motor OCR y resolver eficazmente los problemas de extracción.

¿Qué requisitos previos necesito?

Antes de trabajar con IronOCR, asegúrese de que se cumplen los siguientes requisitos previos:

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

Cumplir estos requisitos previos te prepara para empezar a trabajar con IronOCR con éxito.

IronOCR ofrece 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 últimas características 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 de aplicaciones móviles pueden aprovechar las directrices de IronOCR para implementaciones en Android e iOS, lo que la hace adecuada para aplicaciones .NET MAUI.

¿Qué nivel de conocimientos de C# necesito?

Basta con tener conocimientos intermedios de C# para la implementación básica del OCR de facturas. Debes sentirte cómodo con:

  • Conceptos de programación orientada a objetos
  • Trabajar con flujos y E/S de archivos
  • Patrones básicos de async/await
  • Expresiones regulares para la coincidencia de patrones
  • Gestión de excepciones para una gestión robusta de los errores

El diseño intuitivo de la API de IronOCR hace que no sea necesario tener un profundo conocimiento en procesamiento de imágenes o aprendizaje automático. La biblioteca gestiona operaciones complejas internamente, lo que le permite centrarse en la lógica de negocio. Los principiantes pueden empezar con ejemplos sencillos de OCR.

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

Para empezar con IronOCR, primero crea un nuevo proyecto de Visual Studio.

Abre Visual Studio, ve a Archivos, pasa el cursor por Nuevo y haz clic en Proyecto.

El IDE de Visual Studio muestra el menú Archivo abierto con las opciones Nuevo Proyecto

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

Cuadro de diálogo Aplicación de Consola

Aparece una nueva ventana. Introduzca el nombre y la ubicación de su proyecto y, a continuación, haga clic en Siguiente.

Ventana de configuración de nuevo proyecto de Visual Studio que muestra la configuración de un proyecto para una aplicación de consola denominada Configuración del Proyecto

Por último, selecciona el marco de destino y haz clic en Crear.

Asistente de creación de proyectos de Visual Studio que muestra el paso Marco de Trabajo Objetivo

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

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

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

  • Aplicaciones de consola: ideales para el procesamiento por lotes o herramientas de línea de comandos
  • Aplicaciones web: Perfectas para crear API o servicios basados en la web
  • Windows Forms/WPF: Adecuado para aplicaciones de escritorio con interfaz gráfica de usuario (GUI)
  • Aplicaciones .NET MAUI: Para soluciones multiplataforma

Para el procesamiento de grandes volúmenes, considere la posibilidad de implementar IronOCR en un servicio de Windows o en una arquitectura de microservicios. Las capacidades de seguimiento del progreso de la biblioteca facilitan la supervisión de operaciones de larga duración.

¿A qué versión de .NET Framework debo dirigirme?

IronOCR ofrece una amplia compatibilidad con todas las versiones de .NET. Para nuevos proyectos, utilice .NET 6.0 o superior para obtener un rendimiento óptimo y las últimas funciones. La biblioteca mantiene una excelente compatibilidad con versiones anteriores:

  • .NET Framework 4.6.2+: Para aplicaciones Enterprise heredadas
  • .NET Core 3.1: Soporte a largo plazo para implementaciones estables
  • .NET Framework 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 ofrece imágenes de menor tamaño y un mejor rendimiento. En el caso de Azure Functions, se admiten tanto .NET 6.0 como .NET Framework.

¿Cómo instalo IronOCR?

Existen dos métodos sencillos 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 debo usar el gestor de paquetes NuGet y cuándo la línea de comandos?

Elige entre la interfaz gráfica de usuario de NuGet Package Manager y la línea de comandos en función de tu flujo de trabajo:

La interfaz gráfica de usuario del gestor de paquetes NuGet funciona mejor cuando:

La línea de comandos (Consola del Administrador de paquetes) destaca cuando:

  • Te sientes cómodo con las interfaces de comandos
  • Sigues implementaciones automatizadas
  • Necesitas versiones específicas rápidamente
  • Utiliza opciones de instalación avanzadas

Ambos métodos ofrecen resultados idénticos; elija el que le resulte más cómodo y se adapte a sus necesidades.

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

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

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

Uso del Administrador de paquetes NuGet de Visual Studio

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

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

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

Busca IronOCR e instala el paquete en tu proyecto.

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

Instala 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. Introduzca este comando en la consola del gestor de paquetes:

    Install-Package IronOcr

Consola del Administrador de paquetes de Visual Studio que muestra la ejecución correcta del comando Consola del Administrador de Paquetes

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

¿Cómo extraigo datos de facturas utilizando IronOCR?

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

Aquí hay un ejemplo de factura para la extracción de texto:

Sample invoice document displaying customer details, invoice number INV/2023/00039, three line items for cleaning services totaling $80.50, demonstrating a typical invoice format for OCR extraction 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 mismas

Extraiga datos específicos de facturas, como los números de factura de los 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

Consola de depuración de Visual Studio que muestra la creación correcta 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 casos de extracción complejos, utilice configuraciones de OCR especializadas para optimizar el proceso según sus tipos de factura. La clase OcrResult proporciona información detallada sobre cada elemento reconocido, incluyendo coordenadas y puntuaciones de confianza para su validación.

¿Cuáles son las principales ventajas de la API de OCR para facturas?

La API de OCR para facturas de IronOCR transforma el procesamiento de facturas mediante el aprendizaje automático y la visión artificial. Esta tecnología convierte el texto de las facturas a formatos legibles por máquina, lo que simplifica la extracción de datos para su análisis, integración y mejora de procesos. Ofrece una sólida automatización para el procesamiento de facturas, lo que mejora la precisión y optimiza flujos de trabajo como el de cuentas por pagar.

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

Ventajas clave para el procesamiento de facturas:

  1. Ahorro de tiempo: de horas a segundos
  2. Precisión: Minimizar los errores con la puntuación de confianza
  3. Escalabilidad: procesa miles de elementos con multithreading
  4. Integración: Exportación a archivos PDF con capacidad de búsqueda o formatos estructurados
  5. Reducción de costes: menores costes operativos

La flexibilidad de implementación de la biblioteca permite su integración en sistemas existentes, ya sean locales, en la nube o híbridos. Con compatibilidad con Docker, Azure y AWS, IronOCR se adapta a tus necesidades.

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

Visita la página de inicio para obtener más información sobre IronOCR. Para obtener más tutoriales sobre OCR de facturas, consulta esta guía detallada sobre OCR de facturas. Para obtener más información sobre el uso de la visión artificial en los campos de las facturas, consulta 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

Equipo de soporte de Iron

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