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

API de digitalização de recibos: Extraia dados de recibos usando C# e IronOCR

APIs de digitalização de recibos automatizam a extração de dados de recibos usando tecnologia OCR, reduzindo significativamente erros de entrada manual e acelerando o processamento. Este guia mostra como usar o IronOCR em C# para extrair com precisão nomes de fornecedores, datas, itens, preços e totais de imagens de recibos, com pré-processamento de imagem embutido e suporte para múltiplos formatos.

Por Que Escolher o IronOCR para Digitalização de Recibos?

O IronOCR é uma biblioteca OCR flexível que oferece extração de texto confiável de documentos escaneados, imagens e PDFs. Com algoritmos avançados, visão computacional e modelos de aprendizado de máquina, o IronOCR garante alta precisão mesmo em cenários desafiadores. A biblioteca suporta múltiplos idiomas e estilos de fonte, tornando-a adequada para aplicações globais. Ao incorporar o IronOCR em suas aplicações, você pode automatizar a entrada de dados e a análise de texto, aumentando a produtividade.

Como o IronOCR Extrai Texto de Imagens de Recibos?

O IronOCR recupera texto de documentos, fotografias, capturas de tela e transmissões ao vivo de câmera como respostas JSON. Usando algoritmos sofisticados e aprendizado de máquina, o IronOCR analisa dados de imagem, reconhece caracteres e os converte em texto legível por máquina. A biblioteca usa a tecnologia Tesseract 5 aprimorada com melhorias proprietárias para obter maior precisão.

Por Que o IronOCR é Excelente para Processamento de Recibos?

O IronOCR se destaca ao lidar com escaneamentos de baixa qualidade, diferentes formatos de recibos e orientações distintas. Filtros embutidos de pré-processamento de imagem melhoram automaticamente a qualidade da imagem antes do processamento, garantindo resultados ótimos mesmo em recibos amassados ou desbotados.

O Que Eu Preciso para Usar o IronOCR?

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

Quais Ambientes de Desenvolvimento são Suportados?

  1. Ambiente de Desenvolvimento: Instale um IDE adequado como o Visual Studio. O IronOCR suporta Windows, Linux, macOS, Azure e AWS.

Quais Habilidades de Programação São Necessárias?

  1. Conhecimento de C#: Compreensão básica de C# ajuda a modificar exemplos de código. IronOCR fornece exemplos simples e documentação da API.

Quais dependências de software são necessárias?

  1. Instalação do IronOCR: Instale via Gerenciador de Pacotes NuGet. Dependências específicas da plataforma podem ser necessárias.

Uma chave de licença é necessária?

  1. Chave de Licença (Opcional): Teste gratuito disponível; uso em produção requer uma licença.

Como criar um novo projeto do Visual Studio para escaneamento de recibo?

Como iniciar um novo projeto no Visual Studio?

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

 related to Como iniciar um novo projeto no Visual Studio? Imagem de Novo Projeto

Qual modelo de projeto devo escolher?

Selecione Aplicativo de Console e clique em Avançar. Este modelo é ideal para aprender IronOCR antes de implementar em aplicações web.

Diálogo 'Criar um novo projeto' do Visual Studio mostrando o modelo de Aplicativo de Console selecionado com opções de plataforma para Windows, Linux e macOS Aplicativo de Console

Como devo nomear meu projeto de escaneamento de recibo?

Escreva o nome e localização do seu projeto, depois clique em Avançar. Escolha um nome descritivo como "ReceiptScannerAPI".

Tela de configuração de novo projeto do Visual Studio para criar um Aplicativo de Console chamado 'IronOCR' com C# selecionado e configurações de solução exibidas Configuração do projeto

Qual Versão do .NET Framework Devo Selecionar?

Selecione .NET 5.0 ou posterior para compatibilidade ideal, então clique em Criar.

Diálogo 'Informações Adicionais' do Visual Studio mostrando a configuração do Aplicativo de Console com .NET 5.0 selecionado como framework alvo e opções de plataforma para Linux, macOS, Windows e Console Estrutura Alvo

Como instalar o IronOCR no meu projeto?

