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

Fatura OCR API (Geliştirici Eğitimi)

Fatura OCR API'si, makine öğrenimi kullanarak fatura veri çıkarmasını otomatikleştirir, manuel giriş hatalarını ortadan kaldırır ve dijital ve taranmış belgelerden tedarikçi bilgileri, fatura numaraları ve fiyatları doğru bir şekilde yakalar. Bu öğretici, IronOCR ile bir fatura OCR çözümü oluşturmayı gösterir.

Makine öğrenimi ve bilgisayarlı görüden yararlanarak, Fatura OCR teknolojisi fatura verilerini otomatik işlemeye hazır formatlara dönüştürür. Herhangi bir fatura formatından tedarikçi bilgileri, fatura numaraları ve fiyatları doğru bir şekilde çıkarırken manuel veri girişi gecikmeleri, maliyetler ve hatalar gibi yaygın zorluklarla nasıl başa çıkacağınızı öğreneceksiniz.

Bu makale, .NET geliştiricileri için lider bir fatura OCR API olan IronOCR'u kullanır.

IronOCR Nedir?

Iron Software tarafından geliştirilen IronOCR, geliştiriciler için kapsamlı OCR araçları sağlar. Taranmış belgelerden, görüntülerden ve PDF'lerden metin çıkarmak için makine öğrenimi ve bilgisayarlı görü kullanır, otomatik işlemeyi sağlar. API'leri, çeşitli diller ve platformlarla sorunsuz bir şekilde entegre olur, manuel veri girişi hatalarını azaltır ve verimliliği artırır. Çıkarılan veriler, analiz ve karar verme için mevcut sistemlere doğrudan akar. Görüntü ön işleme, barkod tanıma ve esnek dosya ayrıştırma gibi özellikler, onun çok yönlülüğünü artırır. IronOCR, geliştiricilere uygulamalarına sağlam metin tanıma entegrasyonu yapmalarını sağlar.

Kütüphane, özel dil paketleri aracılığıyla 125 uluslararası dili destekler, bu da onu küresel fatura işleme için ideal kılar. Gelişmiş özellikler arasında, otomatik olarak metin bulan bilgisayarlı görü bulunmaktadır, özellikle farklı düzenlere sahip faturalar için kullanışlıdır. Ayrıca, IronOCR yüksek hacimli fatura işlemlerini verimli bir şekilde işlemek için çoklu iş parçacığı işleme yetenekleri sağlar.

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

IronOCR, fatura işleme uygulamaları için cezbedici avantajlar sunar. İlk olarak, .NET uygulamaları için özel olarak geliştirilmiş optimize edilmiş Tesseract 5 motoru ile olağanüstü doğruluk sağlar. Kütüphane, taranmış belgelerden PDF dosyalarına, hatta düşük kaliteli taramalara kadar çeşitli fatura formatlarını ele alır.

Yerleşik görüntü optimizasyon filtreleri işlemden önce görüntü kalitesini otomatik olarak artırır, daha doğru metin çıkışı sağlar. Özel gereksinimlere sahip faturalar için, IronOCR özel dil eğitimi destekler, fatura türlerinizde yaygın olarak bulunan benzersiz fontlar veya formatlar için optimizasyon sağlar.

IronOCR'u Diğer OCR Kütüphanelerinden Farklı Kılan Nedir?

IronOCR, tek satırlık OCR yeteneği sunarken, kurumsal düzeydeki özellikleri korumak suretiyle fark yaratır. Ham Tesseract uygulamalarının aksine, IronOCR karmaşık işlemleri sorunsuz bir şekilde yöneten bir yönetimli .NET API sağlar. Kütüphane, çeşitli belge türleri için özel belge okuma yöntemleri sunar, fatura satır kalemleri için önemli olan belgelerde tablo okuma desteği içerir.

Filtre Sihirbazı, belirli fatura görüntüleriniz için en iyi ön işleme ayarlarını otomatik olarak belirler, optimizasyon konusunda tahmin yapmayı ortadan kaldırır. IronOCR aynı zamanda kapsamlı hata ayıklama yetenekleri sunar, geliştiricilere OCR motorunun ne gördüğünü görselleştirme ve çıkarım sorunlarını etkili bir şekilde giderme olanağı sunar.

