API OCR dla faktur (samouczek dla programistów)
API OCR do faktur automatyzuje wyodrębnianie danych z faktur przy użyciu uczenia maszynowego, eliminując błędy ręcznego wprowadzania danych i dokładnie przechwytując dane dostawców, numery faktur oraz ceny zarówno z dokumentów cyfrowych, jak i zeskanowanych. Ten samouczek pokazuje, jak zbudować rozwiązanie do OCR faktur za pomocą IronOCR.
Wykorzystując uczenie maszynowe i wizję komputerową, technologia OCR faktur przekształca dane z faktur w formaty gotowe do automatycznego przetwarzania. Dowiesz się, jak radzić sobie z typowymi wyzwaniami, takimi jak opóźnienia związane z ręcznym wprowadzaniem danych, koszty i błędy, jednocześnie dokładnie wyodrębniając informacje o dostawcach, numery faktur i ceny z dowolnego formatu faktury.
W tym artykułe wykorzystano IronOCR, wiodący interfejs API do rozpoznawania faktur dla programistów .NET.
Jak stworzyć API OCR dla faktur
- Pobierz i zainstaluj API OCR do faktur
- Utwórz nowy projekt C# w Visual Studio lub otwórz istniejący.
- Load an existing image file using
`OcrInput`method - Wyodrębnij tekst z obrazu za pomocą metody
OCR.Read. - Print the extracted text in Console using
Console.`WriteLine`
Czym jest IronOCR?
IronOCR, opracowany przez Iron Software, zapewnia programistom kompleksowe narzędzia OCR. Wykorzystuje uczenie maszynowe i wizję komputerową do wyodrębniania tekstu ze skanowanych dokumentów, obrazów i plików PDF, umożliwiając automatyczne przetwarzanie. Jej interfejsy API płynnie integrują się z różnymi językami i platformami, ograniczając błędy ręcznego wprowadzania danych i zwiększając wydajność. Wyodrębnione dane trafiają bezpośrednio do istniejących systemów w celu analizy i podejmowania decyzji. Funkcje takie jak przetwarzanie wstępne obrazów, rozpoznawanie BARCODE-ów i elastyczne parsowanie plików zwiększają jego wszechstronność. IronOCR umożliwia programistom wbudowanie niezawodnego rozpoznawania tekstu w ich aplikacje.
Biblioteka obsługuje 125 języków międzynarodowych dzięki specjalistycznym pakietom językowym, co czyni ją idealnym rozwiązaniem do globalnego przetwarzania faktur. Zaawansowane funkcje obejmują wizję komputerową do automatycznego wyszukiwania tekstu, co jest szczególnie przydatne w przypadku faktur o zróżnicowanym układzie. Ponadto IronOCR zapewnia możliwości przetwarzania wielowątkowego, umożliwiające wydajną obsługę przetwarzania dużych ilości faktur.
Dłączego warto używać IronOCR do przetwarzania faktur?
IronOCR oferuje atrakcyjne zalety dla aplikacji do przetwarzania faktur. Po pierwsze, zapewnia wyjątkową dokładność dzięki zoptymalizowanemu silnikowi Tesseract 5, specjalnie ulepszonemu dla aplikacji .NET. Biblioteka obsługuje różne formaty faktur, od zeskanowanych dokumentów po pliki PDF, a nawet skany o niskiej jakości.
Wbudowane filtry optymalizacji obrazów automatycznie poprawiają jakość obrazu przed przetwarzaniem, co skutkuje dokładniejszym wyodrębnianiem tekstu. W przypadku faktur o specyficznych wymaganiach IronOCR obsługuje niestandardowe szkolenie językowe, umożliwiające optymalizację pod kątem unikalnych czcionek lub formatów powszechnie występujących w typach faktur.
Czym biblioteka IronOCR różni się od innych bibliotek OCR?
IronOCR wyróżnia się prostą, jednowierszową funkcją OCR, zachowując jednocześnie funkcje na poziomie Enterprise. W przeciwieństwie do surowych implementacji Tesseract, IronOCR zapewnia zarządzane API .NET, które płynnie obsługuje złożone operacje. Biblioteka oferuje specjalistyczne metody odczytu dokumentów dla różnych typów dokumentów, w tym dedykowaną obsługę odczytu tabel w dokumentach, niezbędną w przypadku pozycji na fakturach.
Kreator filtrów automatycznie określa najlepsze ustawienia przetwarzania wstępnego dla konkretnych obrazów faktur, eliminując zgadywanie przy optymalizacji. IronOCR zapewnia również kompleksowe możliwości debugowania, umożliwiając programistom wizualizację tego, co widzi silnik OCR, oraz skuteczne rozwiązywanie problemów związanych z ekstrakcją.
Jakie są wymagania wstępne?
Przed rozpoczęciem pracy z IronOCR upewnij się, że spełnione są następujące warunki wstępne:
- Odpowiednie środowisko programistyczne z zainstalowanym IDE, takim jak Visual Studio
- Podstawowa znajomość programowania w języku C#, umożliwiająca skuteczne zrozumieniuiuiuiuie i modyfikowanie przykładów kodu
- Biblioteka IronOCR zainstalowana w projekcie za pomocą menedżera pakietów NuGet lub wiersza poleceń
Spełnienie tych warunków wstępnych przygotuje Cię do skutecznej pracy z IronOCR.
IronOCR udostępnia obszerne przewodniki konfiguracji dla systemów Windows, Linux i macOS. Biblioteka obsługuje wdrażanie w chmurze i zawiera szczegółowe samouczki dotyczące AWS Lambda oraz Azure Functions.
Którą wersję programu Visual Studio powinienem używać?
IronOCR obsługuje wersje Visual Studio od 2017 do najnowszych wydań. Aby zapewnić optymalną kompatybilność i dostęp do najnowszych funkcji języka C#, zaleca się korzystanie z programu Visual Studio 2019 lub 2022. Biblioteka jest w pełni kompatybilna z .NET Framework, .NET Core i .NET 5+, co zapewnia elastyczność w środowisku programistycznym.
W przypadku programowania wielopłatformowego dobrze sprawdza się Visual Studio Code z rozszerzeniem C#. Programiści aplikacji mobilnych mogą skorzystać z wytycznych IronOCR dotyczących implementacji na systemy Android i iOS, dzięki czemu rozwiązanie to nadaje się do aplikacji .NET MAUI.
Jaki poziom wiedzy z zakresu języka C# jest wymagańy?
Do podstawowej implementacji OCR faktur wystarczy średniozaawansowana znajomość języka C#. Powinieneś czuć się swobodnie w:
- Koncepcje programowania obiektowego
- Praca ze strumieniami i operacjami wejścia/wyjścia plików
- Podstawowe wzorce async/await
- Wyrażenia regularne do dopasowywania wzorców
- Obsługa wyjątków zapewniająca solidne zarządzanie błędami
Intuicyjna konstrukcja API IronOCR oznacza, że nie jest wymagańa dogłębna wiedza specjalistyczna w zakresie przetwarzania obrazów lub uczenia maszynowego. Biblioteka wewnętrznie obsługuje złożone operacje, pozwalając skupić się na logice biznesowej. Początkujący mogą zacząć od prostych przykładów OCR.
Jak utworzyć nowy projekt w Visual Studio?
Aby rozpocząć pracę z IronOCR, należy najpierw utworzyć nowy projekt w Visual Studio.
Otwórz program Visual Studio, przejdź do menu Pliki, najedź kursorem na opcję Nowy i kliknij Projekt.
Nowy projekt
W nowym oknie wybierz opcję Aplikacja konsolowa i kliknij Dalej.
Aplikacja konsolowa
Pojawi się nowe okno. Wprowadź nazwę projektu i lokalizację, a następnie kliknij Dalej.
Konfiguracja projektu
Na koniec wybierz framework docelowy i kliknij Utwórz.
Docelowa platforma
Twój nowy projekt Visual Studio jest gotowy. Zainstalujmy IronOCR.
Jaki typ projektu najlepiej sprawdza się w zastosowaniach OCR?
Chociaż w tym samouczku dla uproszczenia wykorzystano aplikację konsolową, IronOCR obsługuje różne typy projektów:
- Aplikacje konsolowe: idealne do przetwarzania wsadowego lub narzędzi wiersza poleceń
- Aplikacje internetowe: Idealne do tworzenia interfejsów API lub usług internetowych
- Windows Forms/WPF: Nadaje się do aplikacji desktopowych z interfejsem graficznym
- Aplikacje .NET MAUI: dla rozwiązań wielopłatformowych
W przypadku przetwarzania dużych ilości danych warto rozważyć wdrożenie IronOCR w ramach usługi Windows lub architektury mikrousług. Funkcje śledzenia postępów biblioteki ułatwiają monitorowanie długotrwałych operacji.
Na którą wersję .NET Framework powinienem się skupić?
IronOCR oferuje szeroką kompatybilność z różnymi wersjami .NET. W przypadku nowych projektów należy wybrać platformę .NET 6.0 lub nowszą, aby uzyskać optymalną wydajność i dostęp do najnowszych funkcji. Biblioteka zachowuje doskonałą kompatybilność wsteczną:
- .NET Framework 4.6.2+: Dla starszych aplikacji Enterprise
- .NET Core 3.1: Długoterminowe wsparcie dla stabilnych wdrożeń
- .NET Framework 5.0+: nowoczesny framework z ulepszeniami wydajności
- .NET Standard 2.0: Maksymalna kompatybilność między platformami
W przypadku wdrażania w kontenerach Docker, .NET 6.0 lub nowszy zapewnia mniejsze rozmiary obrazów i lepszą wydajność. W przypadku Azure Functions obsługiwane są zarówno .NET 6.0, jak i .NET Framework.
Jak zainstalować IronOCR?
Istnieją dwie proste metody pobierania i instalacji IronOCR:
- Korzystanie z menedżera pakietów NuGet w Visual Studio
- Korzystanie z wiersza poleceń programu Visual Studio
Kiedy należy używać menedżera pakietów NuGet, a kiedy wiersza poleceń?
Wybierz między interfejsem graficznym NuGet Package Manager a wierszem poleceń w zależności od swojego stylu pracy:
Interfejs graficzny menedżera pakietów NuGet działa najlepiej, gdy:
- Jesteś nowym użytkownikiem pakietów NuGet
- Chcesz przeglądać pakiety językowe IronOCR
- Wolisz potwierdzenie wizualne
- Zarządzasz wieloma pakietami
Wiersz poleceń (konsola menedżera pakietów) sprawdza się najlepiej, gdy:
- Dobrze znasz interfejsy poleceń
- Postępujesz zgodnie ze skryptowymi wdrożeniami
- Potrzebujesz konkretnych wersji w krótkim czasie
- Korzystasz z zaawansowanych opcji instalacji
Obie metody dają identyczne wyniki — wybierz tę, która bardziej Ci odpowiada i spełnia Twoje wymagania.
Jakie dodatkowe pakiety językowe mogą mi się przydać?
IronOCR obsługuje 125 języków międzynarodowych dzięki specjalistycznym pakietom. W przypadku przetwarzania faktur należy wziąć pod uwagę:
- Pakiety branżowe: Pakiet językowy dla dokumentów finansowych
- Języki regionalne: na podstawie źródeł faktur (hiszpański, francuski, niemiećki)
- Obsługa wielu języków: dla faktur w wielu językach
- Języki niestandardowe: w przypadku specjalistycznych czcionek lub niestandardowych danych szkoleniowych
Pakiety językowe instalują się wraz z głównym pakietem IronOCR i znacznie poprawiają dokładność przetwarzania tekstów w językach innych niż angielski.
Korzystanie z menedżera pakietów NuGet w Visual Studio
Dodaj IronOCR do swojego projektu C# za pomocą menedżera pakietów Visual Studio NuGet.
Przejdź do Narzędzia > Menedżer pakietów NuGet > Zarządzaj pakietami NuGet dla rozwiązania
Menedżer pakietów NuGet
Wyszukaj IronOCR i zainstaluj pakiet w swoim projekcie.
Wybierz pakiet IronOCR w interfejsie użytkownika NuGet Package Manager
Zainstaluj dodatkowe pakiety językowe, korzystając z tej samej metody.
Korzystanie z wiersza poleceń programu Visual Studio
- W programie Visual Studio przejdź do menu Narzędzia > Menedżer pakietów NuGet > Konsola menedżera pakietów
-
Wpisz to polecenie w konsoli menedżera pakietów:
Install-Package IronOcr
Konsola menedżera pakietów
Pakiet można pobrać i zainstalować w bieżącym projekcie, po czym jest gotowy do użycia.
Jak wyodrębnić dane z faktur za pomocą IronOCR?
Łatwo wyodrębniaj dane z faktur za pomocą IronOCR, używając zaledwie kilku linii kodu. Zastępuje to ręczne wprowadzanie danych i usprawnia przepływ pracy.
Oto przykładowa faktura do wyodrębnienia tekstu:
Przykładowa faktura
Wyodrębnijmy wszystkie dane z tej faktury:
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
Przetwarzanie faktur w celu wyodrębnienia określonych danych z faktur
Wyodrębnij konkretne dane z faktur, takie jak numery faktur klientów, za pomocą tego kodu:
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
Skanowanie faktur
W przypadku złożonych scenariuszy ekstrakcji należy użyć specjalistycznych konfiguracji OCR, aby zoptymalizować je pod kątem typów faktur. Klasa OcrResult zapewnia szczegółowe informacje o każdym rozpoznanym elemencie, w tym współrzędne i wyniki pewności do celów walidacji.
Jakie są główne zalety API OCR do faktur?
Interfejs API IronOCR do rozpoznawania faktur zmienia sposób przetwarzania faktur dzięki uczeniu maszynowemu i wizji komputerowej. Technologia ta przekształca tekst faktur do formatów nadających się do odczytu maszynowego, upraszczając ekstrakcję danych na potrzeby analizy, integracji i usprawniania procesów. Zapewnia solidną automatyzację przetwarzania faktur, poprawiając dokładność i optymalizując przepływy pracy, takie jak rozliczenia z dostawcami.
IronOCR zapewnia wyjątkową dokładność dzięki zoptymalizowanym wynikom Tesseract bez konieczności dodatkowej konfiguracji. Obsługuje wielostronicowe pliki TIFF, pliki PDF oraz wszystkie popularne formaty obrazów. Odczytywanie BarCode'ów z obrazów dodaje kolejny wymiar ekstrakcji.
Kluczowe korzyści dla przetwarzania faktur:
- Oszczędność czasu: Zmniejszenie czasu z godzin do sekund
- Dokładność: Minimalizuj błędy dzięki ocenie pewności
- Skalowalność: przetwarzaj tysiące danych dzięki wielowątkowości
- Integracja: Eksport do plików PDF z możliwością wyszukiwania lub formatów ustrukturyzowanych
- Redukcja kosztów: niższe koszty operacyjne
Elastyczność wdrożenia biblioteki umożliwia integrację z istniejącymi systemami — lokalnymi, chmurowymi lub hybrydowymi. Dzięki obsłudze Docker, Azure i AWS, IronOCR dostosowuje się do Twoich potrzeb.
Środowiska produkcyjne korzystają z opcji licencyjnych IronOCR, w tym dedykowanego wsparcia i regularnych aktualizacji. Przewodniki dotyczące rozwiązywania problemów oraz wsparcie techniczne biblioteki zapewniają płynne wdrożenie.
Odwiedź stronę główną, aby uzyskać więcej informacji na temat IronOCR. Aby uzyskać dodatkowe samouczki dotyczące OCR faktur, zapoznaj się z tym szczegółowym przewodnikiem po OCR faktur. Aby dowiedzieć się więcej o wykorzystaniu wizji komputerowej w polach faktur, zapoznaj się z tym samouczkiem dotyczącym wizji komputerowej.
Często Zadawane Pytania
Jak mogę zautomatyzować przetwarzanie danych z faktur za pomocą OCR?
Możesz użyć IronOCR do automatyzacji przetwarzania danych z faktur, wykorzystując algorytmy uczenia maszynowego. IronOCR wyodrębnia szczegóły, takie jak informacje o dostawcach, numery faktur i ceny z faktur cyfrowych i zeskanowanych, zmniejszając liczbę błędów ręcznego wprowadzania danych i zwiększając wydajność.
Jakie kroki należy wykonać, aby skonfigurować API OCR do faktur?
Aby skonfigurować interfejs API OCR faktur przy użyciu IronOCR, należy najpierw pobrać i zainstalować bibliotekę IronOCR za pomocą menedżera pakietów NuGet w programie Visual Studio. Następnie należy utworzyć nowy projekt w języku C#, zintegrować bibliotekę IronOCR i użyć jej metod do wczytania i odczytania plików graficznych w celu wyodrębnienia tekstu.
Czy IronOCR może wyodrębnić konkretne dane, takie jak numery faktur?
Tak, IronOCR może wyodrębniać konkretne dane, takie jak numery faktur. Wykorzystuje wyrażenia regularne do dopasowywania wzorców w wyodrębnionym tekście, co pozwala na pobieranie konkretnych informacji z faktur.
Jakie funkcje IronOCR są przydatne w przetwarzaniu faktur?
IronOCR zawiera funkcje takie jak przetwarzanie wstępne obrazów, rozpoznawanie BarCODE-ów i parsowanie plików. Zwiększają one jego zdolność do dokładnego wyodrębniania i przetwarzania tekstu z różnych formatów faktur, poprawiając przechwytywanie danych i wydajność przepływu pracy.
W jaki sposób wstępne przetwarzanie obrazu może poprawić wyniki OCR?
Wstępne przetwarzanie obrazów w IronOCR pomaga poprawić wyniki OCR poprzez optymalizację jakości obrazu przed wyodrębnieniem tekstu. Obejmuje to operacje takie jak regulacja kontrastu i redukcja szumów, co może prowadzić do dokładniejszego wyodrębniania danych z faktur.
Czy można używać IronOCR zarówno do faktur cyfrowych, jak i zeskanowanych?
Tak, IronOCR może przetwarzać zarówno faktury cyfrowe, jak i zeskanowane. Wykorzystuje zaawansowane techniki uczenia maszynowego i wizji komputerowej, aby dokładnie wyodrębnić tekst z różnych formatów i obrazów o różnej jakości.
W jaki sposób IronOCR obsługuje różne formaty stron i typy plików?
IronOCR obsługuje wiele formatów stron oraz popularne typy plików graficznych i PDF. Potrafi skutecznie wyodrębniać tekst ze złożonych dokumentów, dzięki czemu jest wszechstronnym narzędziem do różnych zastosowań związanych z przetwarzaniem faktur.
Gdzie programiści mogą znaleźć samouczki dotyczące korzystania z IronOCR?
Programiści mogą znaleźć samouczki i dodatkowe zasoby na stronie internetowej IronOCR. Witryna oferuje szereg materiałów edukacyjnych, w tym poradniki i wpisy na blogu dotyczące zastosowania IronOCR w różnych scenariuszach.



