Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

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 gerektiren clientId, clientSecret, username ve apiKey gerektirir
  • Belge başına fiyatlandırma: Belge türü ve hacim katmanı başına güncel oranlar içinVeryfiile iletişim kurun
  • Sadece asenkron API: ProcessDocumentAsync ana 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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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+)")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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.

Lütfen dikkate alınTesseract veVeryfikendi sahiplerinin tescilli markalarıdır. Bu site, Google veyaVeryfiile bağlı, onaylanmış veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

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.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara