Ir para o conteúdo do rodapé
UTILIZANDO O IRONOCR

API de OCR para faturas (Tutorial para desenvolvedores)

A API de OCR de faturas automatiza a extração de dados de faturas usando machine learning, eliminando erros de inserção manual enquanto captura com precisão detalhes de fornecedores, números de faturas e preços, tanto de documentos digitais quanto digitalizados. Este tutorial demonstra como construir uma solução de OCR de faturas com IronOCR.

Ao aproveitar o machine learning e a visão computacional, a tecnologia de OCR de faturas transforma dados de faturas em formatos prontos para processamento automatizado. Você aprenderá a enfrentar desafios comuns como atrasos na inserção de dados manuais, custos e erros, enquanto extrai com precisão informações de fornecedores, números de faturas e preços de qualquer formato de fatura.

Este artigo usa IronOCR, uma API líder de OCR para faturas para desenvolvedores .NET.

O que é IronOCR?

IronOCR, desenvolvido pela Iron Software, fornece ferramentas abrangentes de OCR para desenvolvedores. Ele usa machine learning e visão computacional para extrair texto de documentos digitalizados, imagens e PDFs, permitindo processamento automatizado. Suas APIs se integram perfeitamente a várias linguagens e plataformas, reduzindo erros de inserção manual de dados e melhorando a eficiência. Os dados extraídos fluem diretamente para sistemas existentes para análise e tomada de decisões. Recursos como pré-processamento de imagens, reconhecimento de códigos de barras e análise flexível de arquivos aumentam sua versatilidade. IronOCR capacita os desenvolvedores a incorporarem reconhecimento de texto robusto em seus aplicativos.

A biblioteca suporta 125 idiomas internacionais através de pacotes de idiomas especializados, tornando-a ideal para o processamento global de faturas. Recursos avançados incluem visão computacional para encontrar texto automaticamente, particularmente útil para faturas com layouts variados. Além disso, o IronOCR oferece capacidades de processamento multithread para lidar com o processamento de faturas em grande volume com eficiência.

Por que eu deveria usar IronOCR para Processamento de Faturas?

IronOCR oferece vantagens atraentes para aplicativos de processamento de faturas. Primeiro, ele oferece precisão excepcional através de seu motor Tesseract 5 otimizado, especificamente aprimorado para aplicativos .NET. A biblioteca lida com vários formatos de fatura, desde documentos digitalizados até arquivos PDF, e até mesmo digitalizações de baixa qualidade.

Filtros de otimização de imagem embutidos melhoram automaticamente a qualidade da imagem antes do processamento, resultando em extração de texto mais precisa. Para faturas com requisitos específicos, o IronOCR suporta treinamento de linguagem personalizada, permitindo otimização para fontes ou formatos únicos comumente encontrados nos tipos de faturas.

O que torna o IronOCR diferente de outras bibliotecas OCR?

IronOCR se destaca por meio de capacidade de OCR de uma linha simples enquanto mantém recursos em nível empresarial. Ao contrário de implementações Tesseract brutas, o IronOCR oferece uma API .NET gerenciada que lida com operações complexas de forma contínua. A biblioteca oferece métodos especializados de leitura de documentos para vários tipos de documentos, incluindo suporte dedicado para leitura de tabelas em documentos, essencial para itens de linha de faturas.

O Assistente de Filtro determina automaticamente as melhores configurações de pré-processamento para suas imagens de faturas específicas, eliminando suposições na otimização. IronOCR também oferece capacidades abrangentes de depuração, permitindo que os desenvolvedores visualizem o que o motor de OCR vê e solucionem problemas de extração efetivamente.

Quais são os pré-requisitos?

Antes de trabalhar com o IronOCR, certifique-se de que estes pré-requisitos estejam em vigor:

  1. Um ambiente de desenvolvimento adequado com um IDE como o Visual Studio instalado
  2. Compreensão básica da programação C# para compreender e modificar exemplos de código com eficácia
  3. Biblioteca IronOCR instalada em seu projeto via NuGet Package Manager ou linha de comando

Cumprir esses pré-requisitos prepara você para trabalhar com o IronOCR com sucesso.

IronOCR fornece guias de configuração abrangentes para Windows, Linux e macOS. A biblioteca suporta implantação em nuvem com tutoriais específicos para AWS Lambda e Funções do Azure.

Qual versão do Visual Studio eu devo usar?

