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

.NET OCR SDK: C# için Bir Metin Tanıma Kütüphanesi

Bir .NET OCR SDK, C# ve .NET uygulamalarının görüntülerden, taranmış PDF'lerden ve diğer belge formatlarından programatik olarak metin çıkarmasına izin veren bir yazılım geliştirme kitidir. IronOCR, Tesseract 5 motorunu ön işleme filtreleri, barkod okuma, aranabilir PDF çıktısı ve 125'ten fazla dil desteğine sahip, üretim için hazır bir .NET OCR SDK'dir — Windows, Linux, macOS ve bulut platformlarında çalışan temiz bir C# API ile erişilebilir.

IronOCR'u Projeniz İçin Doğru .NET OCR SDK Yapan Nedir?

Metinden metin tanıma oluşturmak, görüntü ön işleme hatlarını, dil veri dosyalarını, iş parçacığı modellerini ve çıktı ayrıştırmalarını yönetmek anlamına gelir - ilk kelimenizi çıkarmadan önce aylarca çalışma. IronOCR, ekibinizin dakikalar içinde bir projeye bırakabileceği savaşta test edilmiş bir motor göndererek bu ek yükü ortadan kaldırır.

Onu ham Tesseract bağlamalarından ayıran temel yetenekler:

  • El yazısı dahil 125+ dil ve yazı sisteminin tanınması
  • Dahili filtreler: gürültü giderme, düzgünleştirme, ikili hale getirme, çözünürlük iyileştirme ve kontrast düzeltme
  • Aynı okuma geçişinde barkod ve QR kodu tanıma
  • Arşivleme iş akışları için görünmez metin katmanlarıyla aranabilir PDF oluşturma
  • Yüksek verimli hatlar için eşzamanlı asenkron ve paralel toplu işlem
  • İşlem süresini azaltmak için belirli sayfa bölgelerini hedef alan bölgesel OCR
  • Windows, Linux, macOS, Docker ve Azure üzerinde çapraz platform desteği

Tesseract OCR projesi belgelerine göre, ham Tesseract dil paketleri, DPI ayarları ve çıktı modları için manuel yapılandırma gerektirir. IronOCR tüm bunları otomatik olarak yönetir, bu sayede çıkartılan metnin ne anlama geldiğine odaklanabilir ve nasıl çıkarılacağını düşünmezsiniz.

IronOCR, Ham Tesseract ile Nasıl Karşılaştırılır?

P/Invoke sarıcı veya Tesseract NuGet paketi aracılığıyla ham Tesseract, tessdata dil dosyalarını indirip yerleştirmek, doğru sayfa segmentasyon modunu seçmek, çok sayfalı TIFF ve PDF'leri kendiniz bölmek ve paralel işlem istiyorsanız iş parçacığını bağlamak sorumluluğunu size bırakır. Bu detayların hiçbiri iş gereksinimlerinize özel değildir.

IronOCR, tüm bu tesisatı sarmalar. Yazılı bir API yüzeyi, otomatik tessdata yönetimi, yerleşik PDF ayırma ve yeniden birleştirme, ve talepler arasında yeniden kullanılabilecek, iş parçacığı güvenli bir motor alırsınız. Ticari kullanım için ödeme gerektiren bir lisans söz konusu—lisanslama sayfası mevcut fiyatlandırma katmanlarını, ücretsiz geliştirme lisansı dahil, göstermektedir.

Sadece açık kaynaklı bağımlılıklar gerektiren ekipler için, özel ön işleme ile ham Tesseract geçerli bir yolu ifade eder. Hızla güvenilir OCR sağlaması gereken ekipler için, IronOCR entegrasyon yüzeyini birkaç satır C#'a indirger.

IronOCR .NET SDK Nasıl Yüklenir?

Kurulum standart .NET paket yöneticisi olan NuGet üzerinden gerçekleşir. Proje dizininizde aşağıdaki komutu çalıştırın:

Install-Package IronOcr

Visual Studio kullanıcıları için, NuGet Paket Yöneticisi arayüzünde IronOcr arayın ve oradan yükleyin. Manuel DLL referansları dahil tüm kurulum seçenekleri için IronOCR kurulum belgelerine bakın.

