Altbilgi içeriğine atla
IRONOCR KULLANıMı

Fatura OCR API (Geliştirici Eğitimi)

Fatura OCR API, makine öğrenimini kullanarak fatura verilerini çıkarımı otomatik hale getirir ve hem dijital hem de taranmış belgelerden satıcı detayları, fatura numaraları ve fiyatları doğru bir şekilde yakalarken manuel giriş hatalarını ortadan kaldırır. Bu öğretici, IronOCR ile bir fatura OCR çözümü oluşturmayı gösterir.

Makine öğrenimi ve bilgisayarlı görmeyi kullanarak, Fatura OCR teknolojisi, fatura verilerini otomatik işlemeye hazır formatlara dönüştürür. Manuel veri giriş hatalarını, gecikmelerini ve maliyetlerini nasıl aşacağınızı ve herhangi bir fatura formatından satıcı bilgilerini, fatura numaralarını ve fiyatları nasıl doğru bir şekilde çıkaracağınızı öğreneceksiniz.

Bu makale, .NET geliştiricileri için öncü bir fatura OCR API olan IronOCR kullanıyor.

IronOCR Nedir?

Iron Software tarafından geliştirilen IronOCR, geliştiricilere kapsamlı OCR araçları sağlar. Makine öğrenimi ve bilgisayarlı görü kullanarak taranmış belgelerden, görüntülerden ve PDF'lerden metin çıkartır, otomatik işlemeye olanak tanır. API'si çeşitli diller ve platformlarla sorunsuz bir şekilde bütünleşir, manuel veri girişi hatalarını azaltır ve verimliliği artırır. Çıkarılan veriler, analiz ve karar verme için doğrudan mevcut sistemlere akar. görüntü ön işleme, barkod tanıma ve esnek dosya ayrıştırma gibi özellikleri, çok yönlülüğünü artırır. IronOCR, geliştiricilere uygulamalarına sağlam metin tanıma ekleme yetkisi verir.

Kütüphane, küresel fatura işleme için ideal hale gelen 125 uluslararası dili özel dil paketleri aracılığıyla destekler. Gelişmiş özellikler, özellikle değişen düzenlere sahip faturalar için kullanışlı olan metni otomatik olarak bulmak için bilgisayarlı görü içerir. Ek olarak, IronOCR, yüksek hacimli fatura işlemini verimli bir şekilde yönetmek için çoklu iş parçacıklı işleme yetenekleri sağlar.

Fatura İşleme için Neden IronOCR Kullanmalıyım?

IronOCR, fatura işleme uygulamaları için ikna edici avantajlar sunar. İlk olarak, .NET uygulamaları için özel olarak geliştirilen optimize edilmiş Tesseract 5 motoru ile olağanüstü doğruluk sağlar. Kütüphane, taranmış belgelerden PDF dosyalarına kadar çeşitli fatura formatlarını ve hatta düşük kaliteli taramaları da başa çıkar.

Yerleşik görüntü optimizasyon filtreleri işlemden önce görüntü kalitesini otomatik olarak artırır, daha doğru metin çıkarımıyla sonuçlanır. Belirli gereksinimlere sahip faturalar için, IronOCR, fatura türlerinizde yaygın olan benzersiz yazı tipleri veya formatlar için optimizasyon sağlayan özel dil eğitimini destekler.

Diğer OCR Kütüphanelerinden IronOCR'yi Farklı Yapan Nedir?

IronOCR, kurumsal düzeyde özellikleri korurken basit tek satır OCR yeteneği ile kendisini ayırır. Ham Tesseract uygulamalarından farklı olarak, IronOCR, karmaşık işlemleri sorunsuz bir şekilde yöneten bir yönetilen .NET API sağlar. Kütüphane, çeşitli belge türleri için özelleştirilmiş belge okuma yöntemleri sunar, özellikle fatura satır öğeleri için gerekli olan belgelerdeki tabloları okuma konusuna özel destek verir.

Filtre Sihirbazı, belirli fatura görüntüleri için en iyi ön işlem ayarlarını otomatik olarak belirler, optimizasyonda tahminde bulunmayı ortadan kaldırır. IronOCR ayrıca geliştiricilerin OCR motorunun ne gördüğünü görselleştirmesi ve çıkartma sorunlarını etkili bir şekilde çözmesi için kapsamlı hata ayıklama yetenekleri sağlar.

Hangi Ön Gereksinimlere İhtiyacım Var?

IronOCR ile çalışmadan önce, bu ön koşulların yerinde olduğundan emin olun:

  1. Visual Studio gibi bir IDE kurulu uygun bir geliştirme ortamı
  2. Kod örneklerini etkili bir şekilde kavramak ve değiştirmek için C# programlamada temel bir anlayış
  3. IronOCR kütüphanesi projenize NuGet Paket Yöneticisi veya komut satırı aracılığıyla kurulmuş

Bu ön koşulları karşılamak, IronOCR ile başarılı bir şekilde çalışmaya dalmanız için sizi hazırlar.

IronOCR, Windows, Linux ve macOS için kapsamlı kurulum kılavuzları sağlar. Kütüphane, AWS Lambda ve Azure Fonksiyonları için özel dersler ile bulut dağıtımını destekler.

Hangi Visual Studio Sürümünü Kullanmalıyım?

IronOCR, Visual Studio'nun 2017'den en son sürümlerine kadar olan sürümlerini destekler. En iyi uyumluluk ve en yeni C# özelliklerine erişim için Visual Studio 2019 veya 2022 önerilir. Kütüphane, .NET Framework, .NET Core ve .NET 5+ ile tamamen uyumludur ve geliştirme ortamınızda esneklik sağlar.

Çapraz platform geliştirimi için, C# eklentisi ile Visual Studio Code iyi çalışır. Mobil geliştiriciler, IronOCR'nin Android ve iOS uygulamaları için yönergelerinden yararlanabilir, bu da onu .NET MAUI uygulamaları için uygun kılar.

Hangi C# Bilgi Seviyesine İhtiyacım Var?

Temel fatura OCR uygulaması için orta düzey C# bilgisi yeterlidir. Aşina olmanız gerekenler:

IronOCR'nin sezgisel API tasarımı, derin bir görüntü işleme veya makine öğrenmesi uzmanlığı gerektirmez. Kütüphane, karmaşık işlemleri dahili olarak halleder, böylece siz iş mantığına odaklanabilirsiniz. Yeni başlayanlar basit OCR örnekleri ile başlayabilir.

Yeni Bir Visual Studio Projesi Nasıl Oluşturulur?

IronOCR ile başlamak için önce yeni bir Visual Studio projesi oluşturun.

Visual Studio'yu açın, Dosya'ya gidin, Yeni üzerine gelin ve Proje'ye tıklayın.

Visual Studio IDE, yeni bir Fatura OCR API projesi oluşturmanın ilk adımını göstermek için 'Yeni' ve 'Proje' seçeneklerinin vurgulandığı Dosya menüsünün açık olduğu görünümünü göstermektedir Yeni Proje

Yeni pencerede Konsol Uygulaması'nı seçin ve Sonraki'ye tıklayın.

Visual Studio'nun 'Yeni bir proje oluştur' diyalog penceresi, fatura OCR işleme için uygun bir .NET Core komut satırı uygulaması oluşturmak üzere 'Konsol Uygulaması' seçeneğinin vurgulandığı çeşitli proje şablonlarının gösterildiği görünümü Konsol Uygulaması

Yeni bir pencere açılır. Proje adınızı ve konumunuzu girin, ardından Sonraki'ye tıklayın.

Visual Studio yeni proje yapılandırma penceresi, fatura OCR API uygulaması için 'IronOCR' adlı bir Konsol Uygulaması kurulumu, C# dil seçimi ve Windows hedef platformu ile gösterilmektedir Proje Yapılandırması

Son olarak, Hedef çerçeveyi seçin ve Oluştur'a tıklayın.

Visual Studio proje oluşturma sihirbazı, fatura işleme uygulaması için İdeal IronOCR uyumluluğu sağlayan .NET 5.0 framework'unun seçildiği 'Ek bilgi' adımını gösteriyor Hedef Çerçeve

Yeni Visual Studio projeniz hazır. Şimdi IronOCR'yi kuralım.

OCR Uygulamaları İçin Hangi Proje Türü En İyi Çalışır?

Bu öğretici basitlik için bir Konsol Uygulaması kullanırken, IronOCR çeşitli proje türlerini destekler:

  • Konsol Uygulamaları: Toplu işleme veya komut satırı araçları için ideal
  • Web Uygulamaları: API'ler veya web tabanlı servisler oluşturmak için mükemmel
  • Windows Forms/WPF: GUI ile masaüstü uygulamaları için uygun
  • .NET MAUI Uygulamaları: Çapraz platform çözümler için

Yoğun işlem gereksinimleri için, IronOCR'yi Windows Hizmeti veya mikro hizmetler mimarisinde uygulamayı düşünün. Kütüphanenin ileri takip yetenekleri uzun süreli işlemleri izlemeyi kolaylaştırır.

Hangi .NET Çerçeve Sürümünü Hedeflemeliyim?

IronOCR, .NET sürümleri arasında geniş bir uyumluluk sunar. Yeni projeler için optimum performans ve en yeni özellikler için .NET 6.0 veya daha yüksek sürümleri hedefleyin. Kütüphane mükemmel geriye dönük uyumluluk sağlar:

  • .NET Framework 4.6.2+: Geçmiş işletme uygulamaları için
  • .NET Core 3.1: İstikrarlı dağıtımlar için uzun vadeli destek
  • .NET 5.0+: Performans iyileştirmeleri ile modern çerçeve
  • .NET Standart 2.0: Platformlar arası maksimum uyumluluk

Docker konteynerlerine dağıtım yaparken, .NET 6.0 veya daha yeni sürümler daha küçük resim boyutları ve daha iyi performans sağlar. Azure İşlevlerinde .NET 6.0 ve .NET Framework desteklenir.

IronOCR Nasıl Yüklenir?

IronOCR'yi indirip yüklemek için iki basit yöntem vardır:

  1. Visual Studio NuGet Paket Yöneticisini Kullanarak
  2. Visual Studio Komut Satırını Kullanarak

NuGet Paket Yöneticisi ile Komut Satırını Ne Zaman Kullanmalıyım?

Çalışma tarzınıza göre NuGet Paket Yöneticisi GUI ve komut satırı arasında seçim yapın:

NuGet Paket Yöneticisi GUI şu durumlardaki en iyi sonucu verir:

  • NuGet paketlerine yeniyseniz
  • IronOCR dil paketleri içinde gezinmek istiyorsanız
  • Görsel teyidi tercih ediyorsanız
  • Birden fazla paketi yönetiyorsanız

Komut Satırı (Paket Yöneticisi Konsolu) şu durumlarda üstünlük sağlar:

  • Komut arayüzlerine aşinaysanız
  • Senaryolu dağıtımları takip ediyorsanız
  • Hızlı bir şekilde belirli sürümlere ihtiyacınız varsa
  • gelişmiş kurulum seçeneklerini kullanıyorsanız

Her iki yöntem de aynı sonuçları elde eder—rahatlık ve gereksinimlere göre seçim yapın.

Hangi Ek Dil Paketlerine İhtiyacım Olabilir?

IronOCR, 125 uluslararası dili özel paketler aracılığıyla destekler. Fatura işlem süreci için düşünülmesi gerekenler:

Dil paketleri ana IronOCR paketi ile birlikte yüklenir ve İngilizce dışındaki metinlerde doğruluğu önemli ölçüde artırır.

Visual Studio NuGet Paket Yöneticisini Kullanma

C# projenize IronOCR'yi Visual Studio NuGet Paket Yöneticisi kullanarak dahil edin.

Araçlar > NuGet Paket Yöneticisi > Çözüm için NuGet Paketlerini Yönet bölümüne gidin.

Visual Studio IDE, fatura OCR yeteneklerini kurmak için kurulum seçeneklerini ve paket ayrıntılarını gösteren IronOCR paketi arama sonuçları ile NuGet Paket Yöneticisi arayüzünü göstermektedir NuGet Paket Yöneticisi

IronOCR'yi arayın ve paketi projenize yükleyin.

NuGet Paket Yöneticisi arayüzü, Arapça, İbranice ve İspanyolca OCR yeteneklerini içeren IronOCR v2022.1.0 ve ilgili dil paketlerini, her bir özel tanıma paketi için sürüm numaraları ve açıklamalarıyla birlikte gösteriyor NuGet Paket Yöneticisi UI'de IronOCR paketini seçin

Aynı yöntemle ek dil paketlerini yükleyin.

Visual Studio Komut Satırını Kullanma

  1. Visual Studio'da Araçlar > NuGet Paket Yöneticisi > Paket Yöneticisi Konsolu bölümüne gidin.
  2. Paket Yöneticisi Konsolu'nda bu komutu girin:

    Install-Package IronOcr

Visual Studio Paket Yöneticisi Konsolu, OCR kütüphanesi için komut satırı kurulum yöntemini gösteren '`Install-Package IronOcr`' komutunun başarılı bir şekilde yürütüldüğünü göstermektedir Paket Yöneticisi Konsolu

Paket, mevcut projenize indirilir ve kurulur, kullanıma hazırdır.

IronOCR ile Faturaların Verisini Nasıl Çıkarırım?

IronOCR ile yalnızca birkaç kod satırı kullanarak fatura verilerini kolayca çıkarın. Bu, manuel veri girişinin yerini alır ve iş akışınızı hızlandırır.

Metin çıkarma için örnek fatura burada:

Sample invoice document displaying customer details, invoice number INV/2023/00039, three line items for cleaning services totaling $80.50, demonstrating a typical invoice format for OCR extraction Örnek fatura

Bu faturadan tüm veriyi çıkaralım:

using IronOcr;
using System;

// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();

// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:

- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

Invoice formats vary between vendors, but IronOCR provides flexible solutions:

1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___

For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.

### What Are Common Extraction Patterns for Invoice Data?

Invoice data follows recognizable patterns extractable using regular expressions with OCR results:

```C#
using IronOCR;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

public class `InvoiceDataExtractor`
{
    private readonly `IronTesseract` ocr;

    public `InvoiceDataExtractor`()
{
        ocr = new `IronTesseract`();
        // Configure for optimal invoice reading
        `ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
        `ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
    }

    public `InvoiceData` `ExtractInvoiceData`(string imagePath)
{
        var invoiceData = new `InvoiceData`();

        using (var input = new `OcrInput`(imagePath/))
    {
            // Apply filters for better accuracy
            input.`EnhanceResolution`(300/);
            `input.Sharpen`();

        var result = `ocr.Read`(input/);
            var text = `result.Text`;

            // Extract invoice number
            invoiceData.`InvoiceNumber` = `ExtractPattern`(text,
                @"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");

            // Extract dates
            invoiceData.`InvoiceDate` = `ExtractDate`(text,
                @"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
            invoiceData.`DueDate` = `ExtractDate`(text,
                @"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");

            // Extract amounts
            `invoiceData.Total` = `ExtractAmount`(text,
                @"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
            `invoiceData.Tax` = `ExtractAmount`(text,
                @"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");

            // Extract vendor information
            invoiceData.`VendorName` = `ExtractVendorName`(text/);

            // Extract line items using table detection
            invoiceData.`LineItems` = `ExtractLineItems`(result/);

            // Extract any barcodes found
            if (`result.Barcodes`.Length > 0)
        {
                invoiceData.`BarcodeValues` = new List<string>();
                foreach (var barcode in `result.Barcodes`)
            {
                    invoiceData.`BarcodeValues`.Add(`barcode.Value`);
                }
            }
        }

        return invoiceData;
    }

    private string `ExtractPattern`(string text, string pattern)
{
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        return `match.Success` ? `match.Value` : `string.Empty`;
    }

    private `DateTime`? `ExtractDate`(string text, string pattern)
{
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
    {
            if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
                return date;
        }
        return null;
    }

    private decimal `ExtractAmount`(string text, string pattern)
{
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
    {
            var amountStr = `match.Groups`[1].Value.Replace(",", "");
            if (decimal.`TryParse`(amountStr, out decimal amount))
                return amount;
        }
        return 0;
    }

    private string `ExtractVendorName`(string text)
{
        // Usually the vendor name appears in the first few lines
        var lines = `text.Split`('\n'/);
        if (`lines.Length` > 0)
    {
            // Simple heuristic: first non-empty line that's not a common header
            foreach (var line in lines)
        {
                var trimmed = `line.Trim`();
                if (!string.`IsNullOrEmpty`(trimmed/) &&
                    !trimmed.`ToLower`().Contains("invoice") &&
                    `trimmed.Length` > 3)
            {
                    return trimmed;
                }
            }
        }
        return `string.Empty`;
    }

    private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
{
        var lineItems = new List<`LineItem`>();

        // Use IronOCR's table detection capabilities
        if (`result.Tables` != null && `result.Tables`.Count > 0)
    {
            foreach (var table in `result.Tables`)
        {
                // Process each row as a potential line item
                for (int i = 1; i < table.`RowCount`; i++) // Skip header row
            {
                    var item = new `LineItem`
                {
                        Description = table[i, 0]?.Text ?? "",
                        Quantity = `ParseQuantity`(table[i, 1]?.Text),
                        `UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
                        Total = `ParseAmount`(table[i, 3]?.Text)
                    };

                    if (!string.`IsNullOrEmpty`(`item.Description`/))
                        `lineItems.Add`(item/);
                }
            }
        }

        return lineItems;
    }

    private int `ParseQuantity`(string text)
{
        if (string.`IsNullOrEmpty`(text/)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d]", "");
        return int.`TryParse`(cleaned, out int qty) ? qty : 0;
    }

    private decimal `ParseAmount`(string text)
{
        if (string.`IsNullOrEmpty`(text/)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d.]", "");
        return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
    }
}

// Data classes for structured invoice information
public class `InvoiceData`
{
    public string `InvoiceNumber` { get; set; }
    public `DateTime`? `InvoiceDate` { get; set; }
    public `DateTime`? `DueDate` { get; set; }
    public string `VendorName` { get; set; }
    public decimal Total { get; set; }
    public decimal Tax { get; set; }
    public List<`LineItem`> `LineItems` { get; set; }
    public List<string> `BarcodeValues` { get; set; }
}

public class `LineItem`
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal `UnitPrice` { get; set; }
    public decimal Total { get; set; }
}
using IronOcr;
using System;

// Initialize a new instance of the IronTesseract class
// This is the main OCR engine that will process our invoice
var ocr = new IronTesseract();

// Configure OCR settings for better invoice processing
ocr.Configuration.BlackListCharacters = "~`$#^*_}{]___PROTECTED_LINK_48___ method from ___PROTECTED_LINK_49___ class. Key enhancements include:

- **Image preprocessing**: ___PROTECTED_LINK_50___ corrects tilted scans; ___PROTECTED_LINK_51___ removes artifacts
- **Resolution enhancement**: Setting ___PROTECTED_LINK_52___ improves recognition
- **Character blacklisting**: Prevents common OCR misinterpretations
- **Confidence scoring**: Assesses extraction reliability

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

Invoice formats vary between vendors, but IronOCR provides flexible solutions:

1. **Template-based**: Define ___PROTECTED_LINK_54___
2. **Computer vision**: Use ___PROTECTED_LINK_55___ to locate text
3. **Table extraction**: Leverage ___PROTECTED_LINK_56___ for line items
4. **Multi-format**: Process ___PROTECTED_LINK_57___, ___PROTECTED_LINK_58___, and ___PROTECTED_LINK_59___

For complex layouts, implement the ___PROTECTED_LINK_60___ which uses machine learning to identify structures automatically.

### What Are Common Extraction Patterns for Invoice Data?

Invoice data follows recognizable patterns extractable using regular expressions with OCR results:

```C#
using IronOCR;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

public class `InvoiceDataExtractor`
{
    private readonly `IronTesseract` ocr;

    public `InvoiceDataExtractor`()
{
        ocr = new `IronTesseract`();
        // Configure for optimal invoice reading
        `ocr.Configuration`.`ReadBarcodes` = true; // Many invoices include barcodes
        `ocr.Configuration`.`TesseractVersion` = `TesseractVersion`.Tesseract5;
    }

    public `InvoiceData` `ExtractInvoiceData`(string imagePath)
{
        var invoiceData = new `InvoiceData`();

        using (var input = new `OcrInput`(imagePath/))
    {
            // Apply filters for better accuracy
            input.`EnhanceResolution`(300/);
            `input.Sharpen`();

        var result = `ocr.Read`(input/);
            var text = `result.Text`;

            // Extract invoice number
            invoiceData.`InvoiceNumber` = `ExtractPattern`(text,
                @"INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)");

            // Extract dates
            invoiceData.`InvoiceDate` = `ExtractDate`(text,
                @"Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");
            invoiceData.`DueDate` = `ExtractDate`(text,
                @"Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})");

            // Extract amounts
            `invoiceData.Total` = `ExtractAmount`(text,
                @"Total\s*:?\s*\$?\s*([\d,]+\.?\d*)");
            `invoiceData.Tax` = `ExtractAmount`(text,
                @"Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)");

            // Extract vendor information
            invoiceData.`VendorName` = `ExtractVendorName`(text/);

            // Extract line items using table detection
            invoiceData.`LineItems` = `ExtractLineItems`(result/);

            // Extract any barcodes found
            if (`result.Barcodes`.Length > 0)
        {
                invoiceData.`BarcodeValues` = new List<string>();
                foreach (var barcode in `result.Barcodes`)
            {
                    invoiceData.`BarcodeValues`.Add(`barcode.Value`);
                }
            }
        }

        return invoiceData;
    }

    private string `ExtractPattern`(string text, string pattern)
{
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        return `match.Success` ? `match.Value` : `string.Empty`;
    }

    private `DateTime`? `ExtractDate`(string text, string pattern)
{
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
    {
            if (`DateTime`.`TryParse`(`match.Groups`[1].Value, out `DateTime` date))
                return date;
        }
        return null;
    }

    private decimal `ExtractAmount`(string text, string pattern)
{
        var match = Regex.Match(text, pattern, `RegexOptions`.`IgnoreCase`);
        if (`match.Success` && `match.Groups`.Count > 1)
    {
            var amountStr = `match.Groups`[1].Value.Replace(",", "");
            if (decimal.`TryParse`(amountStr, out decimal amount))
                return amount;
        }
        return 0;
    }

    private string `ExtractVendorName`(string text)
{
        // Usually the vendor name appears in the first few lines
        var lines = `text.Split`('\n'/);
        if (`lines.Length` > 0)
    {
            // Simple heuristic: first non-empty line that's not a common header
            foreach (var line in lines)
        {
                var trimmed = `line.Trim`();
                if (!string.`IsNullOrEmpty`(trimmed/) &&
                    !trimmed.`ToLower`().Contains("invoice") &&
                    `trimmed.Length` > 3)
            {
                    return trimmed;
                }
            }
        }
        return `string.Empty`;
    }

    private List<`LineItem`> `ExtractLineItems`(`OcrResult` result)
{
        var lineItems = new List<`LineItem`>();

        // Use IronOCR's table detection capabilities
        if (`result.Tables` != null && `result.Tables`.Count > 0)
    {
            foreach (var table in `result.Tables`)
        {
                // Process each row as a potential line item
                for (int i = 1; i < table.`RowCount`; i++) // Skip header row
            {
                    var item = new `LineItem`
                {
                        Description = table[i, 0]?.Text ?? "",
                        Quantity = `ParseQuantity`(table[i, 1]?.Text),
                        `UnitPrice` = `ParseAmount`(table[i, 2]?.Text),
                        Total = `ParseAmount`(table[i, 3]?.Text)
                    };

                    if (!string.`IsNullOrEmpty`(`item.Description`/))
                        `lineItems.Add`(item/);
                }
            }
        }

        return lineItems;
    }

    private int `ParseQuantity`(string text)
{
        if (string.`IsNullOrEmpty`(text/)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d]", "");
        return int.`TryParse`(cleaned, out int qty) ? qty : 0;
    }

    private decimal `ParseAmount`(string text)
{
        if (string.`IsNullOrEmpty`(text/)) return 0;
        var cleaned = Regex.Replace(text, @"[^\d.]", "");
        return decimal.`TryParse`(cleaned, out decimal amt) ? amt : 0;
    }
}

// Data classes for structured invoice information
public class `InvoiceData`
{
    public string `InvoiceNumber` { get; set; }
    public `DateTime`? `InvoiceDate` { get; set; }
    public `DateTime`? `DueDate` { get; set; }
    public string `VendorName` { get; set; }
    public decimal Total { get; set; }
    public decimal Tax { get; set; }
    public List<`LineItem`> `LineItems` { get; set; }
    public List<string> `BarcodeValues` { get; set; }
}

public class `LineItem`
{
    public string Description { get; set; }
    public int Quantity { get; set; }
    public decimal `UnitPrice` { get; set; }
    public decimal Total { get; set; }
}
Imports IronOcr
Imports System
Imports System.Text.RegularExpressions
Imports System.Collections.Generic

Public Class InvoiceDataExtractor
    Private ReadOnly ocr As IronTesseract

    Public Sub New()
        ocr = New IronTesseract()
        ' Configure for optimal invoice reading
        ocr.Configuration.ReadBarcodes = True ' Many invoices include barcodes
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
    End Sub

    Public Function ExtractInvoiceData(imagePath As String) As InvoiceData
        Dim invoiceData As New InvoiceData()

        Using input As New OcrInput(imagePath)
            ' Apply filters for better accuracy
            input.EnhanceResolution(300)
            input.Sharpen()

            Dim result = ocr.Read(input)
            Dim text = result.Text

            ' Extract invoice number
            invoiceData.InvoiceNumber = ExtractPattern(text, "INV[/-]?\d{4}[/-]?\d{5}|Invoice\s*#?\s*:?\s*(\d+)")

            ' Extract dates
            invoiceData.InvoiceDate = ExtractDate(text, "Invoice\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})")
            invoiceData.DueDate = ExtractDate(text, "Due\s*Date\s*:?\s*(\d{1,2}[/-]\d{1,2}[/-]\d{2,4})")

            ' Extract amounts
            invoiceData.Total = ExtractAmount(text, "Total\s*:?\s*\$?\s*([\d,]+\.?\d*)")
            invoiceData.Tax = ExtractAmount(text, "Tax\s*:?\s*\$?\s*([\d,]+\.?\d*)")

            ' Extract vendor information
            invoiceData.VendorName = ExtractVendorName(text)

            ' Extract line items using table detection
            invoiceData.LineItems = ExtractLineItems(result)

            ' Extract any barcodes found
            If result.Barcodes.Length > 0 Then
                invoiceData.BarcodeValues = New List(Of String)()
                For Each barcode In result.Barcodes
                    invoiceData.BarcodeValues.Add(barcode.Value)
                Next
            End If
        End Using

        Return invoiceData
    End Function

    Private Function ExtractPattern(text As String, pattern As String) As String
        Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
        Return If(match.Success, match.Value, String.Empty)
    End Function

    Private Function ExtractDate(text As String, pattern As String) As DateTime?
        Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
        If match.Success AndAlso match.Groups.Count > 1 Then
            Dim dateValue As DateTime
            If DateTime.TryParse(match.Groups(1).Value, dateValue) Then
                Return dateValue
            End If
        End If
        Return Nothing
    End Function

    Private Function ExtractAmount(text As String, pattern As String) As Decimal
        Dim match = Regex.Match(text, pattern, RegexOptions.IgnoreCase)
        If match.Success AndAlso match.Groups.Count > 1 Then
            Dim amountStr = match.Groups(1).Value.Replace(",", "")
            Dim amount As Decimal
            If Decimal.TryParse(amountStr, amount) Then
                Return amount
            End If
        End If
        Return 0
    End Function

    Private Function ExtractVendorName(text As String) As String
        ' Usually the vendor name appears in the first few lines
        Dim lines = text.Split(ControlChars.Lf)
        If lines.Length > 0 Then
            ' Simple heuristic: first non-empty line that's not a common header
            For Each line In lines
                Dim trimmed = line.Trim()
                If Not String.IsNullOrEmpty(trimmed) AndAlso
                   Not trimmed.ToLower().Contains("invoice") AndAlso
                   trimmed.Length > 3 Then
                    Return trimmed
                End If
            Next
        End If
        Return String.Empty
    End Function

    Private Function ExtractLineItems(result As OcrResult) As List(Of LineItem)
        Dim lineItems As New List(Of LineItem)()

        ' Use IronOCR's table detection capabilities
        If result.Tables IsNot Nothing AndAlso result.Tables.Count > 0 Then
            For Each table In result.Tables
                ' Process each row as a potential line item
                For i As Integer = 1 To table.RowCount - 1 ' Skip header row
                    Dim item As New LineItem With {
                        .Description = If(table(i, 0)?.Text, ""),
                        .Quantity = ParseQuantity(table(i, 1)?.Text),
                        .UnitPrice = ParseAmount(table(i, 2)?.Text),
                        .Total = ParseAmount(table(i, 3)?.Text)
                    }

                    If Not String.IsNullOrEmpty(item.Description) Then
                        lineItems.Add(item)
                    End If
                Next
            Next
        End If

        Return lineItems
    End Function

    Private Function ParseQuantity(text As String) As Integer
        If String.IsNullOrEmpty(text) Then Return 0
        Dim cleaned = Regex.Replace(text, "[^\d]", "")
        Dim qty As Integer
        Return If(Integer.TryParse(cleaned, qty), qty, 0)
    End Function

    Private Function ParseAmount(text As String) As Decimal
        If String.IsNullOrEmpty(text) Then Return 0
        Dim cleaned = Regex.Replace(text, "[^\d.]", "")
        Dim amt As Decimal
        Return If(Decimal.TryParse(cleaned, amt), amt, 0)
    End Function
End Class

' Data classes for structured invoice information
Public Class InvoiceData
    Public Property InvoiceNumber As String
    Public Property InvoiceDate As DateTime?
    Public Property DueDate As DateTime?
    Public Property VendorName As String
    Public Property Total As Decimal
    Public Property Tax As Decimal
    Public Property LineItems As List(Of LineItem)
    Public Property BarcodeValues As List(Of String)
End Class

Public Class LineItem
    Public Property Description As String
    Public Property Quantity As Integer
    Public Property UnitPrice As Decimal
    Public Property Total As Decimal
End Class
$vbLabelText   $csharpLabel

Faturalardan Belirli Verileri Çıkarmak için Fatura İşleme

Müşteri fatura numaraları gibi belirli fatura verilerini bu kodla çıkarın:

``C# using IronOCR; using System; using System.Text.RegularExpressions`;

