Passer au contenu du pied de page
UTILISATION D'IRONOCR

API de numérisation de reçus : Extraire des données de reçus à l'aide de C# et IronOCR

Les API de numérisation de reçus automatisent l'extraction de données à partir des reçus grâce à la technologie OCR, réduisant considérablement les erreurs de saisie manuelle et accélérant le traitement. Ce guide explique comment utiliser IronOCR en C# pour extraire avec précision les noms des fournisseurs, les dates, les articles, les prix et les totaux à partir d'images de reçus, grâce à un prétraitement d'image intégré et à la prise en charge de plusieurs formats.

Pourquoi choisir IronOCR pour la numérisation de reçus ?

IronOCR est une bibliothèque OCR flexible offrant une extraction de texte fiable à partir de documents numérisés, d'images et de fichiers PDF. Grâce à des algorithmes avancés, à la vision par ordinateur et à des modèles d'apprentissage automatique, IronOCR garantit une précision élevée même dans des scénarios difficiles. La bibliothèque prend en charge plusieurs langues et styles de police, ce qui la rend adaptée aux applications internationales. En intégrant IronOCR à vos applications, vous pouvez automatiser la saisie de données et l'analyse de texte, et ainsi accroître votre productivité.

Comment IronOCR extrait-il le texte des images de reçus ?

IronOCR récupère le texte des documents, des photographies, des captures d'écran et des flux vidéo en direct sous forme de réponses JSON. Grâce à des algorithmes sophistiqués et à l'apprentissage automatique, IronOCR analyse les données d'image , reconnaît les caractères et les convertit en texte lisible par machine. La bibliothèque utilise la technologie Tesseract 5, améliorée grâce à des perfectionnements exclusifs, pour une précision supérieure.

Pourquoi IronOCR est-il excellent pour le traitement des reçus ?

IronOCR excelle dans le traitement des numérisations de faible qualité , des formats de reçus variés et des orientations différentes . Les filtres de prétraitement d'image intégrés améliorent automatiquement la qualité de l'image avant traitement, garantissant des résultats optimaux même à partir de reçus froissés ou décolorés.

De quoi ai-je besoin pour utiliser IronOCR ?

Avant d'utiliser IronOCR, assurez-vous que les prérequis suivants sont remplis :

Quels environnements de développement sont pris en charge ?

  1. Environnement de développement : Installez un EDI approprié comme Visual Studio. IronOCR prend en charge Windows , Linux , macOS , Azure et AWS .

Quelles sont les compétences en programmation requises ?

  1. Connaissances en C# : Une compréhension de base du C# vous aide à modifier les exemples de code. IronOCR fournit des exemples simples et une documentation API .

Quelles dépendances logicielles sont nécessaires ?

  1. Installation d'IronOCR : Installez-le via le gestionnaire de packages NuGet . Des dépendances spécifiques à la plateforme peuvent être nécessaires.

Une clé de licence est-elle requise ?

  1. Clé de licence (facultative) : Essai gratuit disponible ; L'utilisation en production nécessite une licence .

Comment créer un nouveau projet Visual Studio pour la numérisation de reçus ?

Comment démarrer un nouveau projet dans Visual Studio ?

Ouvrez Visual Studio, allez dans Fichiers, puis survolez Nouveau et cliquez sur Projet.

! L'environnement de développement intégré Visual Studio, avec le menu Fichier développé, affiche l'option " Nouveau > Projet " mise en surbrillance, et l'éditeur de code affiche le code C# permettant de charger un classeur Excel. Nouvelle image de projet

Quel modèle de projet dois-je choisir ?

Sélectionnez Application console et cliquez sur Suivant. Ce modèle est idéal pour apprendre IronOCR avant de l'implémenter dans des applications web.

La boîte de dialogue " Créer un projet " de Visual Studio affiche le modèle " Application console " sélectionné, avec les options de plateforme pour Windows, Linux et macOS. Application Console

Comment nommer mon projet de scanner de reçus ?

Saisissez le nom et l'emplacement de votre projet, puis cliquez sur Suivant. Choisissez un nom descriptif comme " API ReceiptScanner ".

! Écran de configuration d'un nouveau projet Visual Studio pour la création d'une application console nommée " IronOCR " avec C# sélectionné et les paramètres de la solution affichés Configuration du Projet