Duas formas simples de instalação estão disponíveis:

Como usar o método do Gerenciador de Pacotes NuGet?

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

Diálogo de configurações do Gerenciador de Pacotes NuGet no Visual Studio com configuração de fontes de pacotes, ao lado de uma estrutura de projeto C# no explorador de soluções Gerenciador de Pacotes NuGet

Procure por IronOCR e instale o pacote. Para recibos em idiomas não-ingleses, instale pacotes específicos de idiomas.

Gerenciador de Pacotes NuGet no Visual Studio exibindo pacotes IronOCR instalados, incluindo a biblioteca principal e pacotes OCR específicos de linguagem para Árabe, Hebraico e Espanhol IronOCR

Como usar a instalação pela linha de comando?

  1. Vá para Ferramentas > Gerenciador de Pacotes NuGet > Console do Gerenciador de Pacotes
  2. Insira este comando:

    Install-Package IronOcr

     related to Como usar a instalação pela linha de comando? Console do Gerenciador de Pacotes

Como posso extrair rapidamente dados de recibos com IronOCR?

Extraia dados de recibos com apenas algumas linhas de código:

  1. Instale IronOCR com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronOcr
  2. Copie e execute este trecho de código.

    using IronOcr;
    using System;
    
    var ocr = new IronTesseract();
    
    // Configure for receipt scanning
    ocr.Configuration.ReadBarCodes = true;
    ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% ";
    
    using (var input = new OcrInput(@"receipt.jpg"))
    {
        // Apply automatic image enhancement
        input.DeNoise();
        input.Deskew();
        input.EnhanceResolution(225);
    
        // Extract text from receipt
        var result = ocr.Read(input);
    
        // Display extracted text and confidence
        Console.WriteLine($"Extracted Text:\n{result.Text}");
        Console.WriteLine($"\nConfidence: {result.Confidence}%");
    }
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronOCR em seu projeto hoje com uma avaliação gratuita

    arrow pointer

Como extraio dados estruturados de imagens de recibos?

IronOCR extrai itens de linha, preços, impostos e totais de vários tipos de documentos. A biblioteca suporta PDFs, TIFFs de múltiplas páginas, e vários formatos de imagem.

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

class ReceiptScanner
{
    static void Main()
    {
        var ocr = new IronTesseract();

        // Configure OCR for optimal receipt reading
        ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% ";
        ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\\";
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;

        // Load the image of the receipt
        using (var input = new OcrInput(@"r2.png"))
        {
            // Apply image enhancement filters
            input.Deskew(); // Fix image rotation
            input.EnhanceResolution(225); // Optimal DPI for receipts
            input.DeNoise(); // Remove background noise
            input.Sharpen(); // Improve text clarity

            // Perform OCR on the input image
            var result = ocr.Read(input);

            // Regular expression patterns to extract relevant details from the OCR result
            var descriptionPattern = @"\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)";
            var pricePattern = @"\$\d+(\.\d{2})?";
            var datePattern = @"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}";

            // Variables to store extracted data
            var descriptions = new List<string>();
            var unitPrices = new List<decimal>();
            var taxes = new List<decimal>();
            var amounts = new List<decimal>();

            var lines = result.Text.Split('\n');
            foreach (var line in lines)
            {
                // Match each line against the description pattern
                var descriptionMatch = Regex.Match(line, descriptionPattern);
                if (descriptionMatch.Success)
                {
                    descriptions.Add(descriptionMatch.Groups[1].Value.Trim());
                    unitPrices.Add(decimal.Parse(descriptionMatch.Groups[2].Value));

                    // Calculate tax and total amount for each item
                    var tax = unitPrices[unitPrices.Count - 1] * 0.15m;
                    taxes.Add(tax);
                    amounts.Add(unitPrices[unitPrices.Count - 1] + tax);
                }

                // Extract date if found
                var dateMatch = Regex.Match(line, datePattern);
                if (dateMatch.Success)
                {
                    Console.WriteLine($"Receipt Date: {dateMatch.Value}");
                }
            }

            // Output the extracted data
            for (int i = 0; i < descriptions.Count; i++)
            {
                Console.WriteLine($"Description: {descriptions[i]}");
                Console.WriteLine($"Quantity: 1.00 Units");
                Console.WriteLine($"Unit Price: ${unitPrices[i]:0.00}");
                Console.WriteLine($"Taxes: ${taxes[i]:0.00}");
                Console.WriteLine($"Amount: ${amounts[i]:0.00}");
                Console.WriteLine("-----------------------");
            }

            // Calculate and display totals
            var subtotal = unitPrices.Sum();
            var totalTax = taxes.Sum();
            var grandTotal = amounts.Sum();

            Console.WriteLine($"\nSubtotal: ${subtotal:0.00}");
            Console.WriteLine($"Total Tax: ${totalTax:0.00}");
            Console.WriteLine($"Grand Total: ${grandTotal:0.00}");
        }
    }
}
using IronOcr;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

