Fatura OCR API (Geliştirici Eğitimi)
Fatura OCR API, makine öğrenimini kullanarak fatura verilerini çıkarımı otomatik hale getirir ve hem dijital hem de taranmış belgelerden satıcı detayları, fatura numaraları ve fiyatları doğru bir şekilde yakalarken manuel giriş hatalarını ortadan kaldırır. Bu öğretici, IronOCR ile bir fatura OCR çözümü oluşturmayı gösterir.
Makine öğrenimi ve bilgisayarlı görmeyi kullanarak, Fatura OCR teknolojisi, fatura verilerini otomatik işlemeye hazır formatlara dönüştürür. Manuel veri giriş hatalarını, gecikmelerini ve maliyetlerini nasıl aşacağınızı ve herhangi bir fatura formatından satıcı bilgilerini, fatura numaralarını ve fiyatları nasıl doğru bir şekilde çıkaracağınızı öğreneceksiniz.
Bu makale, .NET geliştiricileri için öncü bir fatura OCR API olan IronOCR kullanıyor.
Fatura OCR API'si Nasıl Oluşturulur
- Fatura OCR API'sini Yükleyin ve Kurun
- Visual Studio'da yeni bir C# projesi oluşturun veya mevcut bir tanesini açın.
- Load an existing image file using
`OcrInput`method Ocr.Readyöntemi kullanarak görüntüden Metni Çıkartın.- Print the extracted text in Console using
Console.`WriteLine`
IronOCR Nedir?
Iron Software tarafından geliştirilen IronOCR, geliştiricilere kapsamlı OCR araçları sağlar. Makine öğrenimi ve bilgisayarlı görü kullanarak taranmış belgelerden, görüntülerden ve PDF'lerden metin çıkartır, otomatik işlemeye olanak tanır. API'si çeşitli diller ve platformlarla sorunsuz bir şekilde bütünleşir, manuel veri girişi hatalarını azaltır ve verimliliği artırır. Çıkarılan veriler, analiz ve karar verme için doğrudan mevcut sistemlere akar. görüntü ön işleme, barkod tanıma ve esnek dosya ayrıştırma gibi özellikleri, çok yönlülüğünü artırır. IronOCR, geliştiricilere uygulamalarına sağlam metin tanıma ekleme yetkisi verir.
Kütüphane, küresel fatura işleme için ideal hale gelen 125 uluslararası dili özel dil paketleri aracılığıyla destekler. Gelişmiş özellikler, özellikle değişen düzenlere sahip faturalar için kullanışlı olan metni otomatik olarak bulmak için bilgisayarlı görü içerir. Ek olarak, IronOCR, yüksek hacimli fatura işlemini verimli bir şekilde yönetmek için çoklu iş parçacıklı işleme yetenekleri sağlar.
Fatura İşleme için Neden IronOCR Kullanmalıyım?
IronOCR, fatura işleme uygulamaları için ikna edici avantajlar sunar. İlk olarak, .NET uygulamaları için özel olarak geliştirilen optimize edilmiş Tesseract 5 motoru ile olağanüstü doğruluk sağlar. Kütüphane, taranmış belgelerden PDF dosyalarına kadar çeşitli fatura formatlarını ve hatta düşük kaliteli taramaları da başa çıkar.
Yerleşik görüntü optimizasyon filtreleri işlemden önce görüntü kalitesini otomatik olarak artırır, daha doğru metin çıkarımıyla sonuçlanır. Belirli gereksinimlere sahip faturalar için, IronOCR, fatura türlerinizde yaygın olan benzersiz yazı tipleri veya formatlar için optimizasyon sağlayan özel dil eğitimini destekler.
Diğer OCR Kütüphanelerinden IronOCR'yi Farklı Yapan Nedir?
IronOCR, kurumsal düzeyde özellikleri korurken basit tek satır OCR yeteneği ile kendisini ayırır. Ham Tesseract uygulamalarından farklı olarak, IronOCR, karmaşık işlemleri sorunsuz bir şekilde yöneten bir yönetilen .NET API sağlar. Kütüphane, çeşitli belge türleri için özelleştirilmiş belge okuma yöntemleri sunar, özellikle fatura satır öğeleri için gerekli olan belgelerdeki tabloları okuma konusuna özel destek verir.
Filtre Sihirbazı, belirli fatura görüntüleri için en iyi ön işlem ayarlarını otomatik olarak belirler, optimizasyonda tahminde bulunmayı ortadan kaldırır. IronOCR ayrıca geliştiricilerin OCR motorunun ne gördüğünü görselleştirmesi ve çıkartma sorunlarını etkili bir şekilde çözmesi için kapsamlı hata ayıklama yetenekleri sağlar.
Hangi Ön Gereksinimlere İhtiyacım Var?
IronOCR ile çalışmadan önce, bu ön koşulların yerinde olduğundan emin olun:
- Visual Studio gibi bir IDE kurulu uygun bir geliştirme ortamı
- Kod örneklerini etkili bir şekilde kavramak ve değiştirmek için C# programlamada temel bir anlayış
- IronOCR kütüphanesi projenize NuGet Paket Yöneticisi veya komut satırı aracılığıyla kurulmuş
Bu ön koşulları karşılamak, IronOCR ile başarılı bir şekilde çalışmaya dalmanız için sizi hazırlar.
IronOCR, Windows, Linux ve macOS için kapsamlı kurulum kılavuzları sağlar. Kütüphane, AWS Lambda ve Azure Fonksiyonları için özel dersler ile bulut dağıtımını destekler.
Hangi Visual Studio Sürümünü Kullanmalıyım?
IronOCR, Visual Studio'nun 2017'den en son sürümlerine kadar olan sürümlerini destekler. En iyi uyumluluk ve en yeni C# özelliklerine erişim için Visual Studio 2019 veya 2022 önerilir. Kütüphane, .NET Framework, .NET Core ve .NET 5+ ile tamamen uyumludur ve geliştirme ortamınızda esneklik sağlar.
Çapraz platform geliştirimi için, C# eklentisi ile Visual Studio Code iyi çalışır. Mobil geliştiriciler, IronOCR'nin Android ve iOS uygulamaları için yönergelerinden yararlanabilir, bu da onu .NET MAUI uygulamaları için uygun kılar.
Hangi C# Bilgi Seviyesine İhtiyacım Var?
Temel fatura OCR uygulaması için orta düzey C# bilgisi yeterlidir. Aşina olmanız gerekenler:
- Nesne yönelimli programlama kavramları
- akışlarla ve dosya girdi/çıktısı ile çalışmak
- Temel async/await desenleri
- Desen eşlemesi için düzenli ifadeler
- Hata yönetimi için istisna işleme
IronOCR'nin sezgisel API tasarımı, derin bir görüntü işleme veya makine öğrenmesi uzmanlığı gerektirmez. Kütüphane, karmaşık işlemleri dahili olarak halleder, böylece siz iş mantığına odaklanabilirsiniz. Yeni başlayanlar basit OCR örnekleri ile başlayabilir.
Yeni Bir Visual Studio Projesi Nasıl Oluşturulur?
IronOCR ile başlamak için önce yeni bir Visual Studio projesi oluşturun.
Visual Studio'yu açın, Dosya'ya gidin, Yeni üzerine gelin ve Proje'ye tıklayın.
Yeni Proje
Yeni pencerede Konsol Uygulaması'nı seçin ve Sonraki'ye tıklayın.
Konsol Uygulaması
Yeni bir pencere açılır. Proje adınızı ve konumunuzu girin, ardından Sonraki'ye tıklayın.
Proje Yapılandırması
Son olarak, Hedef çerçeveyi seçin ve Oluştur'a tıklayın.
Hedef Çerçeve
Yeni Visual Studio projeniz hazır. Şimdi IronOCR'yi kuralım.
OCR Uygulamaları İçin Hangi Proje Türü En İyi Çalışır?
Bu öğretici basitlik için bir Konsol Uygulaması kullanırken, IronOCR çeşitli proje türlerini destekler:
- Konsol Uygulamaları: Toplu işleme veya komut satırı araçları için ideal
- Web Uygulamaları: API'ler veya web tabanlı servisler oluşturmak için mükemmel
- Windows Forms/WPF: GUI ile masaüstü uygulamaları için uygun
- .NET MAUI Uygulamaları: Çapraz platform çözümler için
Yoğun işlem gereksinimleri için, IronOCR'yi Windows Hizmeti veya mikro hizmetler mimarisinde uygulamayı düşünün. Kütüphanenin ileri takip yetenekleri uzun süreli işlemleri izlemeyi kolaylaştırır.
Hangi .NET Çerçeve Sürümünü Hedeflemeliyim?
IronOCR, .NET sürümleri arasında geniş bir uyumluluk sunar. Yeni projeler için optimum performans ve en yeni özellikler için .NET 6.0 veya daha yüksek sürümleri hedefleyin. Kütüphane mükemmel geriye dönük uyumluluk sağlar:
- .NET Framework 4.6.2+: Geçmiş işletme uygulamaları için
- .NET Core 3.1: İstikrarlı dağıtımlar için uzun vadeli destek
- .NET 5.0+: Performans iyileştirmeleri ile modern çerçeve
- .NET Standart 2.0: Platformlar arası maksimum uyumluluk
Docker konteynerlerine dağıtım yaparken, .NET 6.0 veya daha yeni sürümler daha küçük resim boyutları ve daha iyi performans sağlar. Azure İşlevlerinde .NET 6.0 ve .NET Framework desteklenir.
IronOCR Nasıl Yüklenir?
IronOCR'yi indirip yüklemek için iki basit yöntem vardır:
- Visual Studio NuGet Paket Yöneticisini Kullanarak
- Visual Studio Komut Satırını Kullanarak
NuGet Paket Yöneticisi ile Komut Satırını Ne Zaman Kullanmalıyım?
Çalışma tarzınıza göre NuGet Paket Yöneticisi GUI ve komut satırı arasında seçim yapın:
NuGet Paket Yöneticisi GUI şu durumlardaki en iyi sonucu verir:
- NuGet paketlerine yeniyseniz
- IronOCR dil paketleri içinde gezinmek istiyorsanız
- Görsel teyidi tercih ediyorsanız
- Birden fazla paketi yönetiyorsanız
Komut Satırı (Paket Yöneticisi Konsolu) şu durumlarda üstünlük sağlar:
- Komut arayüzlerine aşinaysanız
- Senaryolu dağıtımları takip ediyorsanız
- Hızlı bir şekilde belirli sürümlere ihtiyacınız varsa
- gelişmiş kurulum seçeneklerini kullanıyorsanız
Her iki yöntem de aynı sonuçları elde eder—rahatlık ve gereksinimlere göre seçim yapın.
Hangi Ek Dil Paketlerine İhtiyacım Olabilir?
IronOCR, 125 uluslararası dili özel paketler aracılığıyla destekler. Fatura işlem süreci için düşünülmesi gerekenler:
- İş odaklı paketler: Mali belgeler için Finansal Dil Paketi
- Bölgesel diller: Fatura kaynaklarına dayalı (İspanyolca, Fransızca, Almanca)
- Çoklu dil desteği: birden fazla dili barındıran faturalar için
- Özel diller: Özel fontlar veya özel eğitim verileri için
Dil paketleri ana IronOCR paketi ile birlikte yüklenir ve İngilizce dışındaki metinlerde doğruluğu önemli ölçüde artırır.
Visual Studio NuGet Paket Yöneticisini Kullanma
C# projenize IronOCR'yi Visual Studio NuGet Paket Yöneticisi kullanarak dahil edin.
Araçlar > NuGet Paket Yöneticisi > Çözüm için NuGet Paketlerini Yönet bölümüne gidin.
NuGet Paket Yöneticisi
IronOCR'yi arayın ve paketi projenize yükleyin.
NuGet Paket Yöneticisi UI'de IronOCR paketini seçin
Aynı yöntemle ek dil paketlerini yükleyin.
Visual Studio Komut Satırını Kullanma
- Visual Studio'da Araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu bölümüne gidin.
-
Paket Yöneticisi Konsolu'nda bu komutu girin:
Install-Package IronOcr
Paket Yöneticisi Konsolu
Paket, mevcut projenize indirilir ve kurulur, kullanıma hazırdır.
IronOCR ile Faturaların Verisini Nasıl Çıkarırım?
IronOCR ile yalnızca birkaç kod satırı kullanarak fatura verilerini kolayca çıkarın. Bu, manuel veri girişinin yerini alır ve iş akışınızı hızlandırır.
Metin çıkarma için örnek fatura burada:
Örnek fatura
Bu faturadan tüm veriyi çıkaralım:
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:
```C#
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:
```C#
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
Faturalardan Belirli Verileri Çıkarmak için Fatura İşleme
Müşteri fatura numaraları gibi belirli fatura verilerini bu kodla çıkarın:
``C# using IronOCR; using System; using System.Text.RegularExpressions`;
// IronTesseract sınıfının yeni bir örneğini başlat
var ocr = new IronTesseract();
// OcrInput nesnesini kullanarak resim dosyasını yükle
using (var input = new OcrInput(@"r2.png"/))
{
// Resim üzerinde OCR gerçekleştirin
var result = ocr.Read(input/);
// Fatura numarası için bir normal ifade deseni tanımlayın var linePattern = @"INV\/\d{4}\/\d{5}";
// Çıkarılan metin üzerinde deseni eşleştirin
var lineMatch = Regex.Match(result.Text, linePattern);
// Desenin metnin herhangi bir kısmı ile eşleşip eşleşmediğini kontrol edin
if (lineMatch.Success)
{
// Eşleşme bulunursa, fatura numarasını yazdırın
var lineValue = lineMatch.Value;
Console.WriteLine("Müşteri Fatura numarası: " + lineValue);
}
}

