API OCR pour les factures (Tutoriel pour développeurs)
L'API OCR de factures automatise l'extraction des données de factures grâce à l'apprentissage automatique, éliminant les erreurs de saisie manuelle tout en capturant avec précision les informations sur les fournisseurs, les numéros de factures et les prix à partir de documents numériques et numérisés. Ce tutoriel explique comment créer une solution OCR pour factures avec IronOCR.
En tirant parti de l'apprentissage automatique et de la vision par ordinateur, la technologie OCR de factures transforme les données des factures en formats prêts pour un traitement automatisé. Vous apprendrez à surmonter les difficultés courantes telles que les retards, les coûts et les erreurs liés à la saisie manuelle des données, tout en extrayant avec précision les informations sur les fournisseurs, les numéros de facture et les prix à partir de n'importe quel format de facture.
Cet article utilise IronOCR , une API OCR de pointe pour les factures destinée aux développeurs .NET .
Comment créer une API OCR pour factures
- Téléchargez et installez l'API OCR de factures
- Créez un nouveau projet C# dans Visual Studio ou ouvrez-en un existant.
- Charger un fichier image existant à l'aide de la méthode ``OcrInput``
- Extraire le texte d'une image à l'aide de la méthode `Ocr.Read` .
- Imprimer le texte extrait dans la console à l'aide de `Console.`WriteLine``
Qu'est-ce qu'IronOCR ?
IronOCR, développé par Iron Software, fournit des outils OCR complets pour les développeurs. Il utilise l'apprentissage automatique et la vision par ordinateur pour extraire le texte de documents numérisés, d'images et de fichiers PDF, permettant ainsi un traitement automatisé. Ses API s'intègrent parfaitement à divers langages et plateformes, réduisant ainsi les erreurs de saisie manuelle de données et améliorant l'efficacité. Les données extraites sont directement intégrées aux systèmes existants pour analyse et prise de décision. Des fonctionnalités telles que le prétraitement d'images , la reconnaissance de codes-barres et l'analyse flexible des fichiers renforcent sa polyvalence. IronOCR permet aux développeurs d'intégrer une reconnaissance de texte robuste dans leurs applications.
La bibliothèque prend en charge 125 langues internationales grâce à des modules linguistiques spécialisés, ce qui la rend idéale pour le traitement des factures internationales. Parmi les fonctionnalités avancées, on trouve la vision par ordinateur pour la détection automatique de texte , particulièrement utile pour les factures aux mises en page variées. De plus, IronOCR offre des capacités de traitement multithread pour gérer efficacement le traitement de volumes importants de factures.
Pourquoi utiliser IronOCR pour le traitement des factures ?
IronOCR offre des avantages considérables pour les applications de traitement des factures. Tout d'abord, il offre une précision exceptionnelle grâce à son moteur Tesseract 5 optimisé, spécialement conçu pour les applications .NET . La bibliothèque prend en charge différents formats de factures, des documents numérisés aux fichiers PDF , et même les numérisations de faible qualité .
Les filtres d'optimisation d'image intégrés améliorent automatiquement la qualité de l'image avant traitement, ce qui permet une extraction de texte plus précise. Pour les factures présentant des exigences spécifiques, IronOCR prend en charge l'apprentissage linguistique personnalisé , permettant une optimisation pour les polices ou formats uniques couramment rencontrés dans vos types de factures.
Qu'est-ce qui différencie IronOCR des autres bibliothèques OCR ?
IronOCR se distingue par sa capacité de reconnaissance optique de caractères (OCR) simple sur une seule ligne, tout en conservant des fonctionnalités de niveau entreprise. Contrairement aux implémentations Tesseract brutes, IronOCR fournit une API .NET gérée qui gère les opérations complexes de manière transparente. La bibliothèque propose des méthodes de lecture de documents spécialisées pour différents types de documents, notamment une assistance dédiée à la lecture des tableaux dans les documents , essentielle pour les lignes de factures.
L' assistant de filtrage détermine automatiquement les meilleurs paramètres de prétraitement pour vos images de factures spécifiques, éliminant ainsi les conjectures en matière d'optimisation. IronOCR offre également des fonctionnalités de débogage complètes, permettant aux développeurs de visualiser ce que voit le moteur OCR et de résoudre efficacement les problèmes d'extraction.
Quels sont les prérequis ?
Avant d'utiliser IronOCR, assurez-vous que les conditions préalables suivantes sont remplies :
- Un environnement de développement approprié, avec un EDI tel que Visual Studio, installé.
- Connaissance de base de la programmation C# pour comprendre et modifier efficacement les exemples de code.
- Bibliothèque IronOCR installée dans votre projet via le gestionnaire de packages NuGet ou en ligne de commande
Le respect de ces prérequis vous préparera à utiliser IronOCR avec succès.
IronOCR fournit des guides d'installation complets pour Windows , Linux et macOS . La bibliothèque prend en charge le déploiement dans le cloud avec des tutoriels spécifiques pour AWS Lambda et Azure Functions .
Quelle version de Visual Studio dois-je utiliser ?
IronOCR prend en charge les versions de Visual Studio de 2017 jusqu'aux versions les plus récentes. Pour une compatibilité optimale et un accès aux fonctionnalités C# les plus récentes, Visual Studio 2019 ou 2022 est recommandé. La bibliothèque est entièrement compatible avec .NET Framework, .NET Core et .NET 5+ , garantissant ainsi une grande flexibilité dans votre environnement de développement.
Pour le développement multiplateforme, Visual Studio Code avec l'extension C# fonctionne bien. Les développeurs mobiles peuvent tirer parti des conseils d'IronOCR pour les implémentations Android et iOS , ce qui le rend adapté aux applications .NET MAUI .
Quel niveau de connaissance en C# me faut-il ?
Une connaissance intermédiaire du C# suffit pour la mise en œuvre de base de la reconnaissance optique de caractères (OCR) sur les factures. Vous devriez être à l'aise avec :
- Concepts de programmation orientée objet
- Gestion des flux et des entrées/sorties de fichiers
- Modèles async/await de base
- Expressions régulières pour la correspondance de modèles
- Gestion des exceptions pour une gestion robuste des erreurs
La conception intuitive de l'API d'IronOCR signifie qu'une expertise approfondie en traitement d'images ou en apprentissage automatique n'est pas nécessaire. La bibliothèque gère en interne les opérations complexes, vous permettant ainsi de vous concentrer sur la logique métier. Les débutants peuvent commencer par des exemples OCR simples .
Comment créer un nouveau projet Visual Studio ?
Pour commencer avec IronOCR, créez d'abord un nouveau projet Visual Studio.
Ouvrez Visual Studio, allez dans Fichiers, survolez Nouveau et cliquez sur Projet.
Nouveau Projet
Dans la nouvelle fenêtre, sélectionnez Application console et cliquez sur Suivant.
Application Console
Une nouvelle fenêtre apparaît. Saisissez le nom et l'emplacement de votre projet, puis cliquez sur Suivant.
Configuration du Projet
Enfin, sélectionnez le framework cible et cliquez sur Créer.
Framework Cible
Votre nouveau projet Visual Studio est prêt. Installons IronOCR.
Quel type de projet convient le mieux aux applications OCR ?
Bien que ce tutoriel utilise une application console par souci de simplicité, IronOCR prend en charge différents types de projets :
- Applications console : Idéales pour le traitement par lots ou les outils en ligne de commande
- Applications Web : Idéales pour créer des API ou des services Web
- Windows Forms/WPF : Convient aux applications de bureau avec interface graphique.
- Applications .NET MAUI : Pour des solutions multiplateformes
Pour le traitement de volumes importants, envisagez d'implémenter IronOCR dans une architecture de service Windows ou de microservices. Les fonctionnalités de suivi des progrès de la bibliothèque facilitent la surveillance des opérations de longue durée.
Quelle version du .NET Framework dois-je cibler ?
IronOCR offre une large compatibilité avec les versions .NET . Pour les nouveaux projets, visez .NET 6.0 ou une version supérieure pour des performances optimales et l'accès aux dernières fonctionnalités. La bibliothèque maintient une excellente compatibilité ascendante :
- .NET Framework 4.6.2+ : Pour les applications Enterprise existantes
- .NET Core 3.1 : Prise en charge à long terme des déploiements stables
- .NET 5.0+ : Framework moderne avec des performances améliorées
- .NET Standard 2.0 : Compatibilité maximale entre les plateformes
Lors du déploiement sur des conteneurs Docker , .NET 6.0 ou version ultérieure offre des images plus petites et de meilleures performances. Pour Azure Functions , .NET 6.0 et .NET Framework sont tous deux pris en charge.
Comment installer IronOCR?
Il existe deux méthodes simples pour télécharger et installer IronOCR:
- Utilisation du gestionnaire de packages NuGet de Visual Studio
- Utilisation de la ligne de commande de Visual Studio
Quand dois-je utiliser le gestionnaire de packages NuGet plutôt que la ligne de commande ?
Choisissez entre l'interface graphique et la ligne de commande du gestionnaire de packages NuGet en fonction de votre flux de travail :
L'interface graphique du gestionnaire de packages NuGet fonctionne de manière optimale lorsque :
- Vous débutez avec les packages NuGet
- Vous souhaitez parcourir les packs de langue IronOCR
- Vous préférez une confirmation visuelle
- Vous gérez plusieurs colis.
La ligne de commande (console du Package Manager) excelle lorsque :
- Vous êtes à l'aise avec les interfaces de commande
- Vous suivez des déploiements scriptés
- Vous avez besoin de versions spécifiques rapidement
- Vous utilisez des options d'installation avancées
Les deux méthodes aboutissent à des résultats identiques ; choisissez en fonction de votre confort et de vos besoins.
De quels packs de langue supplémentaires pourrais-je avoir besoin ?
IronOCR prend en charge 125 langues internationales grâce à des packs spécialisés. Pour le traitement des factures, tenez compte des points suivants :
- Packs spécifiques aux entreprises : Pack de langue financière pour les documents financiers
- Langues régionales : Selon les sources de facturation (espagnol, français, allemand)
- Prise en charge multilingue : Pour les factures multilingues
- Langues personnalisées : Pour les polices spécialisées ou les données d'entraînement personnalisées
Les modules linguistiques s'installent en même temps que le package principal IronOCR et améliorent considérablement la précision pour les textes non anglais.
Utilisation du Package Manager NuGet de Visual Studio
Intégrez IronOCR à votre projet C# à l'aide du gestionnaire de packages NuGet de Visual Studio.
Accédez à Outils > Gestionnaire de packages NuGet > Gérer les packages NuGet pour la solution
Package Manager NuGet
Recherchez IronOCR et installez le package dans votre projet.
Sélectionnez le package IronOCR dans l'interface utilisateur du gestionnaire de packages NuGet.
Installez les modules linguistiques supplémentaires en utilisant la même méthode.
Utilisation de la ligne de commande Visual Studio
- Dans Visual Studio, accédez à Outils > Gestionnaire de packages NuGet > Console du gestionnaire de packages
-
Saisissez cette commande dans la console du gestionnaire de packages :
Install-Package IronOcr
Console du Gestionnaire de Packages
Le package se télécharge et s'installe dans votre projet actuel, prêt à l'emploi.
Comment extraire des données de factures à l'aide IronOCR?
Extrayez facilement les données de vos factures avec IronOCR en utilisant seulement quelques lignes de code. Cela remplace la saisie manuelle des données et rationalise votre flux de travail.
Voici un exemple de facture pour l'extraction de texte :
La facture d'exemple
Extrayons toutes les données de cette facture :
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; }
}
Imports IronOcr
Imports System
Imports System.Text.RegularExpressions
Imports System.Collections.Generic
Public Class InvoiceDataExtractor
Private ReadOnly ocr As IronTesseract
Public Sub New()
ocr = New IronTesseract()
' Configure for optimal invoice reading
ocr.Configuration.ReadBarcodes = True ' Many invoices include barcodes
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
End Sub
Public Function ExtractInvoiceData(imagePath As String) As InvoiceData
Dim invoiceData As New InvoiceData()
Using input As New OcrInput(imagePath)
' Apply filters for better accuracy
input.EnhanceResolution(300)
input.Sharpen()
Dim result = ocr.Read(input)
Dim 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 Then
invoiceData.BarcodeValues = New List(Of String)()
For Each barcode In result.Barcodes
invoiceData.BarcodeValues.Add(barcode.Value)
Next
End If
End Using
Return invoiceData
End Function
Private Function ExtractPattern(text As String, pattern As String) As String
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
Return If(match.Success, match.Value, String.Empty)
End Function
Private Function ExtractDate(text As String, pattern As String) As DateTime?
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
If match.Success AndAlso match.Groups.Count > 1 Then
Dim dateValue As DateTime
If DateTime.TryParse(match.Groups(1).Value, dateValue) Then
Return dateValue
End If
End If
Return Nothing
End Function
Private Function ExtractAmount(text As String, pattern As String) As Decimal
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
If match.Success AndAlso match.Groups.Count > 1 Then
Dim amountStr = match.Groups(1).Value.Replace(",", "")
Dim amount As Decimal
If Decimal.TryParse(amountStr, amount) Then
Return amount
End If
End If
Return 0
End Function
Private Function ExtractVendorName(text As String) As String
' Usually the vendor name appears in the first few lines
Dim lines = text.Split(ControlChars.Lf)
If lines.Length > 0 Then
' Simple heuristic: first non-empty line that's not a common header
For Each line In lines
Dim trimmed = line.Trim()
If Not String.IsNullOrEmpty(trimmed) AndAlso
Not trimmed.ToLower().Contains("invoice") AndAlso
trimmed.Length > 3 Then
Return trimmed
End If
Next
End If
Return String.Empty
End Function
Private Function ExtractLineItems(result As OcrResult) As List(Of LineItem)
Dim lineItems As New List(Of LineItem)()
' Use IronOCR's table detection capabilities
If result.Tables IsNot Nothing AndAlso result.Tables.Count > 0 Then
For Each table In result.Tables
' Process each row as a potential line item
For i As Integer = 1 To table.RowCount - 1 ' Skip header row
Dim item As New LineItem With {
.Description = If(table(i, 0)?.Text, ""),
.Quantity = ParseQuantity(table(i, 1)?.Text),
.UnitPrice = ParseAmount(table(i, 2)?.Text),
.Total = ParseAmount(table(i, 3)?.Text)
}
If Not String.IsNullOrEmpty(item.Description) Then
lineItems.Add(item)
End If
Next
Next
End If
Return lineItems
End Function
Private Function ParseQuantity(text As String) As Integer
If String.IsNullOrEmpty(text) Then Return 0
Dim cleaned = Regex.Replace(text, "[^\d]", "")
Dim qty As Integer
Return If(Integer.TryParse(cleaned, qty), qty, 0)
End Function
Private Function ParseAmount(text As String) As Decimal
If String.IsNullOrEmpty(text) Then Return 0
Dim cleaned = Regex.Replace(text, "[^\d.]", "")
Dim amt As Decimal
Return If(Decimal.TryParse(cleaned, amt), amt, 0)
End Function
End Class
' Data classes for structured invoice information
Public Class InvoiceData
Public Property InvoiceNumber As String
Public Property InvoiceDate As DateTime?
Public Property DueDate As DateTime?
Public Property VendorName As String
Public Property Total As Decimal
Public Property Tax As Decimal
Public Property LineItems As List(Of LineItem)
Public Property BarcodeValues As List(Of String)
End Class
Public Class LineItem
Public Property Description As String
Public Property Quantity As Integer
Public Property UnitPrice As Decimal
Public Property Total As Decimal
End Class
Traitement des factures pour extraire des données spécifiques des factures
Extrayez des données spécifiques de factures, telles que les numéros de factures clients, avec ce code :
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);
}
}
Imports IronOcr
Imports System
Imports System.Text.RegularExpressions
' Initialize a new instance of the IronTesseract class
Dim ocr As New IronTesseract()
' Use the OcrInput object to load the image file
Using input As New OcrInput("r2.png")
' Perform OCR on the image
Dim result = ocr.Read(input)
' Define a regular expression pattern for the invoice number
Dim linePattern As String = "INV/\d{4}/\d{5}"
' Match the pattern in the extracted text
Dim lineMatch As Match = Regex.Match(result.Text, linePattern)
' Check if the pattern matches any part of the text
If lineMatch.Success Then
' If a match is found, print the invoice number
Dim lineValue As String = lineMatch.Value
Console.WriteLine("Customer Invoice number: " & lineValue)
End If
End Using
Numérisation des factures
Pour les scénarios d'extraction complexes, utilisez des configurations OCR spécialisées afin d'optimiser le traitement pour vos types de factures. La classe OcrResult fournit des informations détaillées sur chaque élément reconnu, notamment ses coordonnées et son score de confiance pour la validation.
Quels sont les principaux avantages d'une API OCR pour factures ?
L'API OCR pour factures d'IronOCR transforme le traitement des factures grâce à l'apprentissage automatique et à la vision par ordinateur. Cette technologie convertit le texte des factures en formats lisibles par machine, simplifiant ainsi l'extraction des données pour l'analyse, l'intégration et l'amélioration des processus. Il offre une automatisation robuste du traitement des factures, améliorant la précision et optimisant les flux de travail tels que la comptabilité fournisseurs.
IronOCR offre une précision exceptionnelle grâce à l'utilisation de résultats Tesseract optimisés sans configuration supplémentaire. Il prend en charge les fichiers TIFF multipages , les fichiers PDF et tous les formats d'image courants. La lecture des codes-barres à partir d'images ajoute une dimension d'extraction supplémentaire.
Principaux avantages du traitement des factures :
- Gain de temps : Réduire des heures à quelques secondes
- Précision : Minimiser les erreurs grâce à un système de notation par niveau de confiance
- Évolutivité : Traitement de milliers de données grâce au multithreading
- Intégration : Exportation vers des PDF interrogeables ou des formats structurés
- Réduction des coûts : Diminution des coûts opérationnels
La flexibilité de déploiement de la bibliothèque permet son intégration dans les systèmes existants, qu'ils soient sur site, dans le cloud ou hybrides. Grâce à sa compatibilité avec Docker , Azure et AWS , IronOCR s'adapte à vos besoins.
Les environnements de production bénéficient des options de licence d'IronOCR, notamment d'un support dédié et de mises à jour régulières . Les guides de dépannage et le support technique de la bibliothèque garantissent une mise en œuvre sans accroc.
Visitez la page d'accueil pour plus d'informations sur IronOCR. Pour plus de tutoriels sur la reconnaissance optique de caractères (OCR) des factures, consultez ce guide détaillé sur l'OCR des factures . Pour en savoir plus sur l'utilisation de la vision par ordinateur pour les champs de factures, consultez ce tutoriel sur la vision par ordinateur .
Questions Fréquemment Posées
Comment puis-je automatiser le traitement des données de factures à l'aide de l'OCR?
Vous pouvez utiliser IronOCR pour automatiser le traitement des données de factures en utilisant ses algorithmes d'apprentissage automatique. IronOCR extrait des détails tels que les informations du fournisseur, les numéros de facture et les prix à partir de factures numériques et numérisées, réduisant ainsi les erreurs de saisie manuelle et améliorant l'efficacité.
Quelles sont les étapes impliquées dans la mise en place d'une API OCR de factures ?
Pour mettre en place une API OCR de factures à l'aide d'IronOCR, commencez par télécharger et installer la bibliothèque via le gestionnaire de packages NuGet de Visual Studio. Ensuite, créez un nouveau projet C#, intégrez IronOCR, et utilisez ses méthodes pour charger et lire les fichiers image pour l'extraction de texte.
IronOCR peut-il extraire des données spécifiques comme les numéros de facture?
Oui, IronOCR peut extraire des données spécifiques comme les numéros de facture. Il utilise des expressions régulières pour faire correspondre les motifs dans le texte extrait, vous permettant de récupérer des informations spécifiques des factures.
Quelles sont les caractéristiques d'IronOCR qui bénéficient au traitement des factures?
IronOCR comprend des caractéristiques comme le prétraitement d'images, la reconnaissance de codes-barres et l'analyse de fichiers. Celles-ci améliorent sa capacité à extraire et traiter précisément le texte provenant de divers formats de factures, améliorant la capture de données et l'efficacité du flux de travail.
Comment le prétraitement des images peut-il améliorer les résultats de l'OCR?
Le prétraitement des images dans IronOCR aide à améliorer les résultats de l'OCR en optimisant la qualité de l'image avant l'extraction du texte. Cela comprend des opérations comme l'ajustement du contraste et la réduction du bruit, ce qui peut conduire à une extraction de données plus précise depuis les factures.
Est-il possible d'utiliser IronOCR pour les factures numériques et numérisées?
Oui, IronOCR est capable de traiter à la fois les factures numériques et numérisées. Il utilise des techniques avancées d'apprentissage automatique et de vision par ordinateur pour extraire précisément le texte de divers formats et qualités d'image.
Comment IronOCR gère-t-il les formats de pages multiples et les types de fichiers?
IronOCR prend en charge plusieurs formats de pages ainsi que les types de fichiers d'image et PDF populaires. Il peut extraire efficacement du texte de documents complexes, ce qui le rend polyvalent pour diverses applications de traitement de factures.
Où les développeurs peuvent-ils trouver des tutoriels pour utiliser IronOCR?
Les développeurs peuvent trouver des tutoriels et des ressources supplémentaires sur le site Web d'IronOCR. Le site offre une gamme de matériels d'apprentissage, y compris des guides pratiques et des articles de blog pour appliquer IronOCR dans différents scénarios.