Kurulumdan sonra, lisans anahtarını uygulamanızın başlangıcına veya appsettings.json ekleyin. Ücretsiz deneme başlatabilirsiniz ve değerlendirme sırasında tüm özellikleri açacak bir deneme anahtarı edinebilirsiniz.

Kurulumu Doğrulama

Kurulumdan sonra hızlı bir akıl sağlığı kontrolü her şeyin doğru bağlandığını onaylar. .NET 10 hedefleyen bir konsol uygulaması oluşturun:

using IronOcr;

// Minimal smoke test -- reads a single image and prints extracted text
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("sample.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

// Minimal smoke test -- reads a single image and prints extracted text
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("sample.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

' Minimal smoke test -- reads a single image and prints extracted text
Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage("sample.png")
    Dim result = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

Konsolda metin görünüyorsa, SDK kurulu ve lisans anahtarı geçerlidir. Üretim iş akışları oluşturmaya hazırsınız.

C# ile Görüntülerden ve PDF'lerden Metin Nasıl Çıkarılır?

Çekirdek çıkarım deseni tüm giriş türleri arasında tutarlıdır. Bir IronTesseract örneği oluşturur, içeriği bir OcrInput nesnesine yükler ve Read() çağırırsınız. IronOCR dosya biçimini uzantıdan otomatik olarak algılar, bu nedenle aynı kod yolu JPEG, PNG, TIFF, BMP ve çok sayfalı PDF'lerle ilgilenir.

using IronOcr;

// Reusable OCR service encapsulating the IronTesseract engine
public class OcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string filePath)
    {
        using var input = new OcrInput();

        // LoadPdf for PDF files; LoadImage for raster formats
        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        return _ocr.Read(input).Text;
    }

    public async Task<string> ExtractTextAsync(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        var result = await _ocr.ReadAsync(input);
        return result.Text;
    }
}
using IronOcr;

// Reusable OCR service encapsulating the IronTesseract engine
public class OcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string filePath)
    {
        using var input = new OcrInput();

        // LoadPdf for PDF files; LoadImage for raster formats
        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        return _ocr.Read(input).Text;
    }

    public async Task<string> ExtractTextAsync(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        var result = await _ocr.ReadAsync(input);
        return result.Text;
    }
}
Imports IronOcr

' Reusable OCR service encapsulating the IronTesseract engine
Public Class OcrService
    Private ReadOnly _ocr As New IronTesseract()

    Public Function ExtractText(filePath As String) As String
        Using input As New OcrInput()
            ' LoadPdf for PDF files; LoadImage for raster formats
            If filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
                input.LoadPdf(filePath)
            Else
                input.LoadImage(filePath)
            End If

            Return _ocr.Read(input).Text
        End Using
    End Function

    Public Async Function ExtractTextAsync(filePath As String) As Task(Of String)
        Using input As New OcrInput()
            If filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
                input.LoadPdf(filePath)
            Else
                input.LoadImage(filePath)
            End If

            Dim result = Await _ocr.ReadAsync(input)
            Return result.Text
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Hizmeti deneyimlemek için üst seviye giriş noktası:

using IronOcr;

var service = new OcrService();
string text = await service.ExtractTextAsync("invoice.pdf");
Console.WriteLine(text);
using IronOcr;

var service = new OcrService();
string text = await service.ExtractTextAsync("invoice.pdf");
Console.WriteLine(text);
Imports IronOcr

Dim service = New OcrService()
Dim text As String = Await service.ExtractTextAsync("invoice.pdf")
Console.WriteLine(text)
$vbLabelText   $csharpLabel

IronTesseract örneği iş parçacığı güvenliğindedir ve yeniden kullanım için tasarlanmıştır. ASP.NET Core gibi bağımlılık enjeksiyonu aracılığıyla uygulama başlangıcında bir kez oluşturun ve her istek için yeniden örneklemeyin.