**Fatura Tarama**
Karmaşık çıkarım senaryoları için, fatura türleriniz için optimize etmek üzere [özelleşmiş OCR yapılandırmaları](/csharp/ocr/examples/csharp-configure-setup-tesseract/) kullanın. [OcrResult sınıfı](/csharp/ocr/examples/results-objects/), doğrulama için her tanınan eleman hakkında ayrıntılı bilgiler, koordinatlar ve güven skoru içerir.
## Fatura OCR API'nin Temel Faydaları Nelerdir?
IronOCR'nin Fatura OCR API'si fatura işleme süreçlerini makine öğrenimi ve bilgisayarlı görü ile dönüştürür. Bu teknoloji, fatura metnini makine tarafından okunabilir formatlara dönüştürerek analiz, entegrasyon ve süreç iyileştirme için veri çıkarımını basitleştirir. Faturalama işlemleri için güçlü otomasyon sağlar, doğruluğu artırır ve hesaplar gibi iş akışlarını optimize eder.
IronOCR, ek yapılandırma gerektirmeyen optimize edilmiş Tesseract sonuçları ile olağanüstü doğruluk sunar. [Çok sayfalı kareli TIFF](/csharp/ocr/how-to/input-tiff-gif/), [PDF dosyaları](/csharp/ocr/how-to/input-pdfs/) ve tüm popüler görüntü formatlarını destekler. [Görüntülerden barkod okuma](/csharp/ocr/how-to/barcodes/) başka bir çıkarım boyutunu ekler.
Fatura işleme için ana faydalar:
1. **Zaman Tasarrufu**: Saatleri saniyelere indirmek
2. **Doğruluk**: [güven skorlama](/csharp/ocr/how-to/tesseract-result-confidence/) ile hataları minimize etme
3. **Esneklik**: [çoklu işlem](/csharp/ocr/how-to/async/) ile binlerce işlemek
4. **Entegrasyon**: [arama yapılabilir PDF'lere](/csharp/ocr/how-to/searchable-pdf/) ya da [yapılandırılmış formatlara](/csharp/ocr/how-to/read-results/) aktarım
5. **Maliyet Azaltma**: Operasyonel maliyetleri düşürmek
Kütüphanenin [dağıtım esnekliği](/csharp/ocr/features/languages/), mevcut sistemlere entegrasyona olanak tanır—yerinde, bulut veya hibrit. [Docker](/csharp/ocr/get-started/docker/), [Azure](/csharp/ocr/get-started/azure/) ve [AWS](/csharp/ocr/get-started/aws/) desteği ile IronOCR, ihtiyaçlarınıza göre ölçeklenir.
Üretim ortamları, IronOCR'nin [lisanslama seçenekleri](/csharp/ocr/licensing/) ile özel destek ve [düzenli güncellemelerden](/csharp/ocr/product-updates/changelog/) fayda sağlar. Kütüphanenin [sorun giderme kılavuzları](/csharp/ocr/troubleshooting/general-troubleshooting-ocr/) ve [mühendislik desteği](/csharp/ocr/troubleshooting/engineering-request-ocr/), sorunsuz uygulama sağlar.
IronOCR hakkında daha fazla bilgi için [ana sayfa](/csharp/ocr/)yı ziyaret edin. Ek fatura OCR eğiticileri için, bu [ayrıntılı fatura OCR kılavuzuna](/csharp/ocr/blog/using-ironocr/invoice-ocr-csharp-tutorial/) bakın. Fatura alanları için bilgisayarlı görüş kullanımı hakkında bilgi edinmek için bu [bilgisayarlı görüş eğitici](/csharp/ocr/how-to/computer-vision/)ye göz atınız.Sıkça Sorulan Sorular
OCR kullanarak fatura veri işlemesini nasıl otomatikleştirebilirim?
IronOCR'u makine öğrenimi algoritmalarını kullanarak fatura veri işlemeyi otomatikleştirmek için kullanabilirsiniz. IronOCR, tedarikçi bilgileri, fatura numaraları ve fiyatlar gibi detayları dijital ve taranmış faturalarından çıkararak manuel giriş hatalarını azaltır ve verimliliği artırır.
Bir Fatura OCR API'sini kurarken hangi adımlar yer alıyor?
IronOCR kullanarak bir Fatura OCR API'si kurmak için, önce Visual Studio'nun NuGet Paket Yöneticisi aracılığıyla kütüphaneyi indirip yükleyin. Ardından yeni bir C# projesi oluşturun, IronOCR'u entegre edin ve metin çıkarımı için dosya yüklemek ve okumak için yöntemlerini kullanın.
IronOCR, fatura numaraları gibi belirli verileri çıkarabilir mi?
Evet, IronOCR, fatura numaraları gibi belirli verileri çıkarabilir. Düzenli ifadeleri kullanarak çıkarılmış metindeki kalıpları eşleştirerek faturalardan belirli bilgileri çekebilirsiniz.
Fatura işleme için IronOCR'un sunduğu bazı özellikler nelerdir?
IronOCR, resim ön işleme, barkod tanıma ve dosya ayrıştırma gibi özellikler içerir. Bunlar, çeşitli fatura formatlarından metinleri doğru bir şekilde çıkarmak ve işlemek için yeteneğini artırır, veri toplama ve iş akışı verimliliğini artırır.
Resim ön işleme, OCR sonuçlarını nasıl artırabilir?
IronOCR'da resim ön işleme, metin çıkarma öncesinde resim kalitesini optimize ederek OCR sonuçlarını iyileştirir. Bu, daha doğru veri çıkarımı için kontrast ayarlama ve gürültü azaltma işlemlerini içerir.
IronOCR’un hem dijital hem de taranmış faturaları işlemesi mümkün mü?
Evet, IronOCR hem dijital hem de taranmış faturaları işleyebilir. Gelişmiş makine öğrenimi ve bilgisayarla görme tekniklerini kullanarak, çeşitli format ve resim kalitesindeki metni doğru bir şekilde çıkarır.
IronOCR, birden fazla sayfa formatı ve dosya türünü nasıl ele alır?
IronOCR birden fazla sayfa formatını ve popüler resim ve PDF dosya türlerini destekler. Karmaşık belgelerden metni verimli bir şekilde çıkararak, çeşitli fatura işleme uygulamaları için çok yönlü hale gelir.
Geliştiriciler IronOCR'u kullanmak için talimatları nerede bulabilirler?
Geliştiriciler, IronOCR web sitesinde talimatlar ve ek kaynaklar bulabilirler. Sitede, farklı senaryolarda IronOCR'u uygulamak için nasıl yapılır bilgileri ve blog yazıları gibi çeşitli öğrenme materyalleri sunulmaktadır.