class ReceiptScanner
{
    static void Main()
    {
        var ocr = new IronTesseract();

        // Configure OCR for optimal receipt reading
        ocr.Configuration.WhiteListCharacters = "0123456789.$,ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz% ";
        ocr.Configuration.BlackListCharacters = "~`@#*_}{][|\\";
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;

        // Load the image of the receipt
        using (var input = new OcrInput(@"r2.png"))
        {
            // Apply image enhancement filters
            input.Deskew(); // Fix image rotation
            input.EnhanceResolution(225); // Optimal DPI for receipts
            input.DeNoise(); // Remove background noise
            input.Sharpen(); // Improve text clarity

            // Perform OCR on the input image
            var result = ocr.Read(input);

            // Regular expression patterns to extract relevant details from the OCR result
            var descriptionPattern = @"\w+\s+(.*?)\s+(\d+\.\d+)\s+Units\s+(\d+\.\d+)\s+Tax15%\s+\$(\d+\.\d+)";
            var pricePattern = @"\$\d+(\.\d{2})?";
            var datePattern = @"\d{1,2}[/-]\d{1,2}[/-]\d{2,4}";

            // Variables to store extracted data
            var descriptions = new List<string>();
            var unitPrices = new List<decimal>();
            var taxes = new List<decimal>();
            var amounts = new List<decimal>();

            var lines = result.Text.Split('\n');
            foreach (var line in lines)
            {
                // Match each line against the description pattern
                var descriptionMatch = Regex.Match(line, descriptionPattern);
                if (descriptionMatch.Success)
                {
                    descriptions.Add(descriptionMatch.Groups[1].Value.Trim());
                    unitPrices.Add(decimal.Parse(descriptionMatch.Groups[2].Value));

                    // Calculate tax and total amount for each item
                    var tax = unitPrices[unitPrices.Count - 1] * 0.15m;
                    taxes.Add(tax);
                    amounts.Add(unitPrices[unitPrices.Count - 1] + tax);
                }

                // Extract date if found
                var dateMatch = Regex.Match(line, datePattern);
                if (dateMatch.Success)
                {
                    Console.WriteLine($"Receipt Date: {dateMatch.Value}");
                }
            }

            // Output the extracted data
            for (int i = 0; i < descriptions.Count; i++)
            {
                Console.WriteLine($"Description: {descriptions[i]}");
                Console.WriteLine($"Quantity: 1.00 Units");
                Console.WriteLine($"Unit Price: ${unitPrices[i]:0.00}");
                Console.WriteLine($"Taxes: ${taxes[i]:0.00}");
                Console.WriteLine($"Amount: ${amounts[i]:0.00}");
                Console.WriteLine("-----------------------");
            }

            // Calculate and display totals
            var subtotal = unitPrices.Sum();
            var totalTax = taxes.Sum();
            var grandTotal = amounts.Sum();

            Console.WriteLine($"\nSubtotal: ${subtotal:0.00}");
            Console.WriteLine($"Total Tax: ${totalTax:0.00}");
            Console.WriteLine($"Grand Total: ${grandTotal:0.00}");
        }
    }
}
$vbLabelText   $csharpLabel

Quais técnicas melhoram a precisão do escaneamento de recibo?

Técnicas-chave para escaneamento preciso de recibos:

Console de debug do Visual Studio exibindo dados de fatura extraídos de um PDF, mostrando itens com descrições, quantidades, preços, impostos e totais Saída

Como extraio o conteúdo completo do recibo?

Extraia todo o conteúdo do recibo com formatação preservada:

using IronOcr;
using System;
using System.Linq;

class WholeReceiptExtractor
{
    static void Main()
    {
        var ocr = new IronTesseract();

        // Configure for receipt scanning
        ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // Use latest engine
        ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm; // Best accuracy

        using (var input = new OcrInput(@"r3.png"))
        {
            // Apply automatic image correction
            input.WithTitle("Receipt Scan");

            // Use computer vision to find text regions
            var textRegions = input.FindTextRegions();
            Console.WriteLine($"Found {textRegions.Count()} text regions");

            // Apply optimal filters for receipt processing
            input.ApplyOcrInputFilters();

            // Perform OCR on the entire receipt
            var result = ocr.Read(input);

            // Display extracted text
            Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===");
            Console.WriteLine(result.Text);

            // Get detailed results
            Console.WriteLine($"\n=== OCR STATISTICS ===");
            Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%");
            Console.WriteLine($"Pages Processed: {result.Pages.Length}");
            Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}");
            Console.WriteLine($"Lines Detected: {result.Lines.Length}");
            Console.WriteLine($"Words Recognized: {result.Words.Length}");

            // Extract any barcodes found
            if (result.Barcodes.Any())
            {
                Console.WriteLine("\n=== BARCODES DETECTED ===");
                foreach(var barcode in result.Barcodes)
                {
                    Console.WriteLine($"Type: {barcode.Type}");
                    Console.WriteLine($"Value: {barcode.Value}");
                    Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}");
                }
            }

            // Save as searchable PDF
            result.SaveAsSearchablePdf("receipt_searchable.pdf");
            Console.WriteLine("\nSearchable PDF saved as: receipt_searchable.pdf");

            // Export as hOCR for preservation
            result.SaveAsHocrFile("receipt_hocr.html");
            Console.WriteLine("hOCR file saved as: receipt_hocr.html");
        }
    }
}
using IronOcr;
using System;
using System.Linq;

class WholeReceiptExtractor
{
    static void Main()
    {
        var ocr = new IronTesseract();

        // Configure for receipt scanning
        ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // Use latest engine
        ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm; // Best accuracy

        using (var input = new OcrInput(@"r3.png"))
        {
            // Apply automatic image correction
            input.WithTitle("Receipt Scan");

            // Use computer vision to find text regions
            var textRegions = input.FindTextRegions();
            Console.WriteLine($"Found {textRegions.Count()} text regions");

            // Apply optimal filters for receipt processing
            input.ApplyOcrInputFilters();

            // Perform OCR on the entire receipt
            var result = ocr.Read(input);

            // Display extracted text
            Console.WriteLine("=== EXTRACTED RECEIPT TEXT ===");
            Console.WriteLine(result.Text);

            // Get detailed results
            Console.WriteLine($"\n=== OCR STATISTICS ===");
            Console.WriteLine($"OCR Confidence: {result.Confidence:F2}%");
            Console.WriteLine($"Pages Processed: {result.Pages.Length}");
            Console.WriteLine($"Paragraphs Found: {result.Paragraphs.Length}");
            Console.WriteLine($"Lines Detected: {result.Lines.Length}");
            Console.WriteLine($"Words Recognized: {result.Words.Length}");

            // Extract any barcodes found
            if (result.Barcodes.Any())
            {
                Console.WriteLine("\n=== BARCODES DETECTED ===");
                foreach(var barcode in result.Barcodes)
                {
                    Console.WriteLine($"Type: {barcode.Type}");
                    Console.WriteLine($"Value: {barcode.Value}");
                    Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}");
                }
            }

            // Save as searchable PDF
            result.SaveAsSearchablePdf("receipt_searchable.pdf");
            Console.WriteLine("\nSearchable PDF saved as: receipt_searchable.pdf");

            // Export as hOCR for preservation
            result.SaveAsHocrFile("receipt_hocr.html");
            Console.WriteLine("hOCR file saved as: receipt_hocr.html");
        }
    }
}
$vbLabelText   $csharpLabel