Quelle version de .NET Framework dois-je choisir ?

Sélectionnez .NET 5.0 ou une version ultérieure pour une compatibilité optimale, puis cliquez sur Créer.

La boîte de dialogue " Informations supplémentaires " de Visual Studio affiche la configuration de l'application console avec .NET 5.0 sélectionné comme framework cible et les options de plateforme pour Linux, macOS, Windows et Console. Framework Cible

Comment installer IronOCR dans mon projet ?

Deux méthodes d'installation simples sont disponibles :

Comment utiliser la méthode du gestionnaire de packages NuGet ?

Accédez à Outils > Gestionnaire de packages NuGet > Gérer les packages NuGet pour la solution

! Boîte de dialogue des paramètres du gestionnaire de packages NuGet de Visual Studio avec la configuration des sources de packages, ainsi qu'une structure de projet C# dans l'explorateur de solutions Gestionnaire de paquets NuGet

Recherchez IronOCR et installez le package. Pour les reçus non anglais, installez les modules linguistiques correspondants .

Le gestionnaire de packages NuGet de Visual Studio affiche les packages IronOCR installés, notamment la bibliothèque principale et les packages OCR spécifiques aux langues arabe, hébreu et espagnol. IronOCR

Comment utiliser l'installation en ligne de commande ?

  1. Accédez à Outils > Gestionnaire de packages NuGet > Console du gestionnaire de packages
  2. Saisissez cette commande :

    Install-Package IronOcr

    ! Fenêtre de la console du gestionnaire de packages de Visual Studio affichant la commande NuGet " PM> Install-Package IronOCR " exécutée pour un projet nommé " Create PDF " Console du Gestionnaire de Paquets

Comment extraire rapidement les données d'un reçu avec IronOCR ?

Extraire les données d'un reçu en quelques lignes de code seulement :

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronOCR avec le gestionnaire de packages NuGet

    PM > Install-Package IronOcr

  2. Copiez et exécutez cet extrait de code.

    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. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer

Comment extraire des données structurées à partir d'images de reçus ?

IronOCR extrait les lignes de commande, les prix, les taxes et les totaux de différents types de documents. La bibliothèque prend en charge les PDF , les TIFF multipages et divers formats d'image .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Class ReceiptScanner
    Shared Sub Main()
        Dim ocr = New IronTesseract()

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

        ' Load the image of the receipt
        Using input = New OcrInput("r2.png")
            ' Apply image enhancement filters
            input.Deskew() ' Fix image rotation
            input.EnhanceResolution(225) ' Optimal DPI for receipts
            input.DeNoise() ' Remove background noise
            input.Sharpen() ' Improve text clarity

            ' Perform OCR on the input image
            Dim result = ocr.Read(input)

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

            ' Variables to store extracted data
            Dim descriptions = New List(Of String)()
            Dim unitPrices = New List(Of Decimal)()
            Dim taxes = New List(Of Decimal)()
            Dim amounts = New List(Of Decimal)()

            Dim lines = result.Text.Split(ControlChars.Lf)
            For Each line In lines
                ' Match each line against the description pattern
                Dim descriptionMatch = Regex.Match(line, descriptionPattern)
                If descriptionMatch.Success Then
                    descriptions.Add(descriptionMatch.Groups(1).Value.Trim())
                    unitPrices.Add(Decimal.Parse(descriptionMatch.Groups(2).Value))

                    ' Calculate tax and total amount for each item
                    Dim tax = unitPrices(unitPrices.Count - 1) * 0.15D
                    taxes.Add(tax)
                    amounts.Add(unitPrices(unitPrices.Count - 1) + tax)
                End If

                ' Extract date if found
                Dim dateMatch = Regex.Match(line, datePattern)
                If dateMatch.Success Then
                    Console.WriteLine($"Receipt Date: {dateMatch.Value}")
                End If
            Next

            ' Output the extracted data
            For i As Integer = 0 To descriptions.Count - 1
                Console.WriteLine($"Description: {descriptions(i)}")
                Console.WriteLine("Quantity: 1.00 Units")
                Console.WriteLine($"Unit Price: ${unitPrices(i):0.00}")
                Console.WriteLine($"Taxes: ${taxes(i):0.00}")
                Console.WriteLine($"Amount: ${amounts(i):0.00}")
                Console.WriteLine("-----------------------")
            Next

            ' Calculate and display totals
            Dim subtotal = unitPrices.Sum()
            Dim totalTax = taxes.Sum()
            Dim grandTotal = amounts.Sum()

            Console.WriteLine(vbCrLf & $"Subtotal: ${subtotal:0.00}")
            Console.WriteLine($"Total Tax: ${totalTax:0.00}")
            Console.WriteLine($"Grand Total: ${grandTotal:0.00}")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Quelles techniques permettent d'améliorer la précision de la numérisation des reçus ?