Çok sayfalı PDF'ler için, result.Pages size sayfa başına metin erişimi, güven puanı ve sınır kutuları sunar. Sayfa bazında yineleme üzerine detaylar için çok sayfalı PDF OCR kılavuzuna bakın.

Ön İşleme Filtreleriyle OCR Doğruluğunu Nasıl Geliştirirsiniz?

Düz yatak tarayıcılarından, akıllı telefon kameralarından veya faks makinelerinden gelen ham taramalar sıklıkla gürültü, döndürme, düşük kontrast ve yetersiz çözünürlükten muzdarip olur. IronOCR'un görüntü kalitesi düzeltme hattı her sorunu okuma çağrısının öncesinde zincirleyeceğiniz hedefli filtrelerle ele alır.

using IronOcr;

public class AccuracyOptimizedOcr
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        // Chain preprocessing filters in order of operation
        input.DeNoise();              // Remove scan artifacts and speckling
        input.Deskew();               // Correct page tilt up to 35 degrees
        input.Scale(150);             // Enlarge small text for better recognition
        input.Binarize();             // Convert to black/white for cleaner edges
        input.EnhanceResolution(300); // Sharpen blurry or low-DPI input

        var result = _ocr.Read(input);

        // Confidence below 70 often signals a preprocessing mismatch
        if (result.Confidence < 70)
            Console.WriteLine($"Warning: low confidence ({result.Confidence:F1}%)");

        return result.Text;
    }
}
using IronOcr;

public class AccuracyOptimizedOcr
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        // Chain preprocessing filters in order of operation
        input.DeNoise();              // Remove scan artifacts and speckling
        input.Deskew();               // Correct page tilt up to 35 degrees
        input.Scale(150);             // Enlarge small text for better recognition
        input.Binarize();             // Convert to black/white for cleaner edges
        input.EnhanceResolution(300); // Sharpen blurry or low-DPI input

        var result = _ocr.Read(input);

        // Confidence below 70 often signals a preprocessing mismatch
        if (result.Confidence < 70)
            Console.WriteLine($"Warning: low confidence ({result.Confidence:F1}%)");

        return result.Text;
    }
}
Imports IronOcr

Public Class AccuracyOptimizedOcr
    Private ReadOnly _ocr As New IronTesseract()

    Public Function ProcessLowQualityDocument(filePath As String) As String
        Using input As New OcrInput()

            If filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
                input.LoadPdf(filePath)
            Else
                input.LoadImage(filePath)
            End If

            ' Chain preprocessing filters in order of operation
            input.DeNoise()              ' Remove scan artifacts and speckling
            input.Deskew()               ' Correct page tilt up to 35 degrees
            input.Scale(150)             ' Enlarge small text for better recognition
            input.Binarize()             ' Convert to black/white for cleaner edges
            input.EnhanceResolution(300) ' Sharpen blurry or low-DPI input

            Dim result = _ocr.Read(input)

            ' Confidence below 70 often signals a preprocessing mismatch
            If result.Confidence < 70 Then
                Console.WriteLine($"Warning: low confidence ({result.Confidence:F1}%)")
            End If

            Return result.Text
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Filtre seçimi rehberi:

  • DeNoise() -- ağır benekli veya sıkıştırma artefaktlı taramalar için kullanın
  • Deskew() -- belgeler açılı çekildiyse kullanın; otomatik algılama için sayfa döndürme algılamaya bakın
  • Scale() -- küçük baskı veya 150 DPI altı girdiler için kullanın; 150-200 değerleri genellikle en iyi sonuçları verir
  • Binarize() -- renkli veya gradyanlı arka planlar için kullanın; görüntüyü katı siyah-beyaza dönüştürür
  • EnhanceResolution() -- bulanık veya düşük kontrastlı metinler için kullanın; Tesseract'ın tatlı noktası olarak 300 DPI hedefler

International Journal on Document Analysis and Recognition'da yayınlanan araştırmalar, ikili hale getirme ve düzgünleştirmenin karakter tanıma oranlarını iyileştirmek için en yüksek etkili ön işleme adımları olduğunu tutarlı bir şekilde göstermektedir. Tüm üretim hattı için bunları bir temel oluşturun.

IronOCR ön işleme filtreleri ve birincil kullanım durumları
Filtre Çözülen Sorun Ne Zaman Uygulanmalı
DeNoise() Tarayıcı kalıntıları, benek gürültüsü Herhangi bir düz yatak veya faks taraması
Deskew() Sayfa eğimi ve döndürme Fotoğraflanan veya hatalı hizalanmış belgeler
Scale() Küçük metin veya düşük DPI 150 DPI altında giriş
Binarize() Renkli arka planlar, geçişler Renkli kağıt veya markalı formlar
EnhanceResolution() Bulanıklık ve düşük kontrast Kamera çekimleri ve sıkıştırılmış JPEG'ler

Üretim Toplu İşleme Hattı Nasıl Kurulur?

Tek belgeli çıkarım basittir, ancak üretim senaryoları kuyruklarda, paylaşılan klasörlerde veya bulut depolamada yüzlerce veya binlerce dosya içerir. IronOCR'un asenkron API'si ve iş parçacığı güvenli motoru, paralel iş yükleri için uygun hale getirir.

using IronOcr;
using Microsoft.Extensions.Logging;

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger<ProductionOcrService> _logger;

    public ProductionOcrService(ILogger<ProductionOcrService> logger)
    {
        _logger = logger;
        _ocr = new IronTesseract
        {
            Configuration =
            {
                RenderSearchablePdfsAndHocr = true,
                ReadBarCodes = true
            }
        };
    }

    public async Task<IReadOnlyList<string>> ProcessBatchAsync(
        IEnumerable<string> filePaths,
        int maxDegreeOfParallelism = 4)
    {
        var results = new System.Collections.Concurrent.ConcurrentBag<string>();

        var options = new ParallelOptions
        {
            MaxDegreeOfParallelism = maxDegreeOfParallelism
        };

        await Parallel.ForEachAsync(filePaths, options, async (filePath, ct) =>
        {
            try
            {
                using var input = new OcrInput();

                if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
                    input.LoadPdf(filePath);
                else
                    input.LoadImage(filePath);

                var result = await _ocr.ReadAsync(input);
                results.Add(result.Text);
                _logger.LogInformation("Processed {FilePath} at {Confidence:F1}% confidence",
                    filePath, result.Confidence);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "OCR failed for {FilePath}", filePath);
                results.Add(string.Empty);
            }
        });

        return results.ToList();
    }

    public void CreateSearchablePdf(string inputPath, string outputPath)
    {
        using var input = new OcrInput();

        if (inputPath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(inputPath);
        else
            input.LoadImage(inputPath);

        _ocr.Read(input).SaveAsSearchablePdf(outputPath);
        _logger.LogInformation("Searchable PDF written to {OutputPath}", outputPath);
    }
}
using IronOcr;
using Microsoft.Extensions.Logging;

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger<ProductionOcrService> _logger;

    public ProductionOcrService(ILogger<ProductionOcrService> logger)
    {
        _logger = logger;
        _ocr = new IronTesseract
        {
            Configuration =
            {
                RenderSearchablePdfsAndHocr = true,
                ReadBarCodes = true
            }
        };
    }

    public async Task<IReadOnlyList<string>> ProcessBatchAsync(
        IEnumerable<string> filePaths,
        int maxDegreeOfParallelism = 4)
    {
        var results = new System.Collections.Concurrent.ConcurrentBag<string>();

        var options = new ParallelOptions
        {
            MaxDegreeOfParallelism = maxDegreeOfParallelism
        };

        await Parallel.ForEachAsync(filePaths, options, async (filePath, ct) =>
        {
            try
            {
                using var input = new OcrInput();

                if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
                    input.LoadPdf(filePath);
                else
                    input.LoadImage(filePath);

                var result = await _ocr.ReadAsync(input);
                results.Add(result.Text);
                _logger.LogInformation("Processed {FilePath} at {Confidence:F1}% confidence",
                    filePath, result.Confidence);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "OCR failed for {FilePath}", filePath);
                results.Add(string.Empty);
            }
        });

        return results.ToList();
    }

    public void CreateSearchablePdf(string inputPath, string outputPath)
    {
        using var input = new OcrInput();

        if (inputPath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(inputPath);
        else
            input.LoadImage(inputPath);

        _ocr.Read(input).SaveAsSearchablePdf(outputPath);
        _logger.LogInformation("Searchable PDF written to {OutputPath}", outputPath);
    }
}
Imports IronOcr
Imports Microsoft.Extensions.Logging
Imports System.Collections.Concurrent
Imports System.Threading.Tasks