Console de debug do Visual Studio exibindo dados de fatura extraídos de um PDF, mostrando itens com descrições, quantidades, preços, impostos e totais Saída da API de digitalização de recibo

Quais recursos avançados melhoram a digitalização de recibos?

IronOCR oferece vários recursos avançados que melhoram significativamente a precisão da digitalização de recibos:

Quais idiomas o IronOCR suporta?

  1. Suporte a vários idiomas: Procese recibos em 125+ idiomas ou múltiplos idiomas em um documento.

O IronOCR pode ler códigos de barras em recibos?

  1. Leitura de código de barras: Detecta e lê automaticamente códigos de barras e códigos QR.

Como a visão computacional ajuda no processamento de recibos?

  1. Visão Computacional: Use detecção de texto avançada para localizar regiões de texto antes do OCR.

Posso treinar modelos personalizados para formatos únicos de recibo?

  1. Treinamento Personalizado: Treine fontes personalizadas para formatos de recibo especializados.

Como posso melhorar o desempenho para processamento em massa?

  1. Otimização de Desempenho: Implemente multithreading e processamento assíncrono para operações em massa.
// Example: Async receipt processing for high-volume scenarios
using IronOcr;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;

class BulkReceiptProcessor
{
    static async Task Main()
    {
        var ocr = new IronTesseract();

        // Configure for optimal performance
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.UseMultiThreading = true;
        ocr.Configuration.ProcessorCount = Environment.ProcessorCount;

        // Process multiple receipts asynchronously
        var receiptFiles = Directory.GetFiles(@"C:\Receipts\", "*.jpg");
        var tasks = new List<Task<OcrResult>>();

        foreach (var file in receiptFiles)
        {
            tasks.Add(ProcessReceiptAsync(ocr, file));
        }

        // Wait for all receipts to be processed
        var results = await Task.WhenAll(tasks);

        // Aggregate results
        decimal totalAmount = 0;
        foreach (var result in results)
        {
            // Extract total from each receipt
            var match = System.Text.RegularExpressions.Regex.Match(
                result.Text, @"Total:?\s*\$?(\d+\.\d{2})");

            if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
            {
                totalAmount += amount;
            }
        }

        Console.WriteLine($"Processed {results.Length} receipts");
        Console.WriteLine($"Combined total: ${totalAmount:F2}");
    }

    static async Task<OcrResult> ProcessReceiptAsync(IronTesseract ocr, string filePath)
    {
        using (var input = new OcrInput(filePath))
        {
            // Apply preprocessing
            input.DeNoise();
            input.Deskew();
            input.EnhanceResolution(200);

            // Process asynchronously
            return await ocr.ReadAsync(input);
        }
    }
}
// Example: Async receipt processing for high-volume scenarios
using IronOcr;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;

class BulkReceiptProcessor
{
    static async Task Main()
    {
        var ocr = new IronTesseract();

        // Configure for optimal performance
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.UseMultiThreading = true;
        ocr.Configuration.ProcessorCount = Environment.ProcessorCount;

        // Process multiple receipts asynchronously
        var receiptFiles = Directory.GetFiles(@"C:\Receipts\", "*.jpg");
        var tasks = new List<Task<OcrResult>>();

        foreach (var file in receiptFiles)
        {
            tasks.Add(ProcessReceiptAsync(ocr, file));
        }

        // Wait for all receipts to be processed
        var results = await Task.WhenAll(tasks);

        // Aggregate results
        decimal totalAmount = 0;
        foreach (var result in results)
        {
            // Extract total from each receipt
            var match = System.Text.RegularExpressions.Regex.Match(
                result.Text, @"Total:?\s*\$?(\d+\.\d{2})");

            if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
            {
                totalAmount += amount;
            }
        }

        Console.WriteLine($"Processed {results.Length} receipts");
        Console.WriteLine($"Combined total: ${totalAmount:F2}");
    }

    static async Task<OcrResult> ProcessReceiptAsync(IronTesseract ocr, string filePath)
    {
        using (var input = new OcrInput(filePath))
        {
            // Apply preprocessing
            input.DeNoise();
            input.Deskew();
            input.EnhanceResolution(200);

            // Process asynchronously
            return await ocr.ReadAsync(input);
        }
    }
}
$vbLabelText   $csharpLabel

Como lido com desafios comuns de digitalização de recibos?

A digitalização de recibos apresenta desafios únicos que o IronOCR ajuda a resolver:

Como lido com imagens de recibos de baixa qualidade?