Hangi Ön Koşullar Gereklidir?

IronOCR ile çalışmadan önce, şu ön gereksinimlerin mevcut olduğundan emin olun:

  1. Visual Studio gibi bir IDE'nin yüklü olduğu uygun bir geliştirme ortamı
  2. Kod örneklerini etkili bir şekilde anlamak ve değiştirmek için temel C# programlama bilgisi
  3. NuGet Paket Yöneticisi veya komut satırı aracılığıyla projenizde IronOCR kütüphanesi yüklü

Bu ön gereksinimlerin karşılanması, IronOCR ile başarılı bir şekilde çalışmaya başlamanızı sağlar.

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

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

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

Çapraz platform geliştirme için C# uzantısı ile birlikte Visual Studio Code iyi çalışır. Mobil geliştiriciler, .NET MAUI uygulamaları için uygun olan Android ve iOS uygulamaları için IronOCR'un rehberliğinden yararlanabilir.

Hangi C# Bilgi Seviyesi Gereklidir?

Temel düzeyde fatura OCR uygulaması için orta seviye C# bilgisi yeterlidir. Aşağıdaki konularda rahat olmalısınız:

IronOCR'un sezgisel API tasarımı, görüntü işleme veya makine öğreniminde derin uzmanlık gerektirmez. Kütüphane, karmaşık işlemleri dahili olarak ele alır ve sizin iş mantığına odaklanmanızı sağlar. Yeni başlayanlar, basit OCR örnekleri ile başlayabilir.

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

IronOCR ile başlamadan önce, yeni bir Visual Studio projesi oluşturun.

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

Visual Studio IDE, yeni bir Fatura OCR API projesi oluşturmanın ilk adımını gösteren, 'Yeni' ve 'Proje' seçeneklerinin vurgulandığı Dosya menüsünü açık olarak gösteriyor Yeni Proje

Yeni pencerede, Konsol Uygulaması'nı seçin ve İleri'ye tıklayın.

Visual Studio'nun 'Yeni bir proje oluştur' diyalogu, çeşitli proje şablonlarını gösteriyor, fatura OCR işlemi için uygun bir .NET Core komut satırı uygulaması oluşturmak üzere 'Konsol Uygulaması' seçeneği vurgulanmış Konsol Uygulaması

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

Visual Studio yeni proje yapılandırma penceresi, C# dil seçimi ve Windows hedef platform seçimiyle 'IronOCR' adlı bir Konsol Uygulaması için proje kurulumunu gösteriyor Proje Yapılandırması

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

Visual Studio proje oluşturma sihirbazı, fatura işleme uygulamasında optimal IronOCR uyumluluğu için .NET 5.0 çerçevesinin seçildiği 'Ek bilgiler' adımını gösteriyor Hedef Çerçeve

Yeni Visual Studio projeniz hazır. IronOCR'u yükleyelim.

Hangi Proje Türü OCR Uygulamaları İçin En İyisidir?

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

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

Yüksek hacimli işlem için, IronOCR'un Windows Hizmeti veya mikro hizmetler mimarisi içerisinde uygulanmasını düşünün. Kütüphanenin ilerleme izleme yetenekleri, uzun süreli işlemleri izlemeyi kolaylaştırır.

Hangi .NET Framework Sürümünü Hedeflemeliyim?

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

  • .NET Framework 4.6.2+: Eski kurumsal uygulamalar için
  • .NET Core 3.1: Kararlı dağıtımlar için uzun vadeli destek
  • .NET 5.0+: Performans iyileştirmeleri ile modern framework
  • .NET Standard 2.0: Platformlar arası maksimum uyumluluk

Docker konteynerlerine dağıtırken, .NET 6.0 veya daha sonraki sürümler daha küçük görüntü boyutları ve daha iyi performans sağlar. Azure Functions için, hem .NET 6.0 hem de .NET Framework desteklenmektedir.

IronOCR'u Nasıl Kurarım?

İronOCR indirmek ve kurmak için iki basit yöntem vardır:

  1. Visual Studio NuGet Paket Yöneticisi'ni Kullanarak
  2. Visual Studio Komut Satırını Kullanarak