Public Class ProductionOcrService
    Private ReadOnly _ocr As IronTesseract
    Private ReadOnly _logger As ILogger(Of ProductionOcrService)

    Public Sub New(logger As ILogger(Of ProductionOcrService))
        _logger = logger
        _ocr = New IronTesseract With {
            .Configuration = New TesseractConfiguration With {
                .RenderSearchablePdfsAndHocr = True,
                .ReadBarCodes = True
            }
        }
    End Sub

    Public Async Function ProcessBatchAsync(filePaths As IEnumerable(Of String), Optional maxDegreeOfParallelism As Integer = 4) As Task(Of IReadOnlyList(Of String))
        Dim results = New ConcurrentBag(Of String)()

        Dim options = New ParallelOptions With {
            .MaxDegreeOfParallelism = maxDegreeOfParallelism
        }

        Await Parallel.ForEachAsync(filePaths, options, Async Function(filePath, ct)
            Try
                Using input As New OcrInput()
                    If filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
                        input.LoadPdf(filePath)
                    Else
                        input.LoadImage(filePath)
                    End If

                    Dim result = Await _ocr.ReadAsync(input)
                    results.Add(result.Text)
                    _logger.LogInformation("Processed {FilePath} at {Confidence:F1}% confidence", filePath, result.Confidence)
                End Using
            Catch ex As Exception
                _logger.LogError(ex, "OCR failed for {FilePath}", filePath)
                results.Add(String.Empty)
            End Try
        End Function)

        Return results.ToList()
    End Function

    Public Sub CreateSearchablePdf(inputPath As String, outputPath As String)
        Using input As New OcrInput()
            If inputPath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
                input.LoadPdf(inputPath)
            Else
                input.LoadImage(inputPath)
            End If

            _ocr.Read(input).SaveAsSearchablePdf(outputPath)
            _logger.LogInformation("Searchable PDF written to {OutputPath}", outputPath)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

MaxDegreeOfParallelism tavanı, dosyalar büyük olduğunda bellek tükenmesini önler. Dört çekirdekli bir sunucuda, 4 değeri iyi çalışır; yalnızca bellek kullanımını profilleme sonrası artırın. Azure Functions veya AWS Lambda dağıtımları için, her işlev örneği başına eşzamanlılığı 1 olarak ayarlayın ve bunun yerine yatay ölçekte artırın.

CreateSearchablePdf, orijinal görüntünün görünür bir katman olarak korunduğu ve tanınan metnin altında görünmez bir şekilde gömüldüğü bir PDF oluşturur. Bu, PDF görüntüleyicilerde tam metin aramasına ve arama motorları tarafından endekslenmesine olanak tanır — belge yönetim sistemlerinde yaygın bir gereksinim.

Üretimde Güven Skorlarını İzleme

Her OcrResult bir Confidence özelliği (0-100) sunar ve motorun tanınan metin hakkında ne kadar emin olduğunu yansıtır. Bu metriği günlük alt yapınızda izlemek, tarayıcı kalibrasyonu kayarsa veya yeni bir belge sağlayıcısı beklenenden daha düşük DPI taramalar gönderirse, belge kalitesi bozulduğunda erken uyarı sinyali verir.

Pratik bir eşik stratejisi: güvenin 80'in altına düşmesini bir uyarı olarak kaydedin, 70'in altına düştüğünde bir ön işleme-tekrar deneme geçişini tetikleyin ve 60'ın altına düştüğünde insan incelemesi için belgeleri işaretleyin. Bu katmanlı yaklaşım, sorunsuz veri bozulmasını öncesinde yakalar.