  • Imagens de baixa qualidade: Use o Assistente de Filtro para encontrar automaticamente as configurações ótimas de pré-processamento.

O que fazer com recibos enviesados ou girados?

Como processo recibos apagados ou com baixo contraste?

O IronOCR pode lidar com recibos amassados ou danificados?

Como gerencio diferentes formatos e layouts de recibos?

Os formatos de recibo variam amplamente entre os varejistas. IronOCR oferece abordagens flexíveis:

using IronOcr;
using System;
using System.Collections.Generic;
using System.Linq;

class ReceiptLayoutHandler
{
    static void Main()
    {
        var ocr = new IronTesseract();

        // Configure for different receipt layouts
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
        ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm;

        using (var input = new OcrInput(@"complex_receipt.jpg"))
        {
            // Apply region-specific processing
            var cropRegion = new CropRectangle(x: 0, y: 100, width: 400, height: 800);
            input.AddImage(@"complex_receipt.jpg", cropRegion);

            // Process with confidence tracking
            var result = ocr.Read(input);

            // Parse using confidence scores
            var highConfidenceLines = result.Lines
                .Where(line => line.Confidence > 85)
                .Select(line => line.Text)
                .ToList();

            // Extract data with fallback strategies
            var total = ExtractTotal(highConfidenceLines) 
                        ?? ExtractTotalAlternative(result.Text);

            Console.WriteLine($"Receipt Total: {total}");
        }
    }

    static decimal? ExtractTotal(List<string> lines)
    {
        // Primary extraction method
        foreach (var line in lines)
        {
            if (line.Contains("TOTAL") && 
                System.Text.RegularExpressions.Regex.IsMatch(line, @"\d+\.\d{2}"))
            {
                var match = System.Text.RegularExpressions.Regex.Match(line, @"(\d+\.\d{2})");
                if (decimal.TryParse(match.Value, out var total))
                    return total;
            }
        }
        return null;
    }

    static decimal? ExtractTotalAlternative(string fullText)
    {
        // Fallback extraction method
        var pattern = @"(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})";
        var match = System.Text.RegularExpressions.Regex.Match(fullText, pattern);

        if (match.Success && decimal.TryParse(match.Groups[1].Value, out var total))
            return total;

        return null;
    }
}
using IronOcr;
using System;
using System.Collections.Generic;
using System.Linq;

class ReceiptLayoutHandler
{
    static void Main()
    {
        var ocr = new IronTesseract();

        // Configure for different receipt layouts
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
        ocr.Configuration.EngineMode = TesseractEngineMode.TesseractAndLstm;

        using (var input = new OcrInput(@"complex_receipt.jpg"))
        {
            // Apply region-specific processing
            var cropRegion = new CropRectangle(x: 0, y: 100, width: 400, height: 800);
            input.AddImage(@"complex_receipt.jpg", cropRegion);

            // Process with confidence tracking
            var result = ocr.Read(input);

            // Parse using confidence scores
            var highConfidenceLines = result.Lines
                .Where(line => line.Confidence > 85)
                .Select(line => line.Text)
                .ToList();

            // Extract data with fallback strategies
            var total = ExtractTotal(highConfidenceLines) 
                        ?? ExtractTotalAlternative(result.Text);

            Console.WriteLine($"Receipt Total: {total}");
        }
    }

    static decimal? ExtractTotal(List<string> lines)
    {
        // Primary extraction method
        foreach (var line in lines)
        {
            if (line.Contains("TOTAL") && 
                System.Text.RegularExpressions.Regex.IsMatch(line, @"\d+\.\d{2}"))
            {
                var match = System.Text.RegularExpressions.Regex.Match(line, @"(\d+\.\d{2})");
                if (decimal.TryParse(match.Value, out var total))
                    return total;
            }
        }
        return null;
    }