NuGet Paket Yöneticisi mi yoksa Komut Satırı mı Ne Zaman Kullanmalıyım?

İş akışınıza göre NuGet Paket Yöneticisi GUI ile komut satırı arasında seçim yapın:

NuGet Paket Yöneticisi GUI en iyi şu durumlarda çalışır:

  • NuGet paketlerine yeni başlamışsanız
  • IronOCR dil paketlerini göz atmak istiyorsanız
  • Görsel onayları tercih ediyorsanız
  • Birden fazla paketi yönetiyorsanız

Komut Satırı (Paket Yöneticisi Konsolu) mükemmel çalışır:

  • Komut arayüzleriyle rahat hissediyorsanız
  • Betiklenmiş dağıtımları takip ediyorsanız
  • Belirli sürümlere hızla ihtiyaçınız varsa
  • ileri kurulum seçenekleri kullanıyorsanız

Her iki yöntem de aynı sonuçları verir—rahatınıza ve gereksinimlerinize göre seçim yapın.

Hangi Ekstra Dil Paketlerine İhtiyacım Olabilir?

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

  • İşletmeye özgü paketler: Finans belgeleri için Finansal Dil Paketi
  • Bölgesel diller: Fatura kaynaklarına göre (İspanyolca, Fransızca, Almanca)
  • Çok dilli destek: birden çok dil içeren faturalar için
  • Özelleştirilmiş diller: Özelleştirilmiş yazı tipleri veya özel eğitim verileri için

Dil paketleri, ana IronOCR paketiyle birlikte kurulur ve İngilizce olmayan metinler için doğruluğu önemli ölçüde artırır.

Visual Studio NuGet Paket Yöneticisini Kullanma

C# projenize IronOCR eklemek için Visual Studio NuGet Paket Yöneticisini kullanın.

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

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

Projenizde IronOCR'u arayıp kurun.

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

Aynı yöntemi kullanarak ek dil paketlerini kurun.

Visual Studio Komut Satırını Kullanma

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

    Install-Package IronOcr

Visual Studio Paket Yöneticisi Konsolu, OCR kütüphanesinin komut satırı yükleme yöntemini gösteren 'Install-Package IronOCR' komutunun başarılı bir şekilde yürütüldüğünü gösteriyor Paket Yöneticisi Konsolu

Paket, mevcut projenize indirilecek ve kurulacaktır, kullanıma hazır durumda.

Faturalardan Veriyi IronOCR Kullanarak Nasıl Çıkarırım?

Just a few lines of code ile IronOCR kullanarak fatura verilerini kolayca çıkarın. Bu, manuel veri girişi işlemini değiştirir ve iş akışınızı düzene sokar.

İşte metin çıkarımı için bir örnek fatura:

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 verileri çıkaralım:

using IronOcr;
using System;

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

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

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

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

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

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

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

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

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

```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

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

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

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

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

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

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

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

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

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

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

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

        return invoiceData;
    }

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

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

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

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

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

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

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

        return lineItems;
    }

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

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

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

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

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

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

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

!___PROTECTED_LINK_53___
**Invoice Parser**

### How Do I Handle Different Invoice Formats?

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

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

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

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

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

```csharp
using IronOcr;
using System;
using System.Text.`RegularExpressions`;
using System.Collections.Generic;

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

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

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

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

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

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

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

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

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

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

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

        return invoiceData;
    }

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

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

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

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

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

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

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

        return lineItems;
    }

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

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

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

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

Public Class InvoiceDataExtractor
    Private ReadOnly ocr As IronTesseract

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

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

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

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

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

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

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

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

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

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

        Return invoiceData
    End Function

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

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

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

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

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

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

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

        Return lineItems
    End Function

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

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

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

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

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

Bu kod ile müşteri fatura numarası gibi belirli fatura verilerini çıkarın:

using IronOcr;
using System;
using System.Text.`RegularExpressions`;

// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();

// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
    // Perform OCR on the image
    var result = `ocr.Read`(input);

    // Define a regular expression pattern for the invoice number
    var linePattern = @"INV\/\d{4}\/\d{5}";

    // Match the pattern in the extracted text
    var lineMatch = Regex.Match(`result.Text`, linePattern);

    // Check if the pattern matches any part of the text
    if (`lineMatch.Success`)
    {
        // If a match is found, print the invoice number
        var lineValue = `lineMatch.Value`;
        Console.`WriteLine`("Customer Invoice number: " + lineValue);
    }
}
using IronOcr;
using System;
using System.Text.`RegularExpressions`;

// Initialize a new instance of the `IronTesseract` class
var ocr = new `IronTesseract`();

// Use the `OcrInput` object to load the image file
using (var input = new `OcrInput`(@"`r2.png`"))
{
    // Perform OCR on the image
    var result = `ocr.Read`(input);

    // Define a regular expression pattern for the invoice number
    var linePattern = @"INV\/\d{4}\/\d{5}";

    // Match the pattern in the extracted text
    var lineMatch = Regex.Match(`result.Text`, linePattern);

    // Check if the pattern matches any part of the text
    if (`lineMatch.Success`)
    {
        // If a match is found, print the invoice number
        var lineValue = `lineMatch.Value`;
        Console.`WriteLine`("Customer Invoice number: " + lineValue);
    }
}
Imports IronOcr
Imports System
Imports System.Text.RegularExpressions

' Initialize a new instance of the IronTesseract class
Dim ocr As New IronTesseract()

' Use the OcrInput object to load the image file
Using input As New OcrInput("r2.png")
    ' Perform OCR on the image
    Dim result = ocr.Read(input)

    ' Define a regular expression pattern for the invoice number
    Dim linePattern As String = "INV/\d{4}/\d{5}"

    ' Match the pattern in the extracted text
    Dim lineMatch As Match = Regex.Match(result.Text, linePattern)

    ' Check if the pattern matches any part of the text
    If lineMatch.Success Then
        ' If a match is found, print the invoice number
        Dim lineValue As String = lineMatch.Value
        Console.WriteLine("Customer Invoice number: " & lineValue)
    End If
End Using
$vbLabelText   $csharpLabel

Visual Studio hata ayıklama konsolu, IronOCR kullanılarak çıkarılan müşteri fatura numarası INV/2023/00039 ile başarılı PDF oluşturma işlemini gösteriyor, bu da OCR işleminin hatasız tamamlandığını doğrular Fatura Tarama

Karmaşık çıkarım senaryoları için, faturalarınıza göre optimize edilmiş özel OCR yapılandırmalarını kullanın. OcrResult sınıfı, her tanınan öğeyle ilgili detaylı bilgiler sağlar, doğrulama için koordinatlar ve güven puanları dahil.

Fatura OCR API'sinin Temel Faydaları Nelerdir?

IronOCR'ın Fatura OCR API'si, makine öğrenimi ve bilgisayarla görme yoluyla fatura işleme işlemini dönüştürür. Bu teknoloji, fatura metnini makine tarafından okunabilir formatlara çevirir ve böylece analiz, entegrasyon ve süreç iyileştirme için veri çıkarımını kolaylaştırır. Fatura işleme için sağlam bir otomasyon sağlar, doğruluğu artırır ve hesaplar gibi iş akışlarını optimize eder.

IronOCR, ek yapılandırma olmadan optimize edilmiş Tesseract sonuçları kullanarak olağanüstü doğruluk sunar. Çok sayfalı kareli TIFF, PDF dosyaları ve tüm popüler görüntü formatlarını destekler. Resimlerden barkod okuma yeni bir çıkartım boyutu ekler.

Fatura işleme için temel faydalar:

  1. Zaman Tasarrufu: Saatleri saniyelere indirin
  2. Doğruluk: Güven puanlaması ile hataları en aza indirin
  3. Ölçeklenebilirlik: çok iş parçacığı ile binlerce işlemi gerçekleştirin
  4. Entegrasyon: Aranabilir PDF'lere veya yapılandırılmış formatlara dışa aktarın
  5. Maliyet Azaltma: İşletme maliyetlerini düşük tutun

Kutuphanenin dağıtım esnekliği, mevcut sistemlere entegrasyon sağlanmasına olanak tanır—yerinde, bulutta veya hibrit. Docker, Azure ve AWS için destekle birlikte IronOCR, ihtiyaçlarınızla birlikte ölçeklenir.

Üretim ortamları, IronOCR'ın lisanslama seçeneklerinden düzenli güncellemelerle ve özelleştirilmiş destekle yararlanabilir. Kutuphanenin sorun giderme kılavuzları ve mühendislik destekleri, sorunsuz bir uygulama sağlar.

IronOCR hakkında daha fazla bilgi için ana sayfayı ziyaret edin. Ek fatura OCR eğitimleri için, bu detaylı fatura OCR kılavuzuna bakın. Fatura alanları için bilgisayarla görme kullanmak hakkında daha fazla bilgi edinmek için, bu bilgisayarla görme eğitimine göz atın.

Sıkça Sorulan Sorular

Fatura veri işleme nasıl otomatikleştirilir?

IronOCR'u, makine öğrenme algoritmalarını kullanarak fatura veri işlemeyi otomatikleştirmek için kullanabilirsiniz. IronOCR, dijital ve taranmış faturalardan satıcı bilgileri, fatura numaraları ve fiyatlar gibi detayları çıkartarak manuel giriş hatalarını azaltır ve verimliliği artırır.

Fatura OCR API'si kurulumunda hangi adımlar yer alır?

IronOCR kullanarak bir Fatura OCR API'si kurmak için, öncelikle kütüphaneyi Visual Studio'nun NuGet Paket Yöneticisi üzerinden indirip kurun. Sonrasında yeni bir C# projesi oluşturun, IronOCR'u entegre edin ve metin çıkartmak için görüntü dosyalarını yüklemek ve okumak amacıyla yöntemlerini kullanın.

IronOCR belirli verileri, örneğin fatura numaralarını, çıkartabilir mi?

Evet, IronOCR belirli verileri, fatura numaraları gibi, çıkartabilir. Çıkartılan metindeki desenleri eşleştirmek için düzenli ifadeler kullanır, bu sayede faturalarınızdan belirli bilgileri çekebilirsiniz.

IronOCR'un fatura işleme için sağladığı bazı özellikler nelerdir?

IronOCR, görüntü ön işleme, barkod tanıma ve dosya ayrıştırma gibi özellikler içerir. Bunlar, çeşitli fatura formatlarından metni doğru bir şekilde çıkartıp işlem yapma yeteneğini artırarak veri yakalama ve iş akışı verimliliğini geliştirir.

Görüntü ön işleme, OCR sonuçlarını nasıl iyileştirebilir?

IronOCR'a görüntü ön işleme, metin çıkartılmadan önce görüntü kalitesini optimize ederek OCR sonuçlarını iyileştirmeye yardımcı olur. Bu, kontrast ayarı ve gürültü azaltma gibi işlemleri içerir, bu da faturalardan daha doğru veri çıkarılmasına yol açabilir.

IronOCR'u hem dijital hem de taranmış faturalar için kullanmak mümkün mü?

Evet, IronOCR hem dijital hem de taranmış faturaları işlemeye uygundur. Gelişmiş makine öğrenmesi ve bilgisayarlı görüş teknikleri kullanarak çeşitli formatlardan ve görüntü kalitelerinden doğru metin çıkartır.

IronOCR, birden fazla sayfa formatı ve dosya tipini nasıl işler?

IronOCR, birden fazla sayfa formatı ve popüler görüntü ve PDF dosya türlerini destekler. Karmaşık belgelerden metinleri verimli bir şekilde çıkartabilir, bu da onu çeşitli fatura işleme uygulamaları için çok yönlü kılar.

Geliştiriciler, IronOCR kullanımı için eğitimleri nerede bulabilirler?

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

Kannaopat Udonpant
Yazılım Mühendisi
Yazılım Mühendisi olmadan önce, Kannapat Japonya'daki Hokkaido Üniversitesi'nden Çevresel Kaynaklar alanında doktora yaptı. Derecesini tamamlarken, Biyoprodüksiyon Mühendisliği Bölümü'nün bir parçası olan Taşıt Robotik Laboratuvarı'na da üye oldu. 2022'de, Iron Software mühendislik ekibine katılmak iç...
Daha Fazlasını Oku

Iron Destek Ekibi

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