Microsoft .NET günlükleme belgeleri, yukarıdaki toplu hizmette kullanılan ve ASP.NET Core'un yerleşik DI konteynerine entegre olan ekipler için ILogger desenlerini kapsar.

Taranmış Belgelerden Yapılandırılmış Veriler Nasıl Çıkarılır?

Metin çıkarma ilk adımdır. İkinci adım, bu metni uygulamanızın üzerinde işlem yapabileceği türdeş alanlara ayrıştırmaktır. Bu desen IronOCR'ın okuma geçişini .NET'in Regex ile birleştirerek faturalar, formlar ve raporlardan yapılandırılmış verileri çekmek için kullanılır.

using IronOcr;
using System.Text.RegularExpressions;

public record Invoice(
    string? InvoiceNumber,
    DateOnly? Date,
    decimal? TotalAmount,
    string RawText
);

public class InvoiceOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();

        if (invoicePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(invoicePath);
        else
            input.LoadImage(invoicePath);

        input.DeNoise();
        input.Deskew();

        var result = _ocr.Read(input);
        string text = result.Text;

        return new Invoice(
            InvoiceNumber: ExtractInvoiceNumber(text),
            Date: ExtractDate(text),
            TotalAmount: ExtractAmount(text),
            RawText: text
        );
    }

    private static string? ExtractInvoiceNumber(string text)
    {
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)", RegexOptions.IgnoreCase);
        return match.Success ? match.Groups[1].Value : null;
    }

    private static DateOnly? ExtractDate(string text)
    {
        // Numeric format: MM/DD/YYYY
        var numeric = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numeric.Success && DateTime.TryParse(numeric.Groups[1].Value, out var d1))
            return DateOnly.FromDateTime(d1);

        // Written format: January 15, 2025
        var written = Regex.Match(text,
            @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b",
            RegexOptions.IgnoreCase);
        if (written.Success && DateTime.TryParse(written.Value, out var d2))
            return DateOnly.FromDateTime(d2);

        return null;
    }

    private static decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        return match.Success && decimal.TryParse(match.Groups[1].Value, out var amt)
            ? amt
            : null;
    }
}
using IronOcr;
using System.Text.RegularExpressions;

public record Invoice(
    string? InvoiceNumber,
    DateOnly? Date,
    decimal? TotalAmount,
    string RawText
);

public class InvoiceOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();

        if (invoicePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(invoicePath);
        else
            input.LoadImage(invoicePath);

        input.DeNoise();
        input.Deskew();

        var result = _ocr.Read(input);
        string text = result.Text;

        return new Invoice(
            InvoiceNumber: ExtractInvoiceNumber(text),
            Date: ExtractDate(text),
            TotalAmount: ExtractAmount(text),
            RawText: text
        );
    }

    private static string? ExtractInvoiceNumber(string text)
    {
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)", RegexOptions.IgnoreCase);
        return match.Success ? match.Groups[1].Value : null;
    }

    private static DateOnly? ExtractDate(string text)
    {
        // Numeric format: MM/DD/YYYY
        var numeric = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numeric.Success && DateTime.TryParse(numeric.Groups[1].Value, out var d1))
            return DateOnly.FromDateTime(d1);

        // Written format: January 15, 2025
        var written = Regex.Match(text,
            @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b",
            RegexOptions.IgnoreCase);
        if (written.Success && DateTime.TryParse(written.Value, out var d2))
            return DateOnly.FromDateTime(d2);

        return null;
    }

    private static decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        return match.Success && decimal.TryParse(match.Groups[1].Value, out var amt)
            ? amt
            : null;
    }
}
Imports IronOcr
Imports System.Text.RegularExpressions

Public Class Invoice
    Public Property InvoiceNumber As String
    Public Property Date As DateOnly?
    Public Property TotalAmount As Decimal?
    Public Property RawText As String

    Public Sub New(invoiceNumber As String, [date] As DateOnly?, totalAmount As Decimal?, rawText As String)
        Me.InvoiceNumber = invoiceNumber
        Me.Date = [date]
        Me.TotalAmount = totalAmount
        Me.RawText = rawText
    End Sub
End Class

Public Class InvoiceOcrService
    Private ReadOnly _ocr As New IronTesseract()

    Public Function ExtractInvoiceData(invoicePath As String) As Invoice
        Using input As New OcrInput()

            If invoicePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase) Then
                input.LoadPdf(invoicePath)
            Else
                input.LoadImage(invoicePath)
            End If

            input.DeNoise()
            input.Deskew()

            Dim result = _ocr.Read(input)
            Dim text As String = result.Text

            Return New Invoice(
                InvoiceNumber:=ExtractInvoiceNumber(text),
                [Date]:=ExtractDate(text),
                TotalAmount:=ExtractAmount(text),
                RawText:=text
            )
        End Using
    End Function

    Private Shared Function ExtractInvoiceNumber(text As String) As String
        Dim match = Regex.Match(text, "Invoice\s*#?:?\s*(\S+)", RegexOptions.IgnoreCase)
        Return If(match.Success, match.Groups(1).Value, Nothing)
    End Function

    Private Shared Function ExtractDate(text As String) As DateOnly?
        ' Numeric format: MM/DD/YYYY
        Dim numeric = Regex.Match(text, "\b(\d{1,2}/\d{1,2}/\d{2,4})\b")
        If numeric.Success AndAlso DateTime.TryParse(numeric.Groups(1).Value, Nothing) Then
            Return DateOnly.FromDateTime(DateTime.Parse(numeric.Groups(1).Value))
        End If

        ' Written format: January 15, 2025
        Dim written = Regex.Match(text,
            "\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b",
            RegexOptions.IgnoreCase)
        If written.Success AndAlso DateTime.TryParse(written.Value, Nothing) Then
            Return DateOnly.FromDateTime(DateTime.Parse(written.Value))
        End If

        Return Nothing
    End Function

    Private Shared Function ExtractAmount(text As String) As Decimal?
        Dim match = Regex.Match(text, "\$\s*(\d+(?:\.\d{2})?)")
        Dim amt As Decimal
        Return If(match.Success AndAlso Decimal.TryParse(match.Groups(1).Value, amt), amt, Nothing)
    End Function
End Class
$vbLabelText   $csharpLabel

Bu yaklaşım, bir formun neresinde her alanın olduğunu tam olarak bildiğinizde bölgesel OCR ile iyi bir eşleşme sağlar. Bir sınır dikdörtgeni sağlayarak tam sayfa tanımayı atlar ve sadece fatura numarası veya toplamı içeren bölgeyi hedef alarak sabit düzen belgeler için işlem süresini büyük ölçüde azaltırsınız.

Tablolar ve yapılandırılmış formlar dahil olmak üzere daha gelişmiş çıkarma senaryoları için ürün sitesindeki IronOCR veri çıkarma örneklerini gözden geçirin.

.NET'de Çok Dilli OCR Nasıl Ele Alınır?

Birçok kuruluş, ithalat/ihracat formları, uluslararası sözleşmeler veya çok dilli müşteri gönderimleri nedeniyle birden fazla dilde belgeler işliyor. IronOCR, okuma çağrısı öncesinde dil paketini yapılandırmanıza izin vererek bunu ele alır.

using IronOcr;

// Configure multi-language recognition
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.EnglishBest;  // Swap for any of 125+ supported languages

// For mixed-language documents, combine language packs
ocr.AddSecondaryLanguage(OcrLanguage.German);

using var input = new OcrInput();
input.LoadPdf("multilingual-contract.pdf");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

// Configure multi-language recognition
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.EnglishBest;  // Swap for any of 125+ supported languages

// For mixed-language documents, combine language packs
ocr.AddSecondaryLanguage(OcrLanguage.German);

using var input = new OcrInput();
input.LoadPdf("multilingual-contract.pdf");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

' Configure multi-language recognition
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.EnglishBest  ' Swap for any of 125+ supported languages

' For mixed-language documents, combine language packs
ocr.AddSecondaryLanguage(OcrLanguage.German)

Using input As New OcrInput()
    input.LoadPdf("multilingual-contract.pdf")
    Dim result = ocr.Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

IronOCR dil desteği sayfası, indirme talimatları ile birlikte mevcut 125+ dil paketinin hepsini listeler. Dil paketleri, NuGet paketleri olarak dağıtılır (örneğin, IronOcr.Languages.German) böylece zaten kullandığınız aynı paket yönetimi iş akışı ile entegre olurlar.

Latin alfabesi dışındaki karakter setleri için — Arapça, Çince, Japonca, Korece — IronOCR, sağdan sola metin yönü ve ideografik yazı sistemlerini ele alan optimize edilmiş modeller sağlar. Yapılandırma ayrıntıları için CJK OCR kılavuzuna bakın.

Sonraki Adımlarınız Neler?

Artık .NET 10 uygulamanıza üretim düzeyinde OCR eklemek için gereken desenlere sahipsiniz: temel metin çıkarma, zor taramalar için önleme, asenkron toplu işlem, yapılandırılmış veri ayrıştırma ve çok dilli destek.

Bu noktadan itibaren, proje ihtiyaçlarınıza göre bu alanları keşfedin:

ücretsiz deneme lisansı ile başlayarak kendi belgelerinizde tüm özellik setini değerlendirin ve bir katmana bağlı kalmadan önce deneyin.

NuGet NuGet ile yükleyin

PM >  Install-Package IronOcr

NuGet'te hızlı kurulum için https://www.nuget.org/packages/IronOcr'i kontrol edin. 10 milyonun üzerinde indirme ile, C# ile PDF geliştirmeyi dönüştürüyor. DLL veya Windows yükleyici'yi de indirebilirsiniz.

Sıkça Sorulan Sorular

.NET OCR SDK nedir?

IronOCR tarafından sunulan .NET OCR SDK, C# uygulamalarına optik karakter tanıma yetenekleri entegre etmek için tasarlanmış bir kütüphanedir ve geliştiricilerin görüntülerden, PDF'lerden ve taranmış belgelerden metin çıkarmalarına olanak tanır.

IronOCR'un .NET SDK'sinin ana özellikleri nelerdir?

IronOCR'un .NET SDK'si, basit bir API, birden çok dil desteği, platformlar arası uyumluluk ve çeşitli dosya formatları ile düşük kaliteli taramalarla başa çıkmak için gelişmiş özellikler sunar.

IronOCR farklı dilleri nasıl işler?

IronOCR'un .NET SDK'si, ek yapılandırmalar gerektirmeden çeşitli dillerdeki belgelerden metin çıkarımı ve tanıma işlemleri yapabilmenizi sağlayan çoklu dil desteğine sahiptir.

IronOCR düşük kaliteli taramaları işleyebilir mi?

Evet, IronOCR düşük kaliteli taramaları etkili bir şekilde işlemek üzere tasarlanmıştır ve zorlu durumlarda bile metin tanıma doğruluğunu artırmak için gelişmiş algoritmalar kullanır.

IronOCR'un .NET SDK'si çapraz platform özellikli mi?

IronOCR'un .NET SDK'si, farklı işletim sistemlerinde kullanılabilecek şekilde çapraz platformdur, bu da onu çeşitli geliştirme ortamları için çok yönlü kılar.

IronOCR hangi dosya formatlarını destekler?

IronOCR, görüntüler, PDF'ler ve taranmış belgeler dahil olmak üzere geniş bir dosya formatı yelpazesini destekler ve farklı ortamlardaki metin tanıma görevleri için esneklik sağlar.

Geliştiriciler, IronOCR'u projelerine nasıl entegre edebilirler?

Geliştiriciler, uygulamalarına OCR işlevi ekleme sürecini basitleştiren, yazılmış API'si ile IronOCR'u C# projelerine entegre edebilirler.

IronOCR için bazı kullanım durumları nelerdir?

IronOCR, belge yönetim sistemlerinde, otomatik veri girişi, içerik dijitalleştirme ve görüntüler veya PDF'lerden metin çıkarılması gereken herhangi bir uygulamada kullanılabilir.

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