    static decimal? ExtractTotalAlternative(string fullText)
    {
        // Fallback extraction method
        var pattern = @"(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})";
        var match = System.Text.RegularExpressions.Regex.Match(fullText, pattern);

        if (match.Success && decimal.TryParse(match.Groups[1].Value, out var total))
            return total;

        return null;
    }
}
$vbLabelText   $csharpLabel

Quais aspectos principais devo lembrar sobre APIs de digitalização de recibos?

APIs de digitalização de recibos como IronOCR oferecem soluções confiáveis para automatizar a extração de dados de recibos. Usando tecnologia avançada de OCR, as empresas podem extrair automaticamente nomes de fornecedores, datas de compra, listas detalhadas, preços, impostos e totais. Com suporte para múltiplos idiomas, moedas e suporte a código de barras, as empresas podem simplificar a gestão de recibos, economizar tempo e tomar decisões baseadas em dados.

IronOCR fornece as ferramentas que os desenvolvedores precisam para extração de texto precisa e eficiente, permitindo automação de tarefas e eficiência aprimorada. O conjunto de recursos completo da biblioteca inclui suporte para vários tipos de documentos e melhorias recentes como redução de memória em 98%.

Cumprindo os pré-requisitos e integrando o IronOCR, você pode revelar os benefícios do processamento automatizado de recibos. A documentação da biblioteca, exemplos e guias de solução de problemas garantem uma implementação tranquila.

Para mais informações, visite a página de licenciamento ou explore o tutorial do C# Tesseract OCR.

Perguntas frequentes

Como posso automatizar a extração de dados de recibos usando OCR em C#?

Você pode automatizar a extração de dados de recibos em C# usando o IronOCR, que permite extrair detalhes importantes, como itens de linha, preços, impostos e valores totais, de imagens de recibos com alta precisão.

Quais são os pré-requisitos para configurar um projeto de digitalização de recibos em C#?

Para configurar um projeto de digitalização de recibos em C#, você precisa do Visual Studio, conhecimento básico de programação em C# e a biblioteca IronOCR instalada em seu projeto.

Como faço para instalar a biblioteca OCR usando o Gerenciador de Pacotes NuGet no Visual Studio?

Abra o Visual Studio e acesse Ferramentas > Gerenciador de Pacotes NuGet > Gerenciar Pacotes NuGet para a Solução, procure por IronOCR e instale-o em seu projeto.

Posso instalar a biblioteca OCR usando a linha de comando do Visual Studio?

Sim, você pode instalar o IronOCR abrindo o Console do Gerenciador de Pacotes no Visual Studio e executando o comando: Install-Package IronOcr .

Como posso extrair o texto de um recibo inteiro usando OCR?

Para extrair o texto de um recibo inteiro, use o IronOCR para realizar o OCR na imagem completa do recibo e, em seguida, gere o texto extraído usando código C#.

Quais são os benefícios de uma API de digitalização de recibos?

Uma API de digitalização de recibos como o IronOCR automatiza a extração de dados, minimiza erros manuais, aumenta a produtividade e fornece informações sobre padrões de gastos para melhores decisões de negócios.

A biblioteca OCR suporta vários idiomas e moedas?

Sim, o IronOCR suporta vários idiomas, moedas e formatos de recibo, tornando-o ideal para aplicações globais.

Qual a precisão da biblioteca OCR na extração de texto de imagens?

O IronOCR garante alta precisão utilizando algoritmos OCR avançados, visão computacional e modelos de aprendizado de máquina, mesmo em cenários desafiadores.

Que tipos de dados podem ser extraídos de recibos usando OCR?

O IronOCR pode extrair dados como itens de linha, preços, valores de impostos, valores totais e outros detalhes do recibo.

Como a automatização da análise de recibos pode melhorar os processos de negócios?

A automatização da análise de recibos com o IronOCR melhora os processos de negócios ao reduzir a entrada manual de dados, permitir a coleta precisa de dados e possibilitar a tomada de decisões baseadas em dados.

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