IronOCR suporta versões do Visual Studio de 2017 até os lançamentos mais recentes. Para compatibilidade ideal e acesso aos recursos mais recentes do C#, é recomendado o Visual Studio 2019 ou 2022. A biblioteca é totalmente compatível com .NET Framework, .NET Core e .NET 5+, garantindo flexibilidade no seu ambiente de desenvolvimento.

Para desenvolvimento multiplataforma, o Visual Studio Code com a extensão de C# funciona bem. Desenvolvedores móveis podem aproveitar as orientações do IronOCR para implementações em Android e iOS, tornando-o adequado para aplicações .NET MAUI.

Qual Nível de Conhecimento em C# Preciso?

Conhecimento intermediário em C# é suficiente para implementar OCR básico em notas fiscais. Você deve estar à vontade com:

  • Conceitos de programação orientada a objetos
  • Trabalhar com streams e E/S de arquivos
  • Padrões básicos de async/await
  • Expressões regulares para correspondência de padrões
  • Tratamento de exceções para gestão robusta de erros

O design intuitivo da API do IronOCR significa que não é necessário ter profundo conhecimento em processamento de imagem ou aprendizado de máquina. A biblioteca lida com operações complexas internamente, permitindo que você se concentre na lógica de negócios. Iniciantes podem começar com exemplos simples de OCR.

Como faço para criar um novo projeto no Visual Studio?

Para começar com o IronOCR, primeiro crie um novo projeto no Visual Studio.

Abra o Visual Studio, vá em Arquivos, passe o mouse sobre Novo e clique em Projeto.

Visual Studio IDE mostrando o menu Arquivo aberto com as opções 'Novo' e 'Projeto' destacadas, demonstrando o primeiro passo na criação de um novo projeto de OCR para Faturas Novo projeto

Na nova janela, selecione Aplicativo de Console e clique em Avançar.

Caixa de diálogo 'Criar um novo projeto' do Visual Studio mostrando vários modelos de projeto, com a opção 'Aplicativo de Console' destacada para a criação de um aplicativo de linha de comando .NET Core adequado para processamento de OCR de faturas Aplicativo de Console

Uma nova janela será aberta. Insira o nome e a localização do seu projeto, em seguida clique em Avançar.

Janela de configuração do novo projeto do Visual Studio mostrando a configuração do projeto para um Aplicativo de Console chamado 'IronOCR' com seleção de linguagem C# e plataforma de destino Windows para a implementação da API de OCR de faturas Configuração do projeto

Finalmente, selecione o framework de destino e clique em Criar.

Assistente de criação de projeto do Visual Studio mostrando a etapa 'Informações adicionais' com o framework .NET 5.0 selecionado para compatibilidade ideal do IronOCR no aplicativo de processamento de faturas Estrutura Alvo

Seu novo projeto do Visual Studio está pronto. Vamos instalar o IronOCR.

Qual Tipo de Projeto Funciona Melhor para Aplicações de OCR?

Embora este tutorial utilize um Aplicativo de Console pela simplicidade, o IronOCR suporta vários tipos de projetos:

  • Aplicativos de Console: Ideais para processamento em lote ou ferramentas de linha de comando
  • Aplicativos Web: Perfeitos para construir APIs ou serviços baseados na web
  • Windows Forms/WPF: Adequado para aplicativos de desktop com GUI
  • Aplicativos .NET MAUI: Para soluções multiplataforma

Para processamento de alto volume, considere implementar o IronOCR em um Serviço Windows ou arquitetura de microsserviços. As capacidades de rastreamento de progresso da biblioteca facilitam a monitoração de operações de longa duração.

Qual Versão do .NET Framework Devo Almejar?

O IronOCR oferece compatibilidade ampla entre as versões do .NET. Para novos projetos, mire no .NET 6.0 ou superior para desempenho otimizado e recursos mais recentes. A biblioteca mantém excelente compatibilidade retroativa:

  • .NET Framework 4.6.2+: Para aplicações empresariais legadas
  • .NET Core 3.1: Suporte de longo prazo para implantações estáveis
  • .NET 5.0+: Framework moderno com melhorias de desempenho
  • .NET Standard 2.0: Máxima compatibilidade entre plataformas

Ao implantar em contêineres Docker, o .NET 6.0 ou posterior oferece tamanhos de imagem menores e melhor desempenho. Para Funções Azure, tanto o .NET 6.0 quanto o .NET Framework são suportados.

Como Instalo o IronOCR?