// IronTesseract sınıfının yeni bir örneğini başlat var ocr = new IronTesseract();

// OcrInput nesnesini kullanarak resim dosyasını yükle using (var input = new OcrInput(@"r2.png"/)) { // Resim üzerinde OCR gerçekleştirin var result = ocr.Read(input/);

// Fatura numarası için bir normal ifade deseni tanımlayın var linePattern = @"INV\/\d{4}\/\d{5}";

// Çıkarılan metin üzerinde deseni eşleştirin var lineMatch = Regex.Match(result.Text, linePattern);

// Desenin metnin herhangi bir kısmı ile eşleşip eşleşmediğini kontrol edin if (lineMatch.Success) { // Eşleşme bulunursa, fatura numarasını yazdırın var lineValue = lineMatch.Value; Console.WriteLine("Müşteri Fatura numarası: " + lineValue); } }



![Visual Studio hata ayıklama konsolu, IronOCR kullanılarak çıkarılan müşteri fatura numarası INV/2023/00039 ile başarılı PDF oluşturulmasını gösteriyor, OCR sürecinin hatasız tamamlandığını doğruluyor](/static-assets/ocr/blog/invoice-ocr-api-tutorial/invoice-ocr-api-tutorial-10.webp)
**Fatura Tarama**

Karmaşık çıkarım senaryoları için, fatura türleriniz için optimize etmek üzere [özelleşmiş OCR yapılandırmaları](/csharp/ocr/examples/csharp-configure-setup-tesseract/) kullanın. [OcrResult sınıfı](/csharp/ocr/examples/results-objects/), doğrulama için her tanınan eleman hakkında ayrıntılı bilgiler, koordinatlar ve güven skoru içerir.