Techniques clés pour une numérisation précise des reçus :

! La console de débogage de Visual Studio affiche les données extraites d'une facture PDF, présentant les articles avec leurs descriptions, quantités, prix, taxes et totaux. Sortie

Comment extraire l'intégralité du contenu d'un reçu ?

Extraire le contenu complet du reçu en conservant la mise en forme :

using IronOcr;
using System;
using System.Linq;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Class WholeReceiptExtractor
    Shared Sub Main()
        Dim ocr = New IronTesseract()

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

        Using input = New OcrInput("r3.png")
            ' Apply automatic image correction
            input.WithTitle("Receipt Scan")

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

            ' Apply optimal filters for receipt processing
            input.ApplyOcrInputFilters()

            ' Perform OCR on the entire receipt
            Dim result = ocr.Read(input)

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

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

            ' Extract any barcodes found
            If result.Barcodes.Any() Then
                Console.WriteLine(vbCrLf & "=== BARCODES DETECTED ===")
                For Each barcode In result.Barcodes
                    Console.WriteLine($"Type: {barcode.Type}")
                    Console.WriteLine($"Value: {barcode.Value}")
                    Console.WriteLine($"Location: X={barcode.X}, Y={barcode.Y}")
                Next
            End If

            ' Save as searchable PDF
            result.SaveAsSearchablePdf("receipt_searchable.pdf")
            Console.WriteLine(vbCrLf & "Searchable PDF saved as: receipt_searchable.pdf")

            ' Export as hOCR for preservation
            result.SaveAsHocrFile("receipt_hocr.html")
            Console.WriteLine("hOCR file saved as: receipt_hocr.html")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

! La console de débogage de Visual Studio affiche les données extraites d'une facture PDF, présentant les articles avec leurs descriptions, quantités, prix, taxes et totaux. Résultat de l'API de numérisation des reçus

Quelles sont les fonctionnalités avancées qui améliorent la numérisation des reçus ?

IronOCR offre plusieurs fonctionnalités avancées qui améliorent considérablement la précision de la numérisation des reçus :

Quelles langues IronOCR prend-il en charge ?

  1. Prise en charge multilingue : Traitez les reçus dans plus de 125 langues ou plusieurs langues dans un seul document .

IronOCR peut-il lire les codes-barres sur les reçus ?

  1. Lecture des codes-barres : Détection et lecture automatiques des codes-barres et des codes QR .

Comment la vision par ordinateur facilite-t-elle le traitement des reçus ?

  1. Vision par ordinateur : Utiliser la détection de texte avancée pour localiser les régions de texte avant la reconnaissance optique de caractères (OCR).

Puis-je entraîner des modèles personnalisés pour des formats de reçus uniques ?

  1. Formation personnalisée : Entraîner les polices personnalisées pour les formats de reçus spécialisés.

Comment puis-je améliorer les performances du traitement en masse ?

  1. Optimisation des performances : Mettre en œuvre le multithreading et le traitement asynchrone pour les opérations en masse.
// Example: Async receipt processing for high-volume scenarios
using IronOcr;
using System;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.IO;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            // Process asynchronously
            return await ocr.ReadAsync(input);
        }
    }
}
Imports IronOcr
Imports System
Imports System.Threading.Tasks
Imports System.Collections.Generic
Imports System.IO
Imports System.Text.RegularExpressions

Module BulkReceiptProcessor

    Sub Main()
        MainAsync().GetAwaiter().GetResult()
    End Sub

    Private Async Function MainAsync() As Task
        Dim ocr As New IronTesseract()

        ' Configure for optimal performance
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
        ocr.Configuration.UseMultiThreading = True
        ocr.Configuration.ProcessorCount = Environment.ProcessorCount

        ' Process multiple receipts asynchronously
        Dim receiptFiles = Directory.GetFiles("C:\Receipts\", "*.jpg")
        Dim tasks As New List(Of Task(Of OcrResult))()

        For Each file In receiptFiles
            tasks.Add(ProcessReceiptAsync(ocr, file))
        Next

        ' Wait for all receipts to be processed
        Dim results = Await Task.WhenAll(tasks)

        ' Aggregate results
        Dim totalAmount As Decimal = 0
        For Each result In results
            ' Extract total from each receipt
            Dim match = Regex.Match(result.Text, "Total:?\s*\$?(\d+\.\d{2})")

            If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, totalAmount) Then
                totalAmount += totalAmount
            End If
        Next

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

    Private Async Function ProcessReceiptAsync(ocr As IronTesseract, filePath As String) As Task(Of OcrResult)
        Using input As New OcrInput(filePath)
            ' Apply preprocessing
            input.DeNoise()
            input.Deskew()
            input.EnhanceResolution(200)

            ' Process asynchronously
            Return Await ocr.ReadAsync(input)
        End Using
    End Function

End Module
$vbLabelText   $csharpLabel

Comment gérer les problèmes courants liés à la numérisation des reçus ?

La numérisation des reçus présente des défis uniques qu'IronOCR contribue à relever :

Comment gérer les images de reçus de mauvaise qualité ?

  • Images de mauvaise qualité : utilisez l' assistant de filtre pour trouver automatiquement les paramètres de prétraitement optimaux.

Qu'en est-il des reçus de travers ou pivotés ?

Comment traiter les reçus décolorés ou à faible contraste ?

IronOCR peut-il traiter les reçus froissés ou endommagés ?

  • Reçus froissés ou endommagés : Un prétraitement avancé permet de récupérer le texte à partir d'images difficiles à lire.

Comment gérer les différents formats et mises en page des reçus ?

Les formats de reçus varient considérablement d'un détaillant à l'autre. IronOCR propose des approches flexibles :

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Class ReceiptLayoutHandler
    Shared Sub Main()
        Dim ocr = New IronTesseract()

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

        Using input = New OcrInput("complex_receipt.jpg")
            ' Apply region-specific processing
            Dim cropRegion = New CropRectangle(x:=0, y:=100, width:=400, height:=800)
            input.AddImage("complex_receipt.jpg", cropRegion)

            ' Process with confidence tracking
            Dim result = ocr.Read(input)

            ' Parse using confidence scores
            Dim highConfidenceLines = result.Lines _
                .Where(Function(line) line.Confidence > 85) _
                .Select(Function(line) line.Text) _
                .ToList()

            ' Extract data with fallback strategies
            Dim total = ExtractTotal(highConfidenceLines) _
                        OrElse ExtractTotalAlternative(result.Text)

            Console.WriteLine($"Receipt Total: {total}")
        End Using
    End Sub

    Shared Function ExtractTotal(lines As List(Of String)) As Decimal?
        ' Primary extraction method
        For Each line In lines
            If line.Contains("TOTAL") AndAlso _
                System.Text.RegularExpressions.Regex.IsMatch(line, "\d+\.\d{2}") Then
                Dim match = System.Text.RegularExpressions.Regex.Match(line, "(\d+\.\d{2})")
                Dim total As Decimal
                If Decimal.TryParse(match.Value, total) Then
                    Return total
                End If
            End If
        Next
        Return Nothing
    End Function

    Shared Function ExtractTotalAlternative(fullText As String) As Decimal?
        ' Fallback extraction method
        Dim pattern = "(?:Total|TOTAL|Grand Total|Amount Due).*?(\d+\.\d{2})"
        Dim match = System.Text.RegularExpressions.Regex.Match(fullText, pattern)

        Dim total As Decimal
        If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, total) Then
            Return total
        End If

        Return Nothing
    End Function
End Class
$vbLabelText   $csharpLabel

Quels sont les points clés à retenir concernant les API de numérisation de reçus ?

