Fatura OCR API (Geliştirici Eğitimi)
Fatura OCR API'si, makine öğrenimi kullanarak fatura veri çıkarmasını otomatikleştirir, manuel giriş hatalarını ortadan kaldırır ve dijital ve taranmış belgelerden tedarikçi bilgileri, fatura numaraları ve fiyatları doğru bir şekilde yakalar. Bu öğretici, IronOCR ile bir fatura OCR çözümü oluşturmayı gösterir.
Makine öğrenimi ve bilgisayarlı görüden yararlanarak, Fatura OCR teknolojisi fatura verilerini otomatik işlemeye hazır formatlara dönüştürür. Herhangi bir fatura formatından tedarikçi bilgileri, fatura numaraları ve fiyatları doğru bir şekilde çıkarırken manuel veri girişi gecikmeleri, maliyetler ve hatalar gibi yaygın zorluklarla nasıl başa çıkacağınızı öğreneceksiniz.
Bu makale, .NET geliştiricileri için lider bir fatura OCR API olan IronOCR'u kullanır.
Fatura OCR API'si Nasıl Oluşturulur
- Fatura OCR API'sini İndir ve Kur
- Visual Studio'da yeni bir C# projesi oluşturun veya mevcut birini açın.
- Load an existing image file using
`OcrInput`method - Ocr.Read yöntemi ile görüntüden metni çıkarın.
- Print the extracted text in Console using
Console.`WriteLine`
IronOCR Nedir?
Iron Software tarafından geliştirilen IronOCR, geliştiriciler için kapsamlı OCR araçları sağlar. Taranmış belgelerden, görüntülerden ve PDF'lerden metin çıkarmak için makine öğrenimi ve bilgisayarlı görü kullanır, otomatik işlemeyi sağlar. API'leri, çeşitli diller ve platformlarla sorunsuz bir şekilde entegre olur, manuel veri girişi hatalarını azaltır ve verimliliği artırır. Çıkarılan veriler, analiz ve karar verme için mevcut sistemlere doğrudan akar. Görüntü ön işleme, barkod tanıma ve esnek dosya ayrıştırma gibi özellikler, onun çok yönlülüğünü artırır. IronOCR, geliştiricilere uygulamalarına sağlam metin tanıma entegrasyonu yapmalarını sağlar.
Kütüphane, özel dil paketleri aracılığıyla 125 uluslararası dili destekler, bu da onu küresel fatura işleme için ideal kılar. Gelişmiş özellikler arasında, otomatik olarak metin bulan bilgisayarlı görü bulunmaktadır, özellikle farklı düzenlere sahip faturalar için kullanışlıdır. Ayrıca, IronOCR yüksek hacimli fatura işlemlerini verimli bir şekilde işlemek için çoklu iş parçacığı işleme yetenekleri sağlar.
Fatura İşleme İçin Neden IronOCR Kullanmalıyım?
IronOCR, fatura işleme uygulamaları için cezbedici avantajlar sunar. İlk olarak, .NET uygulamaları için özel olarak geliştirilmiş optimize edilmiş Tesseract 5 motoru ile olağanüstü doğruluk sağlar. Kütüphane, taranmış belgelerden PDF dosyalarına, hatta düşük kaliteli taramalara kadar çeşitli fatura formatlarını ele alır.
Yerleşik görüntü optimizasyon filtreleri işlemden önce görüntü kalitesini otomatik olarak artırır, daha doğru metin çıkışı sağlar. Özel gereksinimlere sahip faturalar için, IronOCR özel dil eğitimi destekler, fatura türlerinizde yaygın olarak bulunan benzersiz fontlar veya formatlar için optimizasyon sağlar.
IronOCR'u Diğer OCR Kütüphanelerinden Farklı Kılan Nedir?
IronOCR, tek satırlık OCR yeteneği sunarken, kurumsal düzeydeki özellikleri korumak suretiyle fark yaratır. Ham Tesseract uygulamalarının aksine, IronOCR karmaşık işlemleri sorunsuz bir şekilde yöneten bir yönetimli .NET API sağlar. Kütüphane, çeşitli belge türleri için özel belge okuma yöntemleri sunar, fatura satır kalemleri için önemli olan belgelerde tablo okuma desteği içerir.
Filtre Sihirbazı, belirli fatura görüntüleriniz için en iyi ön işleme ayarlarını otomatik olarak belirler, optimizasyon konusunda tahmin yapmayı ortadan kaldırır. IronOCR aynı zamanda kapsamlı hata ayıklama yetenekleri sunar, geliştiricilere OCR motorunun ne gördüğünü görselleştirme ve çıkarım sorunlarını etkili bir şekilde giderme olanağı sunar.
Hangi Ön Koşullar Gereklidir?
IronOCR ile çalışmadan önce, şu ön gereksinimlerin mevcut olduğundan emin olun:
- Visual Studio gibi bir IDE'nin yüklü olduğu uygun bir geliştirme ortamı
- Kod örneklerini etkili bir şekilde anlamak ve değiştirmek için temel C# programlama bilgisi
- NuGet Paket Yöneticisi veya komut satırı aracılığıyla projenizde IronOCR kütüphanesi yüklü
Bu ön gereksinimlerin karşılanması, IronOCR ile başarılı bir şekilde çalışmaya başlamanızı sağlar.
IronOCR, Windows, Linux ve macOS için kapsamlı kurulum kılavuzları sağlar. Kütüphane, AWS Lambda ve Azure Functions için özel öğreticilerle bulut dağıtımını destekler.
Hangi Visual Studio Sürümünü Kullanmalıyım?
IronOCR, 2017'den en son sürümlere kadar Visual Studio 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ştirme için C# uzantısı ile birlikte Visual Studio Code iyi çalışır. Mobil geliştiriciler, .NET MAUI uygulamaları için uygun olan Android ve iOS uygulamaları için IronOCR'un rehberliğinden yararlanabilir.
Hangi C# Bilgi Seviyesi Gereklidir?
Temel düzeyde fatura OCR uygulaması için orta seviye C# bilgisi yeterlidir. Aşağıdaki konularda rahat olmalısınız:
- Nesne yönelimli programlama kavramları
- akışlar ve dosya I/O ile çalışma
- Temel async/await modelleri
- Desen eşleştirme için düzenli ifadeler
- Sağlam hata yönetimi için istisna işleme
IronOCR'un sezgisel API tasarımı, görüntü işleme veya makine öğreniminde derin uzmanlık gerektirmez. Kütüphane, karmaşık işlemleri dahili olarak ele alır ve sizin iş mantığına odaklanmanızı sağlar. Yeni başlayanlar, basit OCR örnekleri ile başlayabilir.
Yeni Bir Visual Studio Projesi Nasıl Oluşturulur?
IronOCR ile başlamadan önce, yeni bir Visual Studio projesi oluşturun.
Visual Studio'yu açın, Dosyalar'a gidin, Yeni'nin üzerine gelin ve Proje'ye tıklayın.
Yeni Proje
Yeni pencerede, Konsol Uygulaması'nı seçin ve İleri'ye tıklayın.
Konsol Uygulaması
Yeni bir pencere açılır. Proje adınızı ve konumunuzu girin, ardından İleri'ye tıklayın.
Proje Yapılandırması
Son olarak, Hedef çerçeveyi seçin ve Oluştur'u tıklayın.
Hedef Çerçeve
Yeni Visual Studio projeniz hazır. IronOCR'u yükleyelim.
Hangi Proje Türü OCR Uygulamaları İçin En İyisidir?
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ı hizmetler 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
Yüksek hacimli işlem için, IronOCR'un Windows Hizmeti veya mikro hizmetler mimarisi içerisinde uygulanmasını düşünün. Kütüphanenin ilerleme izleme yetenekleri, uzun süreli işlemleri izlemeyi kolaylaştırır.
Hangi .NET Framework Sürümünü Hedeflemeliyim?
IronOCR, .NET sürümleri arasında geniş uyumluluk sunar. Yeni projeler için, en iyi performans ve en son özellikler için .NET 6.0 veya daha yüksek bir sürümü hedefleyin. Kütüphane mükemmel geriye dönük uyumluluk sağlar:
- .NET Framework 4.6.2+: Eski kurumsal uygulamalar için
- .NET Core 3.1: Kararlı dağıtımlar için uzun vadeli destek
- .NET 5.0+: Performans iyileştirmeleri ile modern framework
- .NET Standard 2.0: Platformlar arası maksimum uyumluluk
Docker konteynerlerine dağıtırken, .NET 6.0 veya daha sonraki sürümler daha küçük görüntü boyutları ve daha iyi performans sağlar. Azure Functions için, hem .NET 6.0 hem de .NET Framework desteklenmektedir.
IronOCR'u Nasıl Kurarım?
İronOCR indirmek ve kurmak için iki basit yöntem vardır:
- Visual Studio NuGet Paket Yöneticisi'ni Kullanarak
- Visual Studio Komut Satırını Kullanarak
NuGet Paket Yöneticisi mi yoksa Komut Satırı mı Ne Zaman Kullanmalıyım?
İş akışınıza göre NuGet Paket Yöneticisi GUI ile komut satırı arasında seçim yapın:
NuGet Paket Yöneticisi GUI en iyi şu durumlarda çalışır:
- NuGet paketlerine yeni başlamışsanız
- IronOCR dil paketlerini göz atmak istiyorsanız
- Görsel onayları tercih ediyorsanız
- Birden fazla paketi yönetiyorsanız
Komut Satırı (Paket Yöneticisi Konsolu) mükemmel çalışır:
- Komut arayüzleriyle rahat hissediyorsanız
- Betiklenmiş dağıtımları takip ediyorsanız
- Belirli sürümlere hızla ihtiyaçınız varsa
- ileri kurulum seçenekleri kullanıyorsanız
Her iki yöntem de aynı sonuçları verir—rahatınıza ve gereksinimlerinize göre seçim yapın.
Hangi Ekstra Dil Paketlerine İhtiyacım Olabilir?
IronOCR, özel paketler aracılığıyla 125 uluslararası dili destekler. Fatura işleme için düşünün:
- İşletmeye özgü paketler: Finans belgeleri için Finansal Dil Paketi
- Bölgesel diller: Fatura kaynaklarına göre (İspanyolca, Fransızca, Almanca)
- Çok dilli destek: birden çok dil içeren faturalar için
- Özelleştirilmiş diller: Özelleştirilmiş yazı tipleri veya özel eğitim verileri için
Dil paketleri, ana IronOCR paketiyle birlikte kurulur ve İngilizce olmayan metinler için doğruluğu önemli ölçüde artırır.
Visual Studio NuGet Paket Yöneticisini Kullanma
C# projenize IronOCR eklemek için Visual Studio NuGet Paket Yöneticisini kullanın.
Araçlar > NuGet Paket Yöneticisi > Çözüm için NuGet Paketlerini Yönet bölümüne gidin
NuGet Paket Yöneticisi
Projenizde IronOCR'u arayıp kurun.
NuGet Paket Yöneticisi UI'de IronOCR paketini seçin
Aynı yöntemi kullanarak ek dil paketlerini kurun.
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 Konsolunda bu komutu girin:
Install-Package IronOcr
Paket Yöneticisi Konsolu
Paket, mevcut projenize indirilecek ve kurulacaktır, kullanıma hazır durumda.
Faturalardan Veriyi IronOCR Kullanarak Nasıl Çıkarırım?
Just a few lines of code ile IronOCR kullanarak fatura verilerini kolayca çıkarın. Bu, manuel veri girişi işlemini değiştirir ve iş akışınızı düzene sokar.
İşte metin çıkarımı için bir örnek fatura:
Örnek fatura
Bu faturadan tüm verileri çı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:
```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
Faturalardan Belirli Verileri Çıkarmak için Fatura İşleme
Bu kod ile müşteri fatura numarası gibi belirli fatura verilerini çıkarın:
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
Fatura Tarama
Karmaşık çıkarım senaryoları için, faturalarınıza göre optimize edilmiş özel OCR yapılandırmalarını kullanın. OcrResult sınıfı, her tanınan öğeyle ilgili detaylı bilgiler sağlar, doğrulama için koordinatlar ve güven puanları dahil.
Fatura OCR API'sinin Temel Faydaları Nelerdir?
IronOCR'ın Fatura OCR API'si, makine öğrenimi ve bilgisayarla görme yoluyla fatura işleme işlemini dönüştürür. Bu teknoloji, fatura metnini makine tarafından okunabilir formatlara çevirir ve böylece analiz, entegrasyon ve süreç iyileştirme için veri çıkarımını kolaylaştırır. Fatura işleme için sağlam bir otomasyon sağlar, doğruluğu artırır ve hesaplar gibi iş akışlarını optimize eder.
IronOCR, ek yapılandırma olmadan optimize edilmiş Tesseract sonuçları kullanarak olağanüstü doğruluk sunar. Çok sayfalı kareli TIFF, PDF dosyaları ve tüm popüler görüntü formatlarını destekler. Resimlerden barkod okuma yeni bir çıkartım boyutu ekler.
Fatura işleme için temel faydalar:
- Zaman Tasarrufu: Saatleri saniyelere indirin
- Doğruluk: Güven puanlaması ile hataları en aza indirin
- Ölçeklenebilirlik: çok iş parçacığı ile binlerce işlemi gerçekleştirin
- Entegrasyon: Aranabilir PDF'lere veya yapılandırılmış formatlara dışa aktarın
- Maliyet Azaltma: İşletme maliyetlerini düşük tutun
Kutuphanenin dağıtım esnekliği, mevcut sistemlere entegrasyon sağlanmasına olanak tanır—yerinde, bulutta veya hibrit. Docker, Azure ve AWS için destekle birlikte IronOCR, ihtiyaçlarınızla birlikte ölçeklenir.
Üretim ortamları, IronOCR'ın lisanslama seçeneklerinden düzenli güncellemelerle ve özelleştirilmiş destekle yararlanabilir. Kutuphanenin sorun giderme kılavuzları ve mühendislik destekleri, sorunsuz bir uygulama sağlar.
IronOCR hakkında daha fazla bilgi için ana sayfayı ziyaret edin. Ek fatura OCR eğitimleri için, bu detaylı fatura OCR kılavuzuna bakın. Fatura alanları için bilgisayarla görme kullanmak hakkında daha fazla bilgi edinmek için, bu bilgisayarla görme eğitimine göz atın.
Sıkça Sorulan Sorular
Fatura veri işleme nasıl otomatikleştirilir?
IronOCR'u, makine öğrenme algoritmalarını kullanarak fatura veri işlemeyi otomatikleştirmek için kullanabilirsiniz. IronOCR, dijital ve taranmış faturalardan satıcı bilgileri, fatura numaraları ve fiyatlar gibi detayları çıkartarak manuel giriş hatalarını azaltır ve verimliliği artırır.
Fatura OCR API'si kurulumunda hangi adımlar yer alır?
IronOCR kullanarak bir Fatura OCR API'si kurmak için, öncelikle kütüphaneyi Visual Studio'nun NuGet Paket Yöneticisi üzerinden indirip kurun. Sonrasında yeni bir C# projesi oluşturun, IronOCR'u entegre edin ve metin çıkartmak için görüntü dosyalarını yüklemek ve okumak amacıyla yöntemlerini kullanın.
IronOCR belirli verileri, örneğin fatura numaralarını, çıkartabilir mi?
Evet, IronOCR belirli verileri, fatura numaraları gibi, çıkartabilir. Çıkartılan metindeki desenleri eşleştirmek için düzenli ifadeler kullanır, bu sayede faturalarınızdan belirli bilgileri çekebilirsiniz.
IronOCR'un fatura işleme için sağladığı bazı özellikler nelerdir?
IronOCR, görüntü ön işleme, barkod tanıma ve dosya ayrıştırma gibi özellikler içerir. Bunlar, çeşitli fatura formatlarından metni doğru bir şekilde çıkartıp işlem yapma yeteneğini artırarak veri yakalama ve iş akışı verimliliğini geliştirir.
Görüntü ön işleme, OCR sonuçlarını nasıl iyileştirebilir?
IronOCR'a görüntü ön işleme, metin çıkartılmadan önce görüntü kalitesini optimize ederek OCR sonuçlarını iyileştirmeye yardımcı olur. Bu, kontrast ayarı ve gürültü azaltma gibi işlemleri içerir, bu da faturalardan daha doğru veri çıkarılmasına yol açabilir.
IronOCR'u hem dijital hem de taranmış faturalar için kullanmak mümkün mü?
Evet, IronOCR hem dijital hem de taranmış faturaları işlemeye uygundur. Gelişmiş makine öğrenmesi ve bilgisayarlı görüş teknikleri kullanarak çeşitli formatlardan ve görüntü kalitelerinden doğru metin çıkartır.
IronOCR, birden fazla sayfa formatı ve dosya tipini nasıl işler?
IronOCR, birden fazla sayfa formatı ve popüler görüntü ve PDF dosya türlerini destekler. Karmaşık belgelerden metinleri verimli bir şekilde çıkartabilir, bu da onu çeşitli fatura işleme uygulamaları için çok yönlü kılar.
Geliştiriciler, IronOCR kullanımı için eğitimleri nerede bulabilirler?
Geliştiriciler, IronOCR web sitesinde eğitimler ve ek kaynaklar bulabilirler. Sitede, IronOCR'u farklı senaryolarda uygulamak için nasıl yapılır kılavuzları ve blog yazıları gibi çeşitli öğrenme materyalleri sunulmaktadır.



