Hangi Tesseract OCR Kütüphanesi Seçilmeli? En İyi Üç Seçeneğin Bir Geliştirici Kıyaslaması
Veryfi, _client.ProcessDocumentAsync(bytes) her aradığınızda banka hesap numaralarınızı, yönlendirme numaralarınızı, işlem tutarlarını ve satıcı ilişkilerinizi üçüncü taraf bir bulut sunucusuna gönderir. Bu, yapısal JSON geri gelmeden önce, kuruluşunuzdaki en hassas finansal verileri içeren harcama belgelerinizin altyapınızı zaten terk etmiş olması,Veryfideğerlendirmesinin tümünü tanımlayan mimari gerçekliktir. Birçok ekip için bu, değerlendirme sonunda noktasıdır.
Veryfi'yi Anlamak
Veryfi, özel olarak gider ve finansal belge türleri için inşa edilmiş bulut tabanlı bir belge zekası API'sidir. Ürünün ana teklif noktası yapılandırılmış çıktıdır: Ham OCR metni gerektiren yerine, çekirdekVeryfiAPI çağrısı, önceden çıkarılmış alanlar — satıcı adı, toplam tutar, satır öğeleri, vergi, ödeme kartı son dört ve faturalar için banka hesap numarası ve yönlendirme numaraları döndürür. Modeller, büyük hacimli finansal belgeler üzerinde önceden eğitilmiştir ve desteklenen belge kategorilerinde %99+ doğruluk iddia eder.
Mimari doğrudan buluttur. Her belge uygulamanızdan çıkar, HTTPS üzerindenVeryfisunucularına gider, onların AI/ML hattından geçer ve JSON olarak geri döner. Yerel dağıtım seçeneği yoktur, izole mod yoktur ve belgeyi harici iletim olmadan işleme seçeneği yoktur.
Ana mimari özellikler:
- Yalnızca bulutta işleme: Her belge, yerel işleme yolu olmadan
api.veryfi.comüzerine yüklenir - Dört kimlikli kimlik doğrulama:
VeryfiClient, dört sırrı yönetme, güvenli bir şekilde depolama ve değiştirme gerektirenclientId,clientSecret,usernameveapiKeygerektirir - Belge başına fiyatlandırma: Belge türü ve hacim katmanı başına güncel oranlar içinVeryfiile iletişim kurun
- Sadece asenkron API:
ProcessDocumentAsyncana yöntemdir; senkron bir yol yoktur - Uzman belge kapsamı: Fişler, faturalar, çekler, banka ekstreleri, W-2'ler ve kartvizitler; genel belgeler, tıbbi kayıtlar, sözleşmeler ve teknik çizimler dışında güvenilir kapsama sahip değildir
- Özel JSON şeması: Veryfi'nin yanıt formatı Veryfi'ye özgüdür; satıcıları değiştirmek, çıkarım mantığının yeniden yazılmasını gerektirir
- Aşırı istek sınırlandırması: Yüksek hacimli işleme, geri çekilme ve yeniden deneme mantığı gerektirir çünkü HTTP 429 yanıtlarını ele almak için
Veryfi Makbuz İşleme
Veryfi SDK, belge işleme için tek bir birincil yöntem ortaya koyar:
using Veryfi;
public class VeryfiReceiptService
{
private readonly VeryfiClient _client;
public VeryfiReceiptService(string clientId, string clientSecret,
string username, string apiKey)
{
// Four credentials required — four secrets to manage
_client = new VeryfiClient(clientId, clientSecret, username, apiKey);
}
public async Task<ReceiptData> ProcessReceiptAsync(string imagePath)
{
// Receipt image leaves your infrastructure here
var imageBytes = File.ReadAllBytes(imagePath);
var base64Image = Convert.ToBase64String(imageBytes);
var response = await _client.ProcessDocumentAsync(
fileData: base64Image,
fileName: Path.GetFileName(imagePath)
);
return new ReceiptData
{
VendorName = response.Vendor?.Name,
Total = response.Total,
Date = response.Date,
Tax = response.Tax,
PaymentType = response.Payment?.Type,
CardLastFour = response.Payment?.Last4,
LineItems = response.LineItems?.Select(li => new LineItem
{
Description = li.Description,
Quantity = li.Quantity,
UnitPrice = li.UnitPrice,
Total = li.Total
}).ToList()
};
}
}
using Veryfi;
public class VeryfiReceiptService
{
private readonly VeryfiClient _client;
public VeryfiReceiptService(string clientId, string clientSecret,
string username, string apiKey)
{
// Four credentials required — four secrets to manage
_client = new VeryfiClient(clientId, clientSecret, username, apiKey);
}
public async Task<ReceiptData> ProcessReceiptAsync(string imagePath)
{
// Receipt image leaves your infrastructure here
var imageBytes = File.ReadAllBytes(imagePath);
var base64Image = Convert.ToBase64String(imageBytes);
var response = await _client.ProcessDocumentAsync(
fileData: base64Image,
fileName: Path.GetFileName(imagePath)
);
return new ReceiptData
{
VendorName = response.Vendor?.Name,
Total = response.Total,
Date = response.Date,
Tax = response.Tax,
PaymentType = response.Payment?.Type,
CardLastFour = response.Payment?.Last4,
LineItems = response.LineItems?.Select(li => new LineItem
{
Description = li.Description,
Quantity = li.Quantity,
UnitPrice = li.UnitPrice,
Total = li.Total
}).ToList()
};
}
}
Imports Veryfi
Imports System.IO
Imports System.Threading.Tasks
Public Class VeryfiReceiptService
Private ReadOnly _client As VeryfiClient
Public Sub New(clientId As String, clientSecret As String, username As String, apiKey As String)
' Four credentials required — four secrets to manage
_client = New VeryfiClient(clientId, clientSecret, username, apiKey)
End Sub
Public Async Function ProcessReceiptAsync(imagePath As String) As Task(Of ReceiptData)
' Receipt image leaves your infrastructure here
Dim imageBytes = File.ReadAllBytes(imagePath)
Dim base64Image = Convert.ToBase64String(imageBytes)
Dim response = Await _client.ProcessDocumentAsync(
fileData:=base64Image,
fileName:=Path.GetFileName(imagePath)
)
Return New ReceiptData With {
.VendorName = response.Vendor?.Name,
.Total = response.Total,
.Date = response.Date,
.Tax = response.Tax,
.PaymentType = response.Payment?.Type,
.CardLastFour = response.Payment?.Last4,
.LineItems = response.LineItems?.Select(Function(li) New LineItem With {
.Description = li.Description,
.Quantity = li.Quantity,
.UnitPrice = li.UnitPrice,
.Total = li.Total
}).ToList()
}
End Function
End Class
Faturalar hassasiyet seviyesini arttırır. Aynı ProcessDocumentAsync deseni, genellikle banka hesap numaraları, yönlendirme numaraları, satıcı vergi kimlik numaraları ve ödeme şartlarını içeren belgeleri iletir:
public async Task<InvoiceData> ProcessInvoiceAsync(string pdfPath)
{
var pdfBytes = File.ReadAllBytes(pdfPath);
// Invoice uploaded toVeryfi— banking details included
var response = await _client.ProcessDocumentAsync(
fileData: pdfBytes,
fileName: Path.GetFileName(pdfPath),
categories: new[] { "invoices" }
);
return new InvoiceData
{
InvoiceNumber = response.InvoiceNumber,
VendorName = response.Vendor?.Name,
VendorTaxId = response.Vendor?.TaxId, // transmitted
Total = response.Total,
DueDate = response.DueDate,
PaymentTerms = response.PaymentTerms,
BankAccountNumber = response.BankAccount?.AccountNumber, // transmitted
BankRoutingNumber = response.BankAccount?.RoutingNumber // transmitted
};
}
public async Task<InvoiceData> ProcessInvoiceAsync(string pdfPath)
{
var pdfBytes = File.ReadAllBytes(pdfPath);
// Invoice uploaded toVeryfi— banking details included
var response = await _client.ProcessDocumentAsync(
fileData: pdfBytes,
fileName: Path.GetFileName(pdfPath),
categories: new[] { "invoices" }
);
return new InvoiceData
{
InvoiceNumber = response.InvoiceNumber,
VendorName = response.Vendor?.Name,
VendorTaxId = response.Vendor?.TaxId, // transmitted
Total = response.Total,
DueDate = response.DueDate,
PaymentTerms = response.PaymentTerms,
BankAccountNumber = response.BankAccount?.AccountNumber, // transmitted
BankRoutingNumber = response.BankAccount?.RoutingNumber // transmitted
};
}
Imports System.IO
Imports System.Threading.Tasks
Public Async Function ProcessInvoiceAsync(pdfPath As String) As Task(Of InvoiceData)
Dim pdfBytes = File.ReadAllBytes(pdfPath)
' Invoice uploaded toVeryfi— banking details included
Dim response = Await _client.ProcessDocumentAsync(
fileData:=pdfBytes,
fileName:=Path.GetFileName(pdfPath),
categories:=New String() {"invoices"}
)
Return New InvoiceData With {
.InvoiceNumber = response.InvoiceNumber,
.VendorName = response.Vendor?.Name,
.VendorTaxId = response.Vendor?.TaxId, ' transmitted
.Total = response.Total,
.DueDate = response.DueDate,
.PaymentTerms = response.PaymentTerms,
.BankAccountNumber = response.BankAccount?.AccountNumber, ' transmitted
.BankRoutingNumber = response.BankAccount?.RoutingNumber ' transmitted
}
End Function
Banka hesap özeti uç noktası en hassas olanıdır. ProcessDocumentAsync çağırmak, categories: new[] { "bank_statements" } ile birlikte, tam hesap numaralarını, yönlendirme numaralarını, eksiksiz işlem geçmişini, açılış ve kapanış bakiyelerini ve havale transfer detaylarını Veryfi'nin altyapısına aktarır.
IronOCR'u Anlamak
IronOCR, .NET için ticari yerel bir OCR kütüphanesidir ve her belgeyi yerel olarak işler. Hiçbir belge baytı altyapınızı terk etmez. Kütüphane, optimize edilmiş bir Tesseract 5 motorunu otomatik ön işleme, yerli PDF desteği ve 125+ dil paketleri ile sarar — hepsi süresiz lisanslı tek bir NuGet paketi olarak teslim edilir.
Anahtar özellikler:
- Donanımınız üzerinde yerel olarak tasarlandı: Tüm işleme, sizin donanımınızda gerçekleşir; OCR için hiçbir ağ çağrısı yok
- Otomatik ön işleme: Dengeleme, Gürültü Azaltma, Kontrast, İkiliştirme ve Çözünürlüğü Büyükleştirici, açık konfigürasyon gerektirmeden otomatik uygulanır
- Doğrudan PDF girdisi: Tarama ve dijital PDF'leri
LoadPdf()üzerinden doğrudan okuyun — ayrı bir PDF kütüphanesi gerekmez - Sürekli lisanslama: $999 Lite / $1,499 Plus / $2,999 Professional / $5,999 Unlimited—bir kez ödeyin, sınırsız belge işleyin
- Yapılandırılmış sonuç erişimi: X/Y koordinatları ve kelime başına güven puanlarıyla kelimeler, satırlar, paragraflar ve sayfalar
- İş parçacığı güvenli ve paralelleştirilebilir:
IronTesseractörnekleri, ek senkronizasyon gerektirmeden iş parçacıkları arasında kullanılabilir - 125+ dil: NuGet paketleri olarak kurulur, tessdata klasör yönetimi gerekmez
- Çapraz platform: Windows, Linux, macOS, Docker, AWS, Azure — tek bir paket bütün hedefleri kapsar
Özellik Karşılaştırması
| Özellik | Veryfi | IronOCR |
|---|---|---|
| Veri konumu | Veryfibulut sunucuları | Altyapınız |
| Dağıtım modeli | Yalnızca bulut API | Yerinde |
| Fiyatlandırma modeli | Belge başına (fiyatlandırma içinVeryfiile iletişim kurun) | Sürekli lisans ($5,999) |
| Çevrimdışı destek | Hayır | Evet |
| Belge kapsamı | Sadece gider belgeleri | Herhangi bir belge türü |
| Kurulum | 4 API kimliği bilgisi | 1 lisans anahtarı |
Ayrıntılı Özellik Karşılaştırması
| Özellik | Veryfi | IronOCR |
|---|---|---|
| Veri Gizliliği | ||
| Belgeler altyapıyı terk eder | Evet (her çağrı) | Asla |
| İzole dağıtım | Mümkün değil | Tam destekli |
| Yerinde işleme | Mümkün değil | Varsayılan davranış |
| HIPAA uyumlu (BAA gerekli değil) | Hayır (BAA gerekli) | Evet |
| ITAR/CMMC uyumlu | Karmaşık | Evet |
| Belge Desteği | ||
| Fiş işleme | Evet (özelleşmiş) | Evet (OCR + çıkarım ile) |
| Fatura işleme | Evet (özelleşmiş) | Evet (OCR + çıkarım ile) |
| Banka hesap özeti işleme | Evet (özelleşmiş) | Evet (OCR + çıkarım ile) |
| Genel iş belgeleri | Kötü sonuçlar | Evet |
| Tıbbi kayıtlar | Desteklenmiyor | Evet |
| Yasal sözleşmeler | Sınırlı | Evet |
| Özel/keyfi belge türleri | Ücretli eğitim gerekli | Her tür |
| Çok sayfalı PDF'ler | Evet | Evet |
| Teknik | ||
| İnternet gerektirir | Evet (her belge) | Hayır |
| Eşzamanlı API mevcut | Hayır | Evet |
| Görüntü ön işleme | Otomatik (bulut) | Otomatik (yerel) |
| PDF girişi (yerel) | Evet | Evet |
| Aranabilir PDF çıktısı | Hayır | Evet |
| Barkod okuma | Hayır | Evet |
| Bölge bazlı OCR | Hayır | Evet |
| Güven skoru | Alan başına | Kelime başına ve genel |
| Geliştirme | ||
| Yönetilecek kimlik bilgileri | 4 (clientId, clientSecret, username, apiKey) | 1 (lisans anahtarı) |
| Birim testi karmaşıklığı | HTTP simulasyonu gerektirir | Doğrudan yerel test |
| Hata işleme | HTTP durum kodları + VeryfiApiException | Yerel .NET istisnaları |
| Dil desteği | Sınırlı | 125+ dil |
| Maliyet | ||
| Maliyet tavanı | Sözleşmesiz tavan olmadan | Lisans fiyatı |
| Yüksek hacimde maliyet | Doğrusal ölçekte artar | Sabit |
Finansal Belgeler için Veri Gizliliği
Veryfi tarafından işlenen finansal belgeler, herhangi bir organizasyondaki en hassas veri kategorilerini içerir. Bu teorik bir endişe değil, ürünü çalıştıran yapısal bir gerçektir.
Veryfi Yaklaşımı
HerVeryfiAPI çağrısı, belge byte'larını api.veryfi.com üzerinde HTTPS üzerinden iletir. Bu belgelerden çıkarılan veriler—hesap numaraları, yönlendirme numaraları, işlem geçmişleri, satıcı vergi kimlikleri, ödeme kart bilgileri ve harcama kalıpları—Veryfi'nin altyapısı tarafından işlenir. Veri ikameti, muhafaza politikaları, alt işlemci zincirleri ve ihlal yanıt prosedürleri sizin değil, Veryfi'nin şartları tarafından yönetilir.
//Banka hesap özeti işleme— critical sensitivity
public async Task<BankStatementData> ProcessBankStatementAsync(string pdfPath)
{
var pdfBytes = File.ReadAllBytes(pdfPath);
// AT THIS POINT: full financial history leaves your infrastructure
// Account numbers, transaction history, balances — all transmitted
var response = await _client.ProcessDocumentAsync(
fileData: pdfBytes,
categories: new[] { "bank_statements" }
);
return new BankStatementData
{
AccountNumber = response.AccountNumber, // critical — transmitted
RoutingNumber = response.RoutingNumber, // critical — transmitted
OpeningBalance = response.OpeningBalance,
ClosingBalance = response.ClosingBalance,
Transactions = response.Transactions?.Select(t => new Transaction
{
Date = t.Date,
Description = t.Description,
Amount = t.Amount,
Balance = t.RunningBalance
}).ToList()
};
}
//Banka hesap özeti işleme— critical sensitivity
public async Task<BankStatementData> ProcessBankStatementAsync(string pdfPath)
{
var pdfBytes = File.ReadAllBytes(pdfPath);
// AT THIS POINT: full financial history leaves your infrastructure
// Account numbers, transaction history, balances — all transmitted
var response = await _client.ProcessDocumentAsync(
fileData: pdfBytes,
categories: new[] { "bank_statements" }
);
return new BankStatementData
{
AccountNumber = response.AccountNumber, // critical — transmitted
RoutingNumber = response.RoutingNumber, // critical — transmitted
OpeningBalance = response.OpeningBalance,
ClosingBalance = response.ClosingBalance,
Transactions = response.Transactions?.Select(t => new Transaction
{
Date = t.Date,
Description = t.Description,
Amount = t.Amount,
Balance = t.RunningBalance
}).ToList()
};
}
' Banka hesap özeti işleme— critical sensitivity
Public Async Function ProcessBankStatementAsync(pdfPath As String) As Task(Of BankStatementData)
Dim pdfBytes = File.ReadAllBytes(pdfPath)
' AT THIS POINT: full financial history leaves your infrastructure
' Account numbers, transaction history, balances — all transmitted
Dim response = Await _client.ProcessDocumentAsync(
fileData:=pdfBytes,
categories:=New String() {"bank_statements"}
)
Return New BankStatementData With {
.AccountNumber = response.AccountNumber, ' critical — transmitted
.RoutingNumber = response.RoutingNumber, ' critical — transmitted
.OpeningBalance = response.OpeningBalance,
.ClosingBalance = response.ClosingBalance,
.Transactions = If(response.Transactions, Enumerable.Empty(Of Transaction)()).Select(Function(t) New Transaction With {
.Date = t.Date,
.Description = t.Description,
.Amount = t.Amount,
.Balance = t.RunningBalance
}).ToList()
}
End Function
Veryfi, SOC 2 Tip II, GDPR ve HIPAA (İş Ortağı Anlaşması ile) sertifikalarına sahiptir. Bu sertifikalar, Veryfi'nin belirttiği güvenlik uygulamalarını takip ettiğini onaylar. Bu, verilerinizin kontrol altında kalacağı, veri ikametgahını yöneteceğiniz veya Veryfi'nin alt işlemcilerinin erişim hakkı olmadığı anlamına gelmez. CMMC Seviyesi 2+, ITAR, SOX veya GLBA kapsamındaki organizasyonlar için, Veryfi'yi veri işlemcisi olarak eklemek, yasal inceleme ve sürekli denetim gerektiren bir uyum kapsamında bir genişleme getirir.
IronOCR Yaklaşımı
IronOCR, belgeleri sıfır ağ aktarımı ile işler. OCR motoru donanımınızda çalışır. Banka ekstreleri, yönlendirme numaraları olan faturalar ve hesap numaralarına sahip çekler sunucunuzu terk etmez:
using IronOcr;
using System.Text.RegularExpressions;
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
public class LocalFinancialDocumentProcessor
{
private readonly IronTesseract _ocr = new IronTesseract();
public BankStatementResult ProcessBankStatement(string pdfPath)
{
// All processing on your infrastructure
//Hayırnetwork calls — no external access
using var input = new OcrInput();
input.LoadPdf(pdfPath);
var result = _ocr.Read(input);
var text = result.Text;
// Account numbers stay on your server
return new BankStatementResult
{
AccountNumber = ExtractAccountNumber(text),
Balance = ExtractBalance(text),
RawText = text,
Confidence = result.Confidence
};
}
private string ExtractAccountNumber(string text)
{
var match = Regex.Match(text,
@"Account\s*#?\s*:?\s*(\d{4,})",
RegexOptions.IgnoreCase);
return match.Success ? match.Groups[1].Value : null;
}
private decimal? ExtractBalance(string text)
{
var match = Regex.Match(text,
@"Balance:?\s*\$?([\d,]+\.?\d*)",
RegexOptions.IgnoreCase);
if (match.Success && decimal.TryParse(
match.Groups[1].Value.Replace(",", ""), out var bal))
return bal;
return null;
}
}
using IronOcr;
using System.Text.RegularExpressions;
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
public class LocalFinancialDocumentProcessor
{
private readonly IronTesseract _ocr = new IronTesseract();
public BankStatementResult ProcessBankStatement(string pdfPath)
{
// All processing on your infrastructure
//Hayırnetwork calls — no external access
using var input = new OcrInput();
input.LoadPdf(pdfPath);
var result = _ocr.Read(input);
var text = result.Text;
// Account numbers stay on your server
return new BankStatementResult
{
AccountNumber = ExtractAccountNumber(text),
Balance = ExtractBalance(text),
RawText = text,
Confidence = result.Confidence
};
}
private string ExtractAccountNumber(string text)
{
var match = Regex.Match(text,
@"Account\s*#?\s*:?\s*(\d{4,})",
RegexOptions.IgnoreCase);
return match.Success ? match.Groups[1].Value : null;
}
private decimal? ExtractBalance(string text)
{
var match = Regex.Match(text,
@"Balance:?\s*\$?([\d,]+\.?\d*)",
RegexOptions.IgnoreCase);
if (match.Success && decimal.TryParse(
match.Groups[1].Value.Replace(",", ""), out var bal))
return bal;
return null;
}
}
Imports IronOcr
Imports System.Text.RegularExpressions
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Public Class LocalFinancialDocumentProcessor
Private ReadOnly _ocr As New IronTesseract()
Public Function ProcessBankStatement(pdfPath As String) As BankStatementResult
' All processing on your infrastructure
' No network calls — no external access
Using input As New OcrInput()
input.LoadPdf(pdfPath)
Dim result = _ocr.Read(input)
Dim text = result.Text
' Account numbers stay on your server
Return New BankStatementResult With {
.AccountNumber = ExtractAccountNumber(text),
.Balance = ExtractBalance(text),
.RawText = text,
.Confidence = result.Confidence
}
End Using
End Function
Private Function ExtractAccountNumber(text As String) As String
Dim match = Regex.Match(text,
"Account\s*#?\s*:?\s*(\d{4,})",
RegexOptions.IgnoreCase)
Return If(match.Success, match.Groups(1).Value, Nothing)
End Function
Private Function ExtractBalance(text As String) As Decimal?
Dim match = Regex.Match(text,
"Balance:?\s*\$?([\d,]+\.?\d*)",
RegexOptions.IgnoreCase)
If match.Success AndAlso Decimal.TryParse(
match.Groups(1).Value.Replace(",", ""), bal) Then
Return bal
End If
Return Nothing
End Function
End Class
Uygunluk ağırlıklı ortamlarda, yerel işleme tamamen üçüncü parti denetim kapsamını ortadan kaldırır.IronOCR ile BAA gerekmez. Alt işlemci açıklamaları yok. Veri ikameti soruları yok. Windows, Linux, Docker ve izole ortamlarda dağıtım yapılandırması için IronTesseract kurulum kılavuzuna bakın.
Uzman Kapsam vs. Genelci OCR
Veryfi'nin dar belge odaklı yapısı, hem en büyük gücü hem de en önemli sınırlamasıdır. Önceden eğitilmiş modeller, yapıldıkları spesifik belge türleri için gerçekten hızlı, yapılandırılmış sonuçlar verir. Sorun, organizasyonunuzun bu liste dışındakilere OCR ihtiyaç duyduğunda ortaya çıkar.
Veryfi Yaklaşımı
Veryfi, kendi şeridinde iyi çalışır. Bir makbuz görüntüsü gönderin ve yanıt, satıcı, toplam, vergi, ödeme yöntemi ve satır öğelerini içerir—sonuçları almak için regex gerektirmez. Ancak kapsam, gider ve finansal belgelerin sınırında sona erer. README belgeleri bunu doğrudan dokumente eder: eğitim alınan setin dışındaki genel iş belgeleri, tıbbi kayıtlar, teknik çizimler, çok dilli belgeler ve özel form türleri kötü sonuçlar üretir veya ücretli özel model eğitimi gerektirir.
Gerçek organizasyonlar nadiren sadece bir belge kategorisini işler. İK departmanları, çalışanlar için işe alım formlarını işler. Hukuk ekipleri, sözleşme metnine ihtiyaç duyar. Operasyon ekipleri, sevkiyat belgelerini ve lojistik formlarını halleder. Veryfi'nin kapsamı dışındaki her kategori, yığınına ikinci bir çözüm eklemek zorunda bırakır:
// Veryfi: works for invoices, fails for shipping manifests
var invoiceResponse = await _client.ProcessDocumentAsync(
fileData: invoiceBytes,
categories: new[] { "invoices" }
);
// For anything outside the supported list, you need a second tool
// Contracts: limited support
// Medical forms: not supported
// Shipping documents: not supported
// Custom forms: paid training required
// Veryfi: works for invoices, fails for shipping manifests
var invoiceResponse = await _client.ProcessDocumentAsync(
fileData: invoiceBytes,
categories: new[] { "invoices" }
);
// For anything outside the supported list, you need a second tool
// Contracts: limited support
// Medical forms: not supported
// Shipping documents: not supported
// Custom forms: paid training required
Imports System.Threading.Tasks
' Veryfi: works for invoices, fails for shipping manifests
Dim invoiceResponse = Await _client.ProcessDocumentAsync(
fileData:=invoiceBytes,
categories:=New String() {"invoices"}
)
' For anything outside the supported list, you need a second tool
' Contracts: limited support
' Medical forms: not supported
' Shipping documents: not supported
' Custom forms: paid training required
IronOCR Yaklaşımı
IronOCR, herhangi bir belge türünü işler. Çıkarma mantığını yazmak sizin işinizdir, bu da belgelerinizin içerdiği alanları tam olarak işler—tüm gider belgeleri arasında hangi alanların yaygın olduğunu tahmin eden önceden eğitilmiş bir model yerine. Aynı IronTesseract örneği, makbuzları, sözleşmeleri, tıbbi formları, nakliye belgelerini ve özel iç formları işler.
using IronOcr;
var ocr = new IronTesseract();
// Receipts
var receiptResult = ocr.Read("receipt.jpg");
var receiptTotal = ExtractTotal(receiptResult.Text);
// Contracts — not in Veryfi's scope
using var contractInput = new OcrInput();
contractInput.LoadPdf("contract.pdf");
var contractResult = ocr.Read(contractInput);
var parties = ExtractContractParties(contractResult.Text);
// Medical forms — requires HIPAA BAA with Veryfi; stays local with IronOCR
var medicalResult = ocr.Read("patient-intake-form.jpg");
var patientName = medicalResult.Lines.FirstOrDefault()?.Text;
// Shipping documents
var shipResult = ocr.Read("bill-of-lading.jpg");
var trackingNum = ExtractPattern(shipResult.Text, @"Tracking\s*#?\s*:?\s*(\w+)");
using IronOcr;
var ocr = new IronTesseract();
// Receipts
var receiptResult = ocr.Read("receipt.jpg");
var receiptTotal = ExtractTotal(receiptResult.Text);
// Contracts — not in Veryfi's scope
using var contractInput = new OcrInput();
contractInput.LoadPdf("contract.pdf");
var contractResult = ocr.Read(contractInput);
var parties = ExtractContractParties(contractResult.Text);
// Medical forms — requires HIPAA BAA with Veryfi; stays local with IronOCR
var medicalResult = ocr.Read("patient-intake-form.jpg");
var patientName = medicalResult.Lines.FirstOrDefault()?.Text;
// Shipping documents
var shipResult = ocr.Read("bill-of-lading.jpg");
var trackingNum = ExtractPattern(shipResult.Text, @"Tracking\s*#?\s*:?\s*(\w+)");
Imports IronOcr
Dim ocr As New IronTesseract()
' Receipts
Dim receiptResult = ocr.Read("receipt.jpg")
Dim receiptTotal = ExtractTotal(receiptResult.Text)
' Contracts — not in Veryfi's scope
Using contractInput As New OcrInput()
contractInput.LoadPdf("contract.pdf")
Dim contractResult = ocr.Read(contractInput)
Dim parties = ExtractContractParties(contractResult.Text)
End Using
' Medical forms — requires HIPAA BAA with Veryfi; stays local with IronOCR
Dim medicalResult = ocr.Read("patient-intake-form.jpg")
Dim patientName = medicalResult.Lines.FirstOrDefault()?.Text
' Shipping documents
Dim shipResult = ocr.Read("bill-of-lading.jpg")
Dim trackingNum = ExtractPattern(shipResult.Text, "Tracking\s*#?\s*:?\s*(\w+)")
Tutarlı kalıpları izleyen fatura ve makbuz alanları için, IronOCR'un yapılandırılmış veri çıkarımı, çıkarım mantığını kesinleştiren kelime seviyesinde konumlandırma sağlar. Y konumuna göre sıralanan result.Lines koleksiyonu, makbuz başlıklarından güvenilir bir şekilde satıcı adlarını ortaya çıkarır. Görüntü kalitesi düzeltme filtreleri, gerçek gider iş akışlarının ürettiği buruşmuş, solmuş veya fotoğraflanmış makbuzları işler.
Belge Başına Bulut Maliyeti vs. Süresiz Lisans
Veryfi ve IronOCR arasındaki maliyet farkı, işlenen her belgeyle artar. Veryfi'nin belge başına modeli, maliyetlerin hacimle tam orantılı olarak büyüyeceği anlamına gelir, sözleşmesiz bir tavan olmadıkça.
Veryfi Yaklaşımı
Veryfi, belge başına ücret alır. Fiyat, belge türü ve hacim katmanına göre değişir — güncel fiyatlandırma içinVeryfiile iletişime geçin. Maliyetler, hacimle doğru orantılı olarak artar ve sözleşmeli bir üst sınır müzakere etmediğiniz sürece tavan yapmaz; ve ne kadar zamandır müşteri olduğunuza bakılmaksızın, sonraki yıllarda indirim yapmaz.
// This method call costs money — every time
// Costs accumulate with every document processed
var response = await _client.ProcessDocumentAsync(bytes);
// This method call costs money — every time
// Costs accumulate with every document processed
var response = await _client.ProcessDocumentAsync(bytes);
' This method call costs money — every time
' Costs accumulate with every document processed
Dim response = Await _client.ProcessDocumentAsync(bytes)
Gizli maliyetler toplamı daha da artırır: HTTP 429 limitinde hız sınırlaması yeniden deneme mantığını zorlar; API sürüm değişiklikleri SDK güncellemelerini gerektirir; veri işleme sözleşmesinin güvenlik incelemesi yasal süre ekler; ve mevsimsel hacim plan tahminlerini aştığında ek ücretler ortaya çıkar.
IronOCR Yaklaşımı
IronOCR lisansı bir defalık satın alımdır. $2,999 üzerindeki Professional lisansı, 10 geliştiriciyi kapsar, aylık olarak işlenecek sınırsız belge sağlar ve işleme devam etmek için yenileme gerektirmez. 2. yıl için işleme maliyeti 0 $'dır. 5. yıl için işleme maliyeti 0 $'dır.
// Configure once at startup — no per-call cost
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
// This processes 50,000 documents/month at $0 marginal cost
foreach (var documentPath in documentBatch)
{
var result = ocr.Read(documentPath);
ProcessExtractedData(result.Text, result.Lines);
}
// Configure once at startup — no per-call cost
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
// This processes 50,000 documents/month at $0 marginal cost
foreach (var documentPath in documentBatch)
{
var result = ocr.Read(documentPath);
ProcessExtractedData(result.Text, result.Lines);
}
Imports IronOcr
' Configure once at startup — no per-call cost
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim ocr As New IronTesseract()
' This processes 50,000 documents/month at $0 marginal cost
For Each documentPath In documentBatch
Dim result = ocr.Read(documentPath)
ProcessExtractedData(result.Text, result.Lines)
Next
Yüksek belge hacimlerinde 3 yıllık karşılaştırma:IronOCR toplamda $2,999 artı çıkarım kalıplarını oluşturmak için tahmini 8-16 saat geliştirme süresi gerektirir, oysaVeryfimaliyetleri her işlenmiş belge ile birikir. Eşitlik, tipik olarak hacme bağlı olarak kullanımın ilk birkaç ayında gerçekleşir.
Cloud OCR harcaması yapan ekipler için IronOCR lisanslama sayfası, yıllık faturalamayı tercih eden ekipler için katman detayları ve SaaS abonelik seçeneğini kapsar.
Webhook ve Eşzamansız İşleme vs. Eşzamanlı Yerel Sonuçlar
Veryfi'nin bulut mimarisi, yalnızca eşzamansız işleme modeli dikte eder. Belge uzak bir sunucuya gider, uzak bir boru hattı tarafından işlenir ve yanıt, bir ağ turundan sonra gelir. Yüksek hacimli toplu işleme için Veryfi, tarama yerine webhook tabanlı bildirim önerir. IronOCR, döngüde ağ bağımlılığı olmadan, varsayılan olarak eşzamanlı işler.
Veryfi Yaklaşımı
Veryfi'nin tüm işlemleri buluta dayandıkları için eşzamansızdır. ProcessDocumentAsync yöntemi, bir HTTP çağrısını başlatır, Veryfi'nin boru hattının tamamlanmasını bekler ve sonucu döndürür. Toplam gecikme, ağ iletimi, Veryfi'nin altyapısındaki kuyruk süresi, model çıkarsaması ve yanıt iletimini içerir.
//Veryfierror categories reflect cloud dependencies
public async Task<ReceiptData> ProcessWithHandlingAsync(string path)
{
try
{
var bytes = File.ReadAllBytes(path);
var response = await _client.ProcessDocumentAsync(bytes);
return MapToReceiptData(response);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 401)
{
// Credential failure — check all four credentials
throw new Exception("Authentication failed. Verify clientId, clientSecret, username, apiKey.", ex);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 402)
{
// Plan quota exceeded — processing halted until billing resolved
throw new Exception("Quota exceeded. Check plan limits and billing.", ex);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 429)
{
// Rate limited — requires exponential backoff implementation
throw new Exception("Rate limit exceeded. Implement retry with backoff.", ex);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 500)
{
//Veryfiinfrastructure failure — your processing is down
throw new Exception("Veryfi server error. Processing unavailable.", ex);
}
}
//Veryfierror categories reflect cloud dependencies
public async Task<ReceiptData> ProcessWithHandlingAsync(string path)
{
try
{
var bytes = File.ReadAllBytes(path);
var response = await _client.ProcessDocumentAsync(bytes);
return MapToReceiptData(response);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 401)
{
// Credential failure — check all four credentials
throw new Exception("Authentication failed. Verify clientId, clientSecret, username, apiKey.", ex);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 402)
{
// Plan quota exceeded — processing halted until billing resolved
throw new Exception("Quota exceeded. Check plan limits and billing.", ex);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 429)
{
// Rate limited — requires exponential backoff implementation
throw new Exception("Rate limit exceeded. Implement retry with backoff.", ex);
}
catch (VeryfiApiException ex) when (ex.StatusCode == 500)
{
//Veryfiinfrastructure failure — your processing is down
throw new Exception("Veryfi server error. Processing unavailable.", ex);
}
}
Imports System.IO
Imports System.Threading.Tasks
Public Async Function ProcessWithHandlingAsync(path As String) As Task(Of ReceiptData)
Try
Dim bytes = File.ReadAllBytes(path)
Dim response = Await _client.ProcessDocumentAsync(bytes)
Return MapToReceiptData(response)
Catch ex As VeryfiApiException When ex.StatusCode = 401
' Credential failure — check all four credentials
Throw New Exception("Authentication failed. Verify clientId, clientSecret, username, apiKey.", ex)
Catch ex As VeryfiApiException When ex.StatusCode = 402
' Plan quota exceeded — processing halted until billing resolved
Throw New Exception("Quota exceeded. Check plan limits and billing.", ex)
Catch ex As VeryfiApiException When ex.StatusCode = 429
' Rate limited — requires exponential backoff implementation
Throw New Exception("Rate limit exceeded. Implement retry with backoff.", ex)
Catch ex As VeryfiApiException When ex.StatusCode = 500
' Veryfi infrastructure failure — your processing is down
Throw New Exception("Veryfi server error. Processing unavailable.", ex)
End Try
End Function
Ağ kesintileri işlemi durdurur.Veryfialtyapı olayları işlemi durdurur. Hız limitleri işlemi durdurur. Bunların her biri, uygulamanızın kontrol edemeyeceği bir dış bağımlılıktır.
IronOCR Yaklaşımı
IronOCR, sıfır ağ bağımlılığı ile eşzamanlı işler. Sonuç, Read() döndüğünde, anında kullanılabilir, hiçbir yoklamaya, webhook yapılandırmasına ve ağ hataları için yeniden deneme mantığına gerek yoktur.
using IronOcr;
var ocr = new IronTesseract();
// Synchronous — result immediately available
//Hayırnetwork, no quota, no rate limits
var result = ocr.Read("receipt.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// Word-level positioning for precise field extraction
foreach (var line in result.Lines)
{
Console.WriteLine($"Y={line.Y}: {line.Text}");
}
using IronOcr;
var ocr = new IronTesseract();
// Synchronous — result immediately available
//Hayırnetwork, no quota, no rate limits
var result = ocr.Read("receipt.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// Word-level positioning for precise field extraction
foreach (var line in result.Lines)
{
Console.WriteLine($"Y={line.Y}: {line.Text}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
' Synchronous — result immediately available
' No network, no quota, no rate limits
Dim result = ocr.Read("receipt.jpg")
Console.WriteLine(result.Text)
Console.WriteLine($"Confidence: {result.Confidence}%")
' Word-level positioning for precise field extraction
For Each line In result.Lines
Console.WriteLine($"Y={line.Y}: {line.Text}")
Next
UI duyarlılığı için asenkron davranışa ihtiyaç duyan uygulamalar için,IronOCR ayrıca Task.Run sarmalama veya asenkron API yüzeyi aracılığıyla asenkron OCR desteği sunar. Fark, IronOCR'da asenkronizmanın, uzak bir çağrının dayattığı bir gereklilik değil, bir eşzamanlılık paterni olmasıdır. Gece saat 2'de bir ağ kesintisi, toplu işlemenizi durdurmaz.
Makbuz tarama iş akışları için makbuz tarama eğitimi ve fatura OCR rehberi tam çıkarım deseni uygulamalarını kapsar. Güven Skorları, çıkarılan verileri bir alt sistemine taşımadan önce düşük kaliteli taramaları işaretlemeye yardımcı olan kelime başına güvenilirlik sinyalleri sağlar.
API Eşleme Başvurusu
| Veryfi | IronOCR Karşılığı |
|---|---|
new VeryfiClient(clientId, clientSecret, username, apiKey) |
new IronTesseract() + IronOcr.License.LicenseKey = "key" |
_client.ProcessDocumentAsync(bytes) |
ocr.Read(filePath) veya ocr.Read(ocrInput) |
_client.ProcessDocumentAsync(bytes, categories: new[] { "invoices" }) |
input.LoadPdf(pdfPath); ocr.Read(input) |
response.Vendor?.Name |
result.Lines.FirstOrDefault()?.Text |
response.Total |
Regex aracılığıyla ExtractTotal(result.Text) |
response.Date |
Regex aracılığıyla ExtractDate(result.Text) |
response.LineItems |
Konumsal çıkarım ile result.Lines |
response.InvoiceNumber |
Regex.Match(result.Text, @"Invoice\s*#?\s*:?\s*(\w+)") |
response.ConfidenceScore |
result.Confidence |
response.Payment?.Last4 |
Regex.Match(result.Text, @"\d{4}$") |
response.BankAccount?.AccountNumber |
Regex.Match(result.Text, @"Account\s*#?\s*:?\s*(\d+)") |
VeryfiApiException (HTTP 401/402/429/500) |
Standart .NET istisnaları (yerel, ağ kodları yok) |
| Yükleme öncesi Base64 kodlaması | Gerekli değil — ocr.Read(filePath) dosya yollarını doğrudan kabul eder |
| Konfigürasyon içinde dört kimlik bilgisi | Tek lisans anahtarı |
Ekiplerin Veryfi'den IronOCR'a Geçmeyi Düşündüğü Durumlar
Veri Egemenliği Vazgeçilmez Hale Gelir
IronOCR'nin değerlendirilmesi için en yaygın tetikleyici, hassas finansal kayıtlar için Veryfi'yi veri işlemcisi olarak yüzeye çıkaran bir uygunluk denetimi veya yasal incelemedir. Bir HIPAA değerlendirmesi, PHI içeren gider belgelerininVeryfiile İş Ortağı Sözleşmesi gerektirdiğini ve sürekli denetim gözetimi gerektirdiğini ortaya koyar. Bir CMMC Seviye 2 değerlendirmesi, bulut aracılığıyla iletilen finansal belgeleri potansiyel bir boşluk olarak tanımlar. Bir hukuk ekibi, üçüncü tarafla müvekkil harcama verilerini göndermemeyi önerir. Her senaryoda, uyum yolundaki adımlar, dış veri iletimini ortadan kaldırmaktır—bu da Veryfi'yi yerel OCR ile değiştirmek anlamına gelir. IronOCR'nin yerel işleme modeli, varsayılan olarak bu gereksinimleri karşılar: BAA yok, alt işlemci zinciri yok, üçüncü parti denetim kapsamı yok.
Belge Türleri Giderlerin Ötesinde Genişler
Gider otomasyonu için Veryfi'yi benimseyen organizasyonlar, genellikle 6–12 ay içinde, yan ekiplerin Veryfi'nin eğitim seti dışındaki belgeler için OCR'a ihtiyaç duyduğunu keşfeder. İK, işe alım formlarının işlenmesine ihtiyaç duyar. Hukuk, sözleşme metinlerinin çıkarılmasına ihtiyaç duyar. Operasyonlar, konşimento verilerinin yakalanmasına ihtiyaç duyar. Her yeni belge kategorisi ya Veryfi'nin genel amaçlı uç noktasından yetersiz sonuçlar üretir, ücretli özel model eğitimi gerektirir ya da altyapıya ikinci bir OCR çözümü zorlar. Tek bir IronOCR lisansı, aynı API ile bunların hepsini halleder. belge-özel-oku eğitimi, yapılandırılmış form düzenleri için çıkarım stratejilerini kapsar.
Belge Başına Maliyetler, İş Durumu Eşiğini Aşar
Aylık 25.000 veya daha fazla belge işleyen ekipler, genellikle IronOCR'nin geri ödeme süresini üç ayın altında bulur. Yüksek belge hacimlerinde,Veryfieşdeğer harcamanızın ilk ayında genellikle IronOCR Professional lisansı $2,999 üzerinde ödenir. Belge başına bulut fiyatlandırması üzerinde toplam sahip olma maliyeti analizi yapan finans ekipleri, kaçınılmaz olarak bu karşılaştırmaya ulaşır. Taşınma çabası—ekibin ihtiyaç duyduğu spesifik alanlar için regex çıkarım desenlerini oluşturma—belge karmaşıklığına ve iş akışındaki farklı belge türlerinin sayısına göre tipik olarak 8–24 saattir.
Çevrimdışı ve Bağlantısız Ortamlar
Saha hizmeti organizasyonları, uzak iş sahaları, mobil gider yakalama uygulamaları ve izole hükümet ortamları ortak bir gereksinimi paylaşır: OCR internet olmadan çalışmalıdır.Veryfibu gereksinimi mimari olarak karşılayamaz—ağ bağlantısı olmadan her belge işleme çağrısı başarısız olur.IronOCR tasarım gereği çevrimdışı işler. Bir mobil gider uygulaması çalıştıran saha teknisyeni, güvenlik duvarlı bir ağa sahip üretim tesisi ve bir SCIF içinde bulunan savunma yüklenicisi, IronOCR'yi değişiklik yapmadan çalıştırabilir. Docker dağıtım kılavuzu ve Linux dağıtım kılavuzu, ağ çıkışının kısıtlı olduğu taşınabilir ortamlara ulaşır.
Satıcı Bağımlılığı ve Şema Bağlantısı
Veryfi'nin JSON yanıt şeması sahipliğine aittir. Satıcı adı, toplam, yönlendirme numarası veya satır öğesi alanlarını okuyan verilerin her bir satırı sadeceVeryfiile çalışır. Rakip bir bulut API'ye ya da yerel bir çözüme geçmek, tüm çıkarım mantığını yeniden yazmayı gerektirir.Veryfiile çok yıllık sözleşmeler müzakere eden organizasyonlar, fiyatlandırma değişiklikleri veya ürün yol haritası değişiklikleri olduğunda bu bağımlılığı keşfeder.IronOCR çıkarım mantığı, ham metinden standart .NET Regex kullanarak okur—taşınabilir, herhangi bir satıcının şemasına bağlı değildir.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
Yapılandırılmış Çıktıyı Desen Çıkarımı ile Değiştirme
Veryfi, önceden ayrıştırılmış alanları döndürür; IronOCR, ham OCR metni döndürür. Taşınma çalışması, Veryfi'nin bulutta yaptığı çıkarım desenlerini yazmaktır. Tutarlı düzenlere sahip makbuzlar ve faturalar için bu basittir:
using IronOcr;
using System.Text.RegularExpressions;
var ocr = new IronTesseract();
var result = ocr.Read("receipt.jpg");
var text = result.Text;
// Vendor: first non-empty line, ordered by Y position
var vendor = result.Lines
.OrderBy(l => l.Y)
.Select(l => l.Text.Trim())
.FirstOrDefault(t => !string.IsNullOrWhiteSpace(t) && t.Length > 3);
// Total: pattern matching against common receipt labels
decimal? total = null;
foreach (var pattern in new[] {
@"Total:?\s*\$?\s*([\d,]+\.?\d*)",
@"Grand Total:?\s*\$?\s*([\d,]+\.?\d*)",
@"Amount Due:?\s*\$?\s*([\d,]+\.?\d*)" })
{
var match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
if (match.Success && decimal.TryParse(
match.Groups[1].Value.Replace(",", ""), out var t))
{
total = t;
break;
}
}
// Tax
var taxMatch = Regex.Match(text,
@"(?:Tax|Sales Tax|VAT):?\s*\$?\s*([\d,]+\.?\d*)",
RegexOptions.IgnoreCase);
using IronOcr;
using System.Text.RegularExpressions;
var ocr = new IronTesseract();
var result = ocr.Read("receipt.jpg");
var text = result.Text;
// Vendor: first non-empty line, ordered by Y position
var vendor = result.Lines
.OrderBy(l => l.Y)
.Select(l => l.Text.Trim())
.FirstOrDefault(t => !string.IsNullOrWhiteSpace(t) && t.Length > 3);
// Total: pattern matching against common receipt labels
decimal? total = null;
foreach (var pattern in new[] {
@"Total:?\s*\$?\s*([\d,]+\.?\d*)",
@"Grand Total:?\s*\$?\s*([\d,]+\.?\d*)",
@"Amount Due:?\s*\$?\s*([\d,]+\.?\d*)" })
{
var match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
if (match.Success && decimal.TryParse(
match.Groups[1].Value.Replace(",", ""), out var t))
{
total = t;
break;
}
}
// Tax
var taxMatch = Regex.Match(text,
@"(?:Tax|Sales Tax|VAT):?\s*\$?\s*([\d,]+\.?\d*)",
RegexOptions.IgnoreCase);
Imports IronOcr
Imports System.Text.RegularExpressions
Dim ocr As New IronTesseract()
Dim result = ocr.Read("receipt.jpg")
Dim text = result.Text
' Vendor: first non-empty line, ordered by Y position
Dim vendor = result.Lines _
.OrderBy(Function(l) l.Y) _
.Select(Function(l) l.Text.Trim()) _
.FirstOrDefault(Function(t) Not String.IsNullOrWhiteSpace(t) AndAlso t.Length > 3)
' Total: pattern matching against common receipt labels
Dim total As Decimal? = Nothing
For Each pattern In {
"Total:?\s*\$?\s*([\d,]+\.?\d*)",
"Grand Total:?\s*\$?\s*([\d,]+\.?\d*)",
"Amount Due:?\s*\$?\s*([\d,]+\.?\d*)"
}
Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
If match.Success AndAlso Decimal.TryParse(match.Groups(1).Value.Replace(",", ""), total) Then
Exit For
End If
Next
' Tax
Dim taxMatch = Regex.Match(text,
"(?:Tax|Sales Tax|VAT):?\s*\$?\s*([\d,]+\.?\d*)",
RegexOptions.IgnoreCase)
Alışılmış olmayan düzenlere veya solmuş baskıya sahip makbuzlar için, IronOCR'nin ön işleme filtreleri, çıkarımdan önce ham doğruluğu artırır. Gerçek dünya makbuz tarama kalitesini ele almak için görüntü kalitesi düzeltme kılavuzu ve görüntü rengi düzeltme kılavuzuna bakın.
Eşzamansızdan Eşzamanlıya Geçişi Yönetme
Veryfi'nin tüm API yüzeyi asenkronizasyondur. IronOCR'nin birincil yolu eşzamansızdır. Uygulama kodundaki mevcut asenkron metod imzaları, sarmalama ile korunabilir:
// Preserve async signature during transition
public async Task<ReceiptResult> ProcessReceiptAsync(string path)
{
// Run IronOCR on a background thread
return await Task.Run(() =>
{
var result = _ocr.Read(path);
return new ReceiptResult
{
Vendor = result.Lines.FirstOrDefault()?.Text,
Total = ExtractTotal(result.Text),
Date = ExtractDate(result.Text)
};
});
}
// Preserve async signature during transition
public async Task<ReceiptResult> ProcessReceiptAsync(string path)
{
// Run IronOCR on a background thread
return await Task.Run(() =>
{
var result = _ocr.Read(path);
return new ReceiptResult
{
Vendor = result.Lines.FirstOrDefault()?.Text,
Total = ExtractTotal(result.Text),
Date = ExtractDate(result.Text)
};
});
}
Imports System.Threading.Tasks
Public Async Function ProcessReceiptAsync(path As String) As Task(Of ReceiptResult)
' Run IronOCR on a background thread
Return Await Task.Run(Function()
Dim result = _ocr.Read(path)
Return New ReceiptResult With {
.Vendor = result.Lines.FirstOrDefault()?.Text,
.Total = ExtractTotal(result.Text),
.Date = ExtractDate(result.Text)
}
End Function)
End Function
Yüksek verimlilik senaryoları için,IronOCR iş parçacığı güvenlidir ve ek senkronizasyon olmadan paralel olarak belgeleri işleyebilen birden fazla IronTesseract örneği kullanılabilir. hız optimizasyon kılavuzu, işlem süresini en aza indiren örnek yeniden kullanım desenleri ve toplu yükleme stratejilerini kapsar.
Kimlik Bilgileri Temizliği
Veryfi, dört kimlik bilgisi gerektirir: ClientId, ClientSecret, Username ve ApiKey. Taşınma sonrasında tüm dördü, konfigürasyon dosyalarından, ortam değişkenlerinden, anahtar kasası ve CI/CD boru hatlarından kaldırılmalıdır. IronOCR, tek bir lisans anahtarı dizesi gerektirir. Geçiş kontrol listesi: her ortamdan tüm dörtVeryfigizli anahtarını kaldırın, tek bir IRONOCR_LICENSE ortam değişkeni ekleyin veVeryfikimlik bilgisi enjeksiyonunu kaldırmak için dağıtım boru hatlarını güncelleyin.
Faturalar için PDF İşleme
Veryfi, PDF byte'larını ProcessDocumentAsync üzerinden kabul eder. IronOCR, PDF'leri OcrInput.LoadPdf() üzerinden özgün olarak işler:
// Multi-page invoice PDF — all pages processed locally
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
var invoiceText = result.Text;
var invoiceNumber = Regex.Match(invoiceText,
@"Invoice\s*#?\s*:?\s*(\w+[-\w]*)",
RegexOptions.IgnoreCase).Groups[1].Value;
// Multi-page invoice PDF — all pages processed locally
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
var invoiceText = result.Text;
var invoiceNumber = Regex.Match(invoiceText,
@"Invoice\s*#?\s*:?\s*(\w+[-\w]*)",
RegexOptions.IgnoreCase).Groups[1].Value;
Imports System.Text.RegularExpressions
Imports IronOcr
' Multi-page invoice PDF — all pages processed locally
Dim input As New OcrInput()
input.LoadPdf("invoice.pdf")
Dim result = New IronTesseract().Read(input)
Dim invoiceText As String = result.Text
Dim invoiceNumber As String = Regex.Match(invoiceText, _
"Invoice\s*#?\s*:?\s*(\w+[-\w]*)", _
RegexOptions.IgnoreCase).Groups(1).Value
Aranabilir PDF arşivleri oluşturan fatura iş akışları için, IronOCR'un SaveAsSearchablePdf() yöntemi, taranmış girdiden PDF/A uyumlu çıktı üretir—aşama, Veryfi'nin bulut API'si tarafından sağlanamaz. Uygulama ayrıntıları için aranabilir PDF kılavuzuna bakın.
Ek IronOCR Yetenekleri
Çekirdek karşılaştırma alanlarının ötesinde, IronOCR, Veryfi'nin kapsamının tamamen dışında kalan yetenekleri sunar:
- Tablo çıkarımı: Izgara düzenlemesine sahip belgelerden yapılandırılmış tablo okuma, banka ekstreleri ve kalemli faturalar için uygulanabilir
- El yazısı tanıma: El yazısı notlar, imzalar ve el yazılı form alanlarını işleyen, Veryfi'nin önceden eğitilmiş modellerinin ele almak için tasarlanmadığı görevler
- MICR/çek okuma: Çek işleme iş akışları için özelleştirilmiş MICR hattı çıkarımı, yönlendirme ve hesap numarası çıkarımını yerinde tutar
- hOCR ihracatı: Diğer bir üst belge analiz boru hattına uygun olan hOCR (konum verisi ile HTML) olarak OCR sonuçları ihracatı
- İlerleme izleme: Uzun süreli toplu işler için işlem ilerlemesini izleme ve uzaktan bir API'yi taramaya gerek yok
- Pasaport ve Kimlik okuma: Kimlik belgesi ve pasaportlardan makine tarafından okunabilir bölge verilerini çıkarma, işe alım ve Müşteriyi Tanıma (KYC) iş akışları için
- AWS ve Azure dağıtımı: Belge işlemeyi kendi bulut hesabınız içinde tutarken bulut altyapısına dağıtım—uygunluk kapsamınıza eklenmiş harici SaaS veri işlemcisi yok
.NET Uyumluluğu ve Geleceğe Hazırlık
IronOCR, .NET 8, .NET 9 ve yakındaki .NET 10 hedeflemekte ve eski uyumluluk için .NET Standard 2.0+ üzerinde çalışmaktadır. Windows x64/x86, Linux x64, macOS ve ARM64 üzerinde çalışır—Docker konteynerler, Azure App Service, AWS Lambda ve yerinde Linux sunucuları dahil olmak üzere tüm modern .NET dağıtım hedeflerini kapsar. Tek paket dağıtım modeli, ortamlar arasında yerel ikili yönetimi gerekli kılmaz; aynı NuGet referansı desteklenen her platformda doğru bir şekilde çözümlenir. Veryfi'nin C# SDK'sı .NET Standard'ı hedef alır ve bir HTTP istemci sarmalayıcısı olarak işlev görür, yani 'uyumluluğu' esasen HTTP yığınının bir işlevi olup, OCR motoru derinliğinden ziyade bir işlevdir—platform kısıtlamalar veya ağ kısıtlamaları söz konusu olduğunda önemli hale gelen bir ayrımdır.
Sonuç
Veryfi, belirli bir problemi hızla çözebilir: bir gider belgesi gönder, yapılandırılmış JSON alanlarını ayrıştırma mantığı yazmadan al. Bulut veri aktarımının kabul edilebilir olduğu ortamlarda küçük ölçekli harcama otomasyonu için, bu öneri gerçek bir değere sahiptir. Hacim, belge başına maliyetlerin haftalar içinde süresiz bir lisansı aşan noktayı geçtiğinde, belge türleri Veryfi'nin eğitilmiş kategorilerinin ötesine geçtiğinde, uyum gereksinimleri üçüncü taraf finansal belge işlemesini pratik olmayan hale getirdiğinde veya uygulamanın internet erişimi olmadan çalışması gerektiğinde, sürtünme ortaya çıkar.
Dört kimlik bilgili kimlik doğrulama modeli, yalnızca asenkron API, dizi işlenmesini durduran HTTP 402 ödeme hataları ve tüm çıkarım mantığını tek bir satıcıya bağlayan tescilli JSON şeması — bunlar, kenar durumu endişeleri değildir. Bunlar, üretimde ölçekliVeryfiçalıştıran ekiplerin günlük operasyonel gerçeklikleridir.
IronOCR, Veryfi'nin otomatik olarak ele aldığı çıkarım kalıplarının yazılmasını gerektirir. Bu gerçek bir gelişim maliyetidir: Farklı belge çeşitlerine bağlı olarak, makbuzlar ve faturalar için regex çıkarımı oluşturmak 8-24 saat bekleyin. Ancak bu yatırım bir kez yapılır. Ortaya çıkan kod, kendi altyapınızda çalışır, herhangi bir belge türünü işler, çevrimdışı çalışır ve belge başına hiçbir maliyeti yoktur. Banka ekstreleri, yönlendirme numaraları, hesap numaraları ve işlem geçmişi sunucunuzu asla terk etmez.
Finansal hizmetler, sağlık, savunma müteahhitliği veya yasal hizmetler sağlayan ekipler için — harcama belgelerini üçüncü taraf bir buluta gönderme konusunun bir uyum konuşması olduğu herhangi bir alan —IronOCR yolu bu konuşmayı tamamen ortadan kaldırır. Halihazırda Veryfi'ye ayda 5.000 $–20.000 $ harcayan ekipler için aritmetik basittir. Harcama belgelerinin ötesinde genel amaçlı OCR ihtiyacı olan ekipler için karar nettir: bulut uzmanı veya yerel genel amaçlı kütüphane eşdeğer araçlar değildir ve ikincisinin tek seferlik lisans maliyeti, cildiyle sağlayamayacakları sınırsız esneklik sunar.
Sıkça Sorulan Sorular
Veryfi OCR API nedir?
Veryfi OCR API, geliştiriciler ve işletmeler tarafından görüntü ve belgelerden metin çıkarmak için kullanılan bir OCR çözümüdür. .NET uygulama geliştirmesinde IronOCR ile birlikte değerlendirilen birkaç OCR seçeneğinden biridir.
IronOCR, .NET geliştiricileri için Veryfi OCR API ile nasıl karşılaştırılır?
IronOCR, IronTesseract'ı çekirdek motor olarak kullanan bir NuGet yerel .NET OCR kütüphanesidir. Veryfi OCR API ile karşılaştırıldığında, daha basit bir dağıtım (SDK yükleyicileri yok), sabit oranlı fiyatlandırma ve COM etkileşimi veya bulut bağımlılığı olmadan temiz bir C# API sunar.
IronOCR'un Veryfi OCR API'den daha kolay kurulumu var mı?
IronOCR, tek bir NuGet paketi aracılığıyla yüklenir. SDK kurulumları, kopyalamak için lisans dosyaları, kaydedilecek COM bileşenleri veya yönetilecek ayrı çalışma zamanı ikili dosyaları yoktur. Tüm OCR motoru paket içinde yer alır.
Veryfi OCR API ile IronOCR arasında hangi doğruluk farkları vardır?
IronOCR, standart iş belgeleri, faturalar, makbuzlar ve taranmış formlar için yüksek tanıma doğruluğu sağlar. Çok kötü durumda olan belgeler ya da nadir yazılar için ise doğruluk, kaynak kalitesine göre değişiklik gösterebilir. IronOCR, düşük kaliteli girişlerde tanımayı geliştirmek için görüntü ön işleme filtreleri içerir.
IronOCR, PDF metin çıkarma desteği sunuyor mu?
Evet. IronOCR, tek bir çağrıda hem yerel PDF'lerden hem de taranmış PDF görüntülerinden metin çıkarır. Çok sayfalı TIFF dosyaları, görüntüler ve akıntılar da desteklenir. Taranmış PDF'ler için, OCR sayfa bazında uygulanır ve her sayfa için sonuç nesneleri sağlanır.
Veryfi OCR API lisanslaması, IronOCR ile nasıl karşılaştırılır?
IronOCR, sayfa veya tarama başına ücret içermeyen sabit oranlı bir süresiz lisans kullanır. Yüksek belge hacmi işleyen kuruluşlar, hacme rağmen aynı lisans maliyetini öder. Ayrıntılar ve hacim fiyatlandırması IronOCR lisans sayfasında mevcuttur.
IronOCR hangi dilleri destekliyor?
IronOCR, ayrı NuGet dil paketleri aracılığıyla 127 dili destekler. Bir dil eklemek için tek bir 'dotnet add package IronOcr.Languages.{Language}' komutu gerekir. Manuel dosya yerleştirme veya yol yapılandırması gerekmez.
.NET projesine IronOCR'yi nasıl kurarım?
NuGet üzerinden kurun: 'Install-Package IronOcr' Package Manager Console'da veya 'dotnet add package IronOcr' CLI'de. Ek dil paketleri aynı şekilde yüklenir. Yerel SDK kurucusu gerekmez.
IronOCR, Veryfi'den farklı olarak Docker ve kapsayıcılı dağıtımlar için uygun mu?
Evet. IronOCR, NuGet paketi aracılığıyla Docker konteynerlerinde çalışır. Lisans anahtarı, bir ortam değişkeni aracılığıyla ayarlanır. Lisans dosyaları, SDK yolları veya OCR motoru için hacimlerin bağlanmasına gerek yoktur.
IronOCR'u, Veryfi ile kıyaslandığında satın almadan önce deneyebilir miyim?
Evet. IronOCR deneme modu, belgeleri işler ve çıkış üzerine bir filigran eklemeli OCR sonuçları döndürür. Lisans satın almadan önce kendi belgeleriniz üzerinde doğruluğu kontrol edebilirsiniz.
IronOCR, metin çıkarma yanında barkod okuma desteği sunar mı?
IronOCR, metin çıkarma ve OCR'ye odaklanır. Barkod okuma için Iron Software, eşlik eden bir kütüphane olan IronBarcode'u sağlar. Her ikisi de ayrı ayrı veya Iron Suite paketi olarak mevcuttur.
Veryfi OCR API'den IronOCR'a geçiş kolay mı?
Veryfi OCR API'den IronOCR'a geçiş genellikle başlangıç dizilerini IronTesseract örneklemesiyle değiştirmeyi, COM yaşam döngüsü yönetimini kaldırmayı ve API çağrılarını güncellemeyi içerir. Çoğu geçiş kod karmaşıklığını önemli ölçüde azaltır.