Existem dois métodos simples para baixar e instalar o IronOCR:

  1. Usando o Gerenciador de Pacotes NuGet do Visual Studio
  2. Usando a Linha de Comando do Visual Studio

Quando Devo Usar o Gerenciador de Pacotes NuGet versus a Linha de Comando?

Escolha entre o GUI do Gerenciador de Pacotes NuGet e a linha de comando com base no seu fluxo de trabalho:

GUI do Gerenciador de Pacotes NuGet funciona melhor quando:

  • Você é novo em pacotes NuGet
  • Você quer navegar pelos pacotes de idiomas IronOCR
  • Você prefere confirmação visual
  • Você gerencia múltiplos pacotes

Linha de Comando (Console do Gerenciador de Pacotes) se destaca quando:

  • Você está confortável com interfaces de comando
  • Você segue implantações roteirizadas
  • Você precisa de versões específicas rapidamente
  • Você usa opções avançadas de instalação

Ambos os métodos alcançam resultados idênticos—escolha com base no conforto e nos requisitos.

Quais Pacotes de Idiomas Adicionais Eu Posso Precisar?

O IronOCR suporta 125 idiomas internacionais através de pacotes especializados. Para processamento de faturas, considere:

Os pacotes de idiomas são instalados juntamente com o pacote principal do IronOCR e melhoram significativamente a precisão para textos não ingleses.

Usando o Gerenciador de Pacotes NuGet do Visual Studio

Inclua o IronOCR no seu projeto C# usando o Gerenciador de Pacotes NuGet do Visual Studio.

Navegue para Ferramentas > Gerenciador de Pacotes NuGet > Gerenciar Pacotes NuGet para a Solução

Visual Studio IDE exibindo a interface do Gerenciador de Pacotes NuGet com os resultados da pesquisa do pacote IronOCR, mostrando opções de instalação e detalhes do pacote para configurar as capacidades de OCR de faturas Gerenciador de Pacotes NuGet

Procure por IronOCR e instale o pacote no seu projeto.

Interface do Gerenciador de Pacotes NuGet exibindo IronOCR v2022.1.0 e pacotes de idiomas relacionados, incluindo capacidades de OCR em Árabe, Hebraico e Espanhol, com números de versão e descrições para cada pacote de reconhecimento especializado Selecione o pacote IronOCR na interface do Gerenciador de Pacotes NuGet

Instale pacotes de idiomas adicionais usando o mesmo método.

Usando a linha de comando do Visual Studio

  1. No Visual Studio, vá para Ferramentas > Gerenciador de Pacotes NuGet > Console do Gerenciador de Pacotes
  2. Insira este comando no Console do Gerenciador de Pacotes:

    Install-Package IronOcr

Console do Gerenciador de Pacotes do Visual Studio mostrando a execução bem-sucedida do comando 'Install-Package IronOCR', demonstrando o método de instalação pela linha de comando para a biblioteca de OCR Console do Gerenciador de Pacotes

O pacote é baixado e instalado no seu projeto atual, pronto para uso.

Como Posso Extrair Dados de Faturas Usando o IronOCR?

Extraia dados de faturas facilmente com IronOCR usando apenas algumas linhas de código. Isso substitui a entrada manual de dados e simplifica seu fluxo de trabalho.

Aqui está um exemplo de fatura para extração 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 A fatura de exemplo

Vamos extrair todos os dados desta fatura:

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

Processamento de Faturas para extrair dados específicos de faturas

Extraia dados específicos da fatura como números de fatura de cliente com 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

Console de depuração do Visual Studio mostrando a criação bem-sucedida de um PDF com o número da fatura do cliente INV/2023/00039 extraído usando IronOCR, confirmando que o processo de OCR foi concluído sem erros Escaneamento de Faturas

Para cenários de extração complexos, use configurações OCR especializadas para otimizar para seus tipos de fatura. A classe OcrResult fornece informações detalhadas sobre cada elemento reconhecido, incluindo coordenadas e pontuações de confiança para validação.

Quais são os Principais Benefícios da API de OCR para Faturas?

A API de OCR para Faturas do IronOCR transforma o processamento de faturas através de aprendizado de máquina e visão computacional. Esta tecnologia converte o texto da fatura em formatos legíveis por máquina, simplificando a extração de dados para análise, integração e melhoria de processos. Ela proporciona automação robusta para o processamento de faturas, melhorando a precisão e otimizando fluxos de trabalho como contas a pagar.

O IronOCR oferece uma precisão excepcional usando resultados otimizados do Tesseract sem necessidade de configuração adicional. Ele suporta TIFF em quadros múltiplos, arquivos PDF e todos os formatos de imagem populares. Leitura de códigos de barras a partir de imagens adiciona outra dimensão de extração.

Principais benefícios para o processamento de faturas:

  1. Economia de Tempo: Reduz horas para segundos
  2. Precisão: Minimize erros com pontuação de confiança
  3. Escalabilidade: Processe milhares com multithreading
  4. Integração: Exporte para PDFs pesquisáveis ou formatos estruturados
  5. Redução de Custos: Reduza custos operacionais

A flexibilidade de implantação da biblioteca permite integração em sistemas existentes—localmente, na nuvem ou híbrido. Com suporte para Docker, Azure e AWS, IronOCR escala de acordo com suas necessidades.

Ambientes de produção beneficiam-se das opções de licenciamento do IronOCR, incluindo suporte dedicado e atualizações regulares. Os guias de solução de problemas da biblioteca e o suporte técnico garantem uma implementação tranquila.

Visite a página inicial para mais informações sobre o IronOCR. Para tutoriais adicionais sobre OCR de faturas, veja este guia detalhado de OCR de faturas. Para saber mais sobre o uso de visão computacional para campos de faturas, confira este tutorial de visão computacional.

Perguntas frequentes

Como posso automatizar o processamento de dados de faturas usando OCR?

Você pode usar o IronOCR para automatizar o processamento de dados de faturas, aproveitando seus algoritmos de aprendizado de máquina. O IronOCR extrai detalhes como informações do fornecedor, números de faturas e preços de faturas digitais e digitalizadas, reduzindo erros de entrada manual e aumentando a eficiência.

Quais são os passos envolvidos na configuração de uma API de OCR para faturas?

Para configurar uma API de OCR para faturas usando o IronOCR, comece baixando e instalando a biblioteca através do Gerenciador de Pacotes NuGet do Visual Studio. Em seguida, crie um novo projeto C#, integre o IronOCR e utilize seus métodos para carregar e ler arquivos de imagem para extração de texto.

O IronOCR consegue extrair dados específicos, como números de faturas?

Sim, o IronOCR consegue extrair dados específicos, como números de faturas. Ele utiliza expressões regulares para identificar padrões no texto extraído, permitindo que você obtenha informações específicas das faturas.

Quais são algumas funcionalidades do IronOCR que beneficiam o processamento de faturas?

O IronOCR inclui recursos como pré-processamento de imagens, reconhecimento de código de barras e análise de arquivos. Esses recursos aprimoram sua capacidade de extrair e processar com precisão textos de diversos formatos de faturas, melhorando a captura de dados e a eficiência do fluxo de trabalho.

Como o pré-processamento de imagens pode melhorar os resultados do OCR?

O pré-processamento de imagens no IronOCR ajuda a melhorar os resultados do OCR, otimizando a qualidade da imagem antes da extração do texto. Isso inclui operações como ajuste de contraste e redução de ruído, o que pode levar a uma extração de dados mais precisa das faturas.

É possível usar o IronOCR tanto para faturas digitais quanto para faturas digitalizadas?

Sim, o IronOCR é capaz de processar faturas digitais e digitalizadas. Ele utiliza técnicas avançadas de aprendizado de máquina e visão computacional para extrair texto com precisão de diversos formatos e qualidades de imagem.

Como o IronOCR lida com vários formatos de página e tipos de arquivo?

O IronOCR suporta diversos formatos de página e tipos de arquivo populares, como imagens e PDFs. Ele consegue extrair texto de documentos complexos com eficiência, tornando-o versátil para várias aplicações de processamento de faturas.

Onde os desenvolvedores podem encontrar tutoriais para usar o IronOCR?

Os desenvolvedores podem encontrar tutoriais e recursos adicionais no site do IronOCR. O site oferece uma variedade de materiais de aprendizagem, incluindo guias práticos e posts de blog sobre como aplicar o IronOCR em diferentes cenários.

Kannaopat Udonpant
Engenheiro de Software
Antes de se tornar Engenheiro de Software, Kannapat concluiu um doutorado em Recursos Ambientais pela Universidade de Hokkaido, no Japão. Durante o doutorado, Kannapat também integrou o Laboratório de Robótica Veicular, que faz parte do Departamento de Engenharia de Bioprodução. Em 2022, ele utilizou suas habilidades ...
Leia mais

Iron Support Team

We're online 24 hours, 5 days a week.
Chat
Email
Call Me