## Fatura OCR API'nin Temel Faydaları Nelerdir?

IronOCR'nin Fatura OCR API'si fatura işleme süreçlerini makine öğrenimi ve bilgisayarlı görü ile dönüştürür. Bu teknoloji, fatura metnini makine tarafından okunabilir formatlara dönüştürerek analiz, entegrasyon ve süreç iyileştirme için veri çıkarımını basitleştirir. Faturalama işlemleri için güçlü otomasyon sağlar, doğruluğu artırır ve hesaplar gibi iş akışlarını optimize eder.

IronOCR, ek yapılandırma gerektirmeyen optimize edilmiş Tesseract sonuçları ile olağanüstü doğruluk sunar. [Çok sayfalı kareli TIFF](/csharp/ocr/how-to/input-tiff-gif/), [PDF dosyaları](/csharp/ocr/how-to/input-pdfs/) ve tüm popüler görüntü formatlarını destekler. [Görüntülerden barkod okuma](/csharp/ocr/how-to/barcodes/) başka bir çıkarım boyutunu ekler.

Fatura işleme için ana faydalar:

1. **Zaman Tasarrufu**: Saatleri saniyelere indirmek
2. **Doğruluk**: [güven skorlama](/csharp/ocr/how-to/tesseract-result-confidence/) ile hataları minimize etme
3. **Esneklik**: [çoklu işlem](/csharp/ocr/how-to/async/) ile binlerce işlemek
4. **Entegrasyon**: [arama yapılabilir PDF'lere](/csharp/ocr/how-to/searchable-pdf/) ya da [yapılandırılmış formatlara](/csharp/ocr/how-to/read-results/) aktarım
5. **Maliyet Azaltma**: Operasyonel maliyetleri düşürmek

Kütüphanenin [dağıtım esnekliği](/csharp/ocr/features/languages/), mevcut sistemlere entegrasyona olanak tanır—yerinde, bulut veya hibrit. [Docker](/csharp/ocr/get-started/docker/), [Azure](/csharp/ocr/get-started/azure/) ve [AWS](/csharp/ocr/get-started/aws/) desteği ile IronOCR, ihtiyaçlarınıza göre ölçeklenir.

Üretim ortamları, IronOCR'nin [lisanslama seçenekleri](/csharp/ocr/licensing/) ile özel destek ve [düzenli güncellemelerden](/csharp/ocr/product-updates/changelog/) fayda sağlar. Kütüphanenin [sorun giderme kılavuzları](/csharp/ocr/troubleshooting/general-troubleshooting-ocr/) ve [mühendislik desteği](/csharp/ocr/troubleshooting/engineering-request-ocr/), sorunsuz uygulama sağlar.

IronOCR hakkında daha fazla bilgi için [ana sayfa](/csharp/ocr/)yı ziyaret edin. Ek fatura OCR eğiticileri için, bu [ayrıntılı fatura OCR kılavuzuna](/csharp/ocr/blog/using-ironocr/invoice-ocr-csharp-tutorial/) bakın. Fatura alanları için bilgisayarlı görüş kullanımı hakkında bilgi edinmek için bu [bilgisayarlı görüş eğitici](/csharp/ocr/how-to/computer-vision/)ye göz atınız.

Sıkça Sorulan Sorular

OCR kullanarak fatura veri işlemesini nasıl otomatikleştirebilirim?

IronOCR'u makine öğrenimi algoritmalarını kullanarak fatura veri işlemeyi otomatikleştirmek için kullanabilirsiniz. IronOCR, tedarikçi bilgileri, fatura numaraları ve fiyatlar gibi detayları dijital ve taranmış faturalarından çıkararak manuel giriş hatalarını azaltır ve verimliliği artırır.

Bir Fatura OCR API'sini kurarken hangi adımlar yer alıyor?

IronOCR kullanarak bir Fatura OCR API'si kurmak için, önce Visual Studio'nun NuGet Paket Yöneticisi aracılığıyla kütüphaneyi indirip yükleyin. Ardından yeni bir C# projesi oluşturun, IronOCR'u entegre edin ve metin çıkarımı için dosya yüklemek ve okumak için yöntemlerini kullanın.

IronOCR, fatura numaraları gibi belirli verileri çıkarabilir mi?

Evet, IronOCR, fatura numaraları gibi belirli verileri çıkarabilir. Düzenli ifadeleri kullanarak çıkarılmış metindeki kalıpları eşleştirerek faturalardan belirli bilgileri çekebilirsiniz.

Fatura işleme için IronOCR'un sunduğu bazı özellikler nelerdir?

IronOCR, resim ön işleme, barkod tanıma ve dosya ayrıştırma gibi özellikler içerir. Bunlar, çeşitli fatura formatlarından metinleri doğru bir şekilde çıkarmak ve işlemek için yeteneğini artırır, veri toplama ve iş akışı verimliliğini artırır.

Resim ön işleme, OCR sonuçlarını nasıl artırabilir?

IronOCR'da resim ön işleme, metin çıkarma öncesinde resim kalitesini optimize ederek OCR sonuçlarını iyileştirir. Bu, daha doğru veri çıkarımı için kontrast ayarlama ve gürültü azaltma işlemlerini içerir.

IronOCR’un hem dijital hem de taranmış faturaları işlemesi mümkün mü?

Evet, IronOCR hem dijital hem de taranmış faturaları işleyebilir. Gelişmiş makine öğrenimi ve bilgisayarla görme tekniklerini kullanarak, çeşitli format ve resim kalitesindeki metni doğru bir şekilde çıkarır.

IronOCR, birden fazla sayfa formatı ve dosya türünü nasıl ele alır?

IronOCR birden fazla sayfa formatını ve popüler resim ve PDF dosya türlerini destekler. Karmaşık belgelerden metni verimli bir şekilde çıkararak, çeşitli fatura işleme uygulamaları için çok yönlü hale gelir.

Geliştiriciler IronOCR'u kullanmak için talimatları nerede bulabilirler?

Geliştiriciler, IronOCR web sitesinde talimatlar ve ek kaynaklar bulabilirler. Sitede, farklı senaryolarda IronOCR'u uygulamak için nasıl yapılır bilgileri ve blog yazıları gibi çeşitli öğrenme materyalleri sunulmaktadır.

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