Les API de numérisation de reçus, comme IronOCR, offrent des solutions fiables pour automatiser l'extraction de données. Grâce à une technologie OCR avancée, les entreprises peuvent extraire automatiquement les noms des fournisseurs, les dates d'achat, les listes détaillées, les prix, les taxes et les totaux. Grâce à la prise en charge de plusieurs langues , devises et codes-barres , les entreprises peuvent simplifier la gestion des reçus, gagner du temps et prendre des décisions basées sur les données.

IronOCR fournit aux développeurs les outils nécessaires à une extraction de texte précise et efficace, permettant l'automatisation des tâches et une efficacité accrue. L' ensemble complet des fonctionnalités de la bibliothèque comprend la prise en charge de divers types de documents et des améliorations récentes telles qu'une réduction de 98 % de la mémoire .

En remplissant les conditions préalables et en intégrant IronOCR, vous pourrez bénéficier des avantages du traitement automatisé des reçus. La documentation , les exemples et les guides de dépannage de la bibliothèque garantissent une mise en œuvre sans accroc.

Pour plus d'informations, consultez la page relative aux licences ou explorez le tutoriel C# Tesseract OCR .

Questions Fréquemment Posées

Comment puis-je automatiser l'extraction de données de reçus en utilisant l'OCR en C# ?

Vous pouvez automatiser l'extraction de données de reçus en C# en utilisant IronOCR, qui vous permet d'extraire des détails clés comme les articles, les prix, les taxes, et les montants totaux à partir d'images de reçus avec une haute précision.

Quels sont les prérequis pour configurer un projet de numérisation de reçus en C# ?

Pour configurer un projet de numérisation de reçus en C#, vous avez besoin de Visual Studio, de connaissances de base en programmation C#, et de la bibliothèque IronOCR installée dans votre projet.

Comment puis-je installer la bibliothèque OCR en utilisant le gestionnaire de packages NuGet dans Visual Studio ?

Ouvrez Visual Studio et allez dans Outils > Gestionnaire de packages NuGet > Gérer les packages NuGet pour la solution, recherchez IronOCR et installez-le dans votre projet.

Puis-je installer la bibliothèque OCR en utilisant la ligne de commande de Visual Studio ?

Oui, vous pouvez installer IronOCR en ouvrant la console du gestionnaire de packages dans Visual Studio et en exécutant la commande : Install-Package IronOcr.

Comment puis-je extraire le texte d'un reçu entier en utilisant l'OCR ?

Pour extraire le texte d'un reçu entier, utilisez IronOCR pour effectuer une OCR sur l'image complète du reçu, puis affichez le texte extrait à l'aide du code en C#.

Quels avantages une API de numérisation de reçus fournit-elle ?

Une API de numérisation de reçus comme IronOCR automatise l'extraction de données, minimise les erreurs manuelles, améliore la productivité et fournit des informations sur les habitudes de dépense pour de meilleures décisions commerciales.

La bibliothèque OCR prend-elle en charge plusieurs langues et devises ?

Oui, IronOCR prend en charge plusieurs langues, devises et formats de reçus, ce qui le rend idéal pour des applications globales.

Quelle est la précision de la bibliothèque OCR dans l'extraction de texte à partir d'images ?

IronOCR assure une haute précision en utilisant des algorithmes OCR avancés, la vision par ordinateur, et des modèles d'apprentissage automatique, même dans des scénarios complexes.

Quels types de données peuvent être extraits des reçus en utilisant l'OCR ?

IronOCR peut extraire des données telles que les articles, les prix, les montants de taxes, les montants totaux et d'autres détails de reçu.

Comment l'automatisation de l'analyse des reçus peut-elle améliorer les processus commerciaux ?

L'automatisation de l'analyse des reçus avec IronOCR améliore les processus commerciaux en réduisant l'entrée manuelle, permettant une collecte de données précise et facilitant la prise de décisions basées sur les données.

Kannaopat Udonpant
Ingénieur logiciel
Avant de devenir ingénieur logiciel, Kannapat a obtenu un doctorat en ressources environnementales à l'université d'Hokkaido au Japon. Pendant qu'il poursuivait son diplôme, Kannapat est également devenu membre du laboratoire de robotique de véhicules, qui fait partie du département de bioproduction. En 2022, il a utilisé ses compé...
Lire la suite