IRONSOFTWAREHOME
VIDEOLAR

RapidOCR.NET'den IronOCR'ye geçiş yapma

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

Bu kılavuz, .NET geliştiricileri için OCR hattındaki ONNX model dosyası yönetimini ortadan kaldırması gerekenler için RapidOCR.NET (RapidOcrNet) 'ten IronOCR'a geçiş yolunun tamamını kapsar. Paket değişimini, kod çevirisini ve dış model bağımlılıkları tamamen kaldırıldığında meydana gelen operasyonel değişiklikleri adım adım açıklar.

RapidOCR.NET'ten Neden Geçiş Yapılmalı?

RapidOCR.NET çalışır — ancak sınırlı bir dizi kullanım durumu için, kontrollü ortamlarda, biri model dağıtım sorununu zaten çözdüğünde. Bu koşulların herhangi biri değiştiğinde, kütüphanenin mimari sınırlamaları mühendislik maliyetlerine dönüşür.

ONNX Model Dosyaları Bir Dağıtım Artifaktıdır, Paket Değildir. RapidOCR.NET, tek bir karakter tanınmadan önce — det.onnx, cls.onnx, rec.onnx ve bir karakter sözlüğü — olmak üzere dört harici dosya gerektirir. Bu dosyalar NuGet paketinde paketlenmemiştir. GitHub sürüm sayfalarında yaşarlar, manuel indirme gerektirirler, kodda açık yolu gerektirirler ve derleme sırasında kopyalamak için özel MSBuild kuralları gerektirirler. Her yeni geliştirici, her CI boru hattı, her dağıtım ortamı bu töreni tekrarlar.

Dil Değiştirmek Dosya Değiştirmek Demektir, Yapılandırma Değil. RapidOCR.NET'te İngilizce OCR'den Çince OCR'ye değiştirmek, farklı bir tanıma modeli ve farklı bir karakter sözlüğü indirilmesini, ardından motor örneğini yeniden inşa etmeyi gerektirir. İspanyolca, Fransızca, Almanca, Rusça, Arapça ve 100'den fazla başka dilin RapidOCR model kataloğunda hiç mevcut bile modeli yoktur. Bir dizi dil karışımı içinde belgeleri işlemeyi karşılaması gereken bir uygulama, RapidOCR.NET içinde desteklenmeyenler için uygulanabilir bir yol sahip değildir.

Model Sürüm Güncellemeleri Manuel Müdahale Gerektirir. Üst akışı RapidOCR projesi iyileştirilmiş model ağırlıkları yayınladığında, ekiplerin yeni dosyaları indirmesi, her ortamda değiştirmesi, yolları doğrulaması ve yeniden dağıtması gerekir. Bunu otomatik olarak ele alan bir paket geri yükleme adımı yoktur. Geliştirme, aşama ve üretim içeren çok ortamlı bir yapılandırmada, o yayılım her seferinde manuel bir operasyondur.

ONNX Runtime Bağımlılığı Platform Karmaşıklığını Arttırır. RapidOCR.NET, platforma özgü yerel ikili dosyalar içeren Microsoft.ML.OnnxRuntime adlı bir pakete bağımlıdır. CPU ve GPU varyantları farklı paketler gerektirir. linux/amd64 için oluşturulan bir kapsayıcı görüntüsü, linux/arm64 için oluşturulan bir görüntüden farklı ikili dosyalar gerektirir. Her dağıtım hedefinin, doğru çalışma zamanı varyantının mevcut olduğunu ve yüklenmiş model dosyalarıyla uyumlu olduğunu doğrulaması gerekir.

Soğuk Başlangıç Gecikmesi ve Bellek Ayak İzi Sabit Maliyetlerdir. Üç ONNX modeli başlangıçta yüklemek 2–5 saniye sürer ve işlem süresince bellekte 300–500 MB tutar. Bu maliyet, OCR hacminden bağımsız olarak ödenir ve kütüphaneyi sunucusuz işlevler, hafif kapsayıcılar veya başlangıç cezasının verimle orantısız olduğu düşük trafikli hizmetler için kötü bir uyum sağlar.

Hiçbir Ticari Destek Yolu Yok. RapidOCR.NET, Apache 2.0 lisansı altında tek bir topluluk geliştiricisi tarafından bakım yapılmaktadır. Üretim olayları — ONNX Çalışma Süresi sürüm çakışmaları, sıra dışı görüntü formatlarında çıkarım hataları, sürekli yük altında bellek büyümesi — yanıt tarihi ve SLA garantisi olmayan bir GitHub sorunları kuyruğuna gider.

Temel Sorun

Üç ONNX model dosyası artı bir karakter sözlüğü, ayrı ayrı indirilen, yol ile yapılandırılan:

// RapidOcrNet: 4 external files required before any OCR can execute
var engine = new RapidOcrEngine(new RapidOcrOptions
{
    DetModelPath = "./models/det.onnx",     // ~3 MB — downloaded from GitHub
    ClsModelPath = "./models/cls.onnx",     // ~1 MB — downloaded from GitHub
    RecModelPath = "./models/rec_en.onnx",  // ~2-10 MB — language-specific download
    KeysPath     = "./models/en_keys.txt"   // character dictionary — language-specific
});
C#

IronOCR'un model dosyaları yok, yol yapılandırması yok ve indirme adımı yoktur:

// IronOCR: install the NuGet package, write one line
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read("document.jpg").Text;
C#

##IronOCR ve RapidOCR.NET: Özellik Karşılaştırması

IronOCR ve RapidOCR.NET temel görüntü OCR üzerinde örtüşür. Her çevresel endişenin üzerinde bir açıklık açılır.

ÖzellikRapidOCR.NETIronOCR
NuGet yüklemeEvet (RapidOcrNet)Evet (IronOcr)
Dış model dosyaları gerekliEvet (4 dosya, manuel indirme)Hayır
Yol yapılandırması gerekliEvetHayır
MSBuild kopyalama kuralları gerekliEvetHayır
NuGet yüklemesinden hemen sonra çalışırHayırEvet
ONNX Çalışma Süresi bağımlılığıEvet (~30–50 MB)Hayır
Desteklenen diller~5 (CJK + yalnızca İngilizce)125+ NuGet dil paketleri aracılığıyla
Dil değiştirmeDosya değişimi + motor yeniden inşaÖzellik atama
Avrupa dili desteğiHayırEvet (30+)
Arapça / İbranice desteğiHayırEvet
Kiril (Rusça, Ukraynaca) desteğiHayırEvet
Yerel PDF girişiHayırEvet
Şifre ile korunan PDF girişiHayırEvet
Aranabilir PDF çıktısıHayırEvet
Çok sayfalı TIFF girişiHayırEvet
Akış ve bayt dizisi girdisiSınırlıEvet
Dahili resim ön işlemeHayırEvet (otomatik + manuel filtreler)
Eğiklik düzeltme / Gürültü Azaltma / Kontrast filtreleriHayırEvet
Yapılandırılmış çıktı (paragraflar, satırlar, kelimeler)Kısmen (yalnızca bloklar)Evet, koordinatlarla
Kelime başına güvenilirlik puanlarıEvet (blok başına)Evet
OCR sırasında barkod okumaHayırEvet
hOCR içeri aktarmaHayırEvet
Thread-safe paralel işlemeSınırlıEvet, (iş parçacığı başına bir örnek)
Çapraz platform dağıtımıHer platform için ONNX Çalışma Süresi ikili dosyaları gerektirirEvet (Windows, Linux, macOS, Docker)
Docker dağıtımıManuel model KOPYALA talimatları gerekliKutudan çıktığı gibi
Soğuk başlangıç üst yükü2–5 saniye (model yükleme)Minimal
Ticari destekHayırEvet
LisansApache 2.0 (ücretsiz)Süresiz ($999 Lite, $1,499 Pro, $2,999 Enterprise)

Hızlı Başlangıç: RapidOCR.NET'ten IronOCR'a Geçiş

Adım 1: NuGet Paketini Değiştirin

RapidOCR.NET ve ONNX Çalışma Süresi bağımlılığını kaldırın:

dotnet remove package RapidOcrNet
dotnet remove package Microsoft.ML.OnnxRuntime
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

Adım 2: Ad Alanlarını Güncelleyin

RapidOCR.NET ad alanınıIronOCR ad alanı ile değiştirin:

// Before (RapidOCR.NET)
using RapidOcrNet;

// After (IronOCR)
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

Herhangi bir IronTesseract çağrısından önce, uygulama başlatılırken lisans başlatmasını ekleyin:

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

Ücretsiz bir deneme anahtarı IronOCR lisanslama sayfasından mevcuttur.

Kod Göç Örnekleri

ONNX Model Yol Yapılandırması Kaldırılması

Bu geçişteki en mekanik değişiklik, RapidOcrOptions yapılandırma bloğunu silmek ve bunun yerine sıfır argümanlı bir yapılandırıcı ile değiştirmektir.

RapidOCR.NET Yaklaşımı:

using RapidOcrNet;

// Startup validation — written because a missing model crashes at runtime, not at install
private static void EnsureModelsPresent(string modelDir)
{
    var required = new[]
    {
        Path.Combine(modelDir, "det.onnx"),
        Path.Combine(modelDir, "cls.onnx"),
        Path.Combine(modelDir, "rec_en.onnx"),
        Path.Combine(modelDir, "en_keys.txt")
    };

    var missing = required.Where(f => !File.Exists(f)).ToList();
    if (missing.Any())
        throw new FileNotFoundException(
            $"Missing model files: {string.Join(", ", missing)}\n" +
            "Download from: https://github.com/RapidAI/RapidOCR/releases");
}

// Engine factory — called once at startup, held for lifetime of service
public RapidOcrEngine CreateEngine(string modelDir)
{
    EnsureModelsPresent(modelDir);
    return new RapidOcrEngine(new RapidOcrOptions
    {
        DetModelPath = Path.Combine(modelDir, "det.onnx"),
        ClsModelPath = Path.Combine(modelDir, "cls.onnx"),
        RecModelPath = Path.Combine(modelDir, "rec_en.onnx"),
        KeysPath     = Path.Combine(modelDir, "en_keys.txt"),
        UseGpu       = false,
        NumThreads   = Environment.ProcessorCount
    });
}
C#

IronOCR Yaklaşımı:

using IronOcr;

//Hayırmodel validation, no path configuration, no GPU flags
// IronTesseract is thread-safe; create one per thread or on demand
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
C#

Tüm EnsureModelsPresent doğrulama yöntemi, RapidOcrOptions yapılandırma nesnesi ve motor fabrika sınıfı silinebilir. İronOCR, motorunu bir NuGet paketi olarak dahili olarak gönderdiği için model dosyalarının doğrulanması gerekmez. IronTesseract kurulum rehberi, başlatma seçeneklerini ve lisans anahtarı yerleşimini detaylı olarak kapsar.

Tanıma, Sınıflandırma ve Tanıma Boru Hattının Konsolidasyonu

RapidOCR.NET, algılama, yön sınıflandırması ve ardından tanıma olmak üzere üç aşamalı bir ONNX boru hattı çalıştırır ve çağıranın sıralayıp monte etmesi gereken sırasız düz bir metin blokları listesi döndürür. IronOCR, iç Tesseract 5 motoru tarafından desteklenen tek bir .Read() çağrısını açığa çıkarır ve okuma sırası zaten uygulanmış olarak yapılandırılmış çıktı döndürür.

RapidOCR.NET Yaklaşımı:

using RapidOcrNet;

public class InvoiceTextExtractor
{
    private readonly RapidOcrEngine _engine;

    public InvoiceTextExtractor(string modelDir)
    {
        // Three separate ONNX models run in sequence on every call
        _engine = new RapidOcrEngine(new RapidOcrOptions
        {
            DetModelPath = Path.Combine(modelDir, "det.onnx"),   // Stage 1: detect text regions
            ClsModelPath = Path.Combine(modelDir, "cls.onnx"),   // Stage 2: classify direction
            RecModelPath = Path.Combine(modelDir, "rec_en.onnx"),// Stage 3: recognize characters
            KeysPath     = Path.Combine(modelDir, "en_keys.txt")
        });
    }

    public string ExtractInvoiceText(string imagePath)
    {
        var result = _engine.Run(imagePath);

        // Blocks are unordered — must sort by vertical position, then horizontal
        var orderedBlocks = result.TextBlocks
            .OrderBy(b => b.BoundingBox.Top)
            .ThenBy(b => b.BoundingBox.Left)
            .ToList();

        // Manual assembly — no paragraph or line structure
        return string.Join(Environment.NewLine,
            orderedBlocks.Select(b => b.Text));
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

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

    public string ExtractInvoiceText(string imagePath)
    {
        // Single call — detection, recognition, reading order all internal
        var result = _ocr.Read(imagePath);
        return result.Text; // Already in reading order
    }

    public IEnumerable<string> ExtractInvoiceParagraphs(string imagePath)
    {
        var result = _ocr.Read(imagePath);
        // Structured paragraphs with coordinates — no sorting or assembly needed
        foreach (var page in result.Pages)
            foreach (var paragraph in page.Paragraphs)
                yield return paragraph.Text;
    }
}
C#

Üç aşamalı boru hattı, IronOCR'a tamamen dahildir. Manuel OrderBy zinciriyle birlikte result.TextBlocks listesi result.Text ile çakışır. TextBlocks 'den sınır kutusu verisi almak isteyen çağrılar için, result.Pages[i].Paragraphs, .Lines ve .Words koleksiyonları, yapılandırılmış bir API aracılığıyla eşdeğer koordinatlar sağlar. sonuçları okuma kılavuzu ve OCR sonuçları özellikleri sayfası tam yapılandırılmış çıktı modelini belgeler.

Özel Model Yükleme Değiştirme

Çalışma anında farklı OCR yapılandırmalarına geçmek isteyen uygulamalar — örneğin, belgenin türüne göre farklı tanıma parametreleri ile belgeleri yönlendiren — RapidOCR.NET'de tüm RapidOcrEngine inşa etmek zorundadır çünkü yapılandırma yapıcıya bağlanmıştır. IronOCR, motor yapılandırmasını bir örnek üzerinde, okuyuş başına ayarlanabilecek özellikler olarak sunar.

RapidOCR.NET Yaklaşımı:

using RapidOcrNet;

public class DocumentRouter
{
    private readonly string _modelDir;

    public DocumentRouter(string modelDir) => _modelDir = modelDir;

    // Must create separate engine instances per configuration
    // Each engine holds ~300-500 MB of loaded model weights
    private RapidOcrEngine BuildEnglishEngine() =>
        new RapidOcrEngine(new RapidOcrOptions
        {
            DetModelPath = Path.Combine(_modelDir, "det.onnx"),
            ClsModelPath = Path.Combine(_modelDir, "cls.onnx"),
            RecModelPath = Path.Combine(_modelDir, "en_rec.onnx"),
            KeysPath     = Path.Combine(_modelDir, "en_keys.txt")
        });

    private RapidOcrEngine BuildChineseEngine() =>
        new RapidOcrEngine(new RapidOcrOptions
        {
            DetModelPath = Path.Combine(_modelDir, "det.onnx"),
            ClsModelPath = Path.Combine(_modelDir, "cls.onnx"),
            RecModelPath = Path.Combine(_modelDir, "ch_rec.onnx"),  // separate download
            KeysPath     = Path.Combine(_modelDir, "ch_keys.txt")   // separate download
        });

    public string ProcessDocument(string imagePath, string language)
    {
        // Rebuild engine for each language — model reload cost on every switch
        using var engine = language == "chinese"
            ? BuildChineseEngine()
            : BuildEnglishEngine();

        var result = engine.Run(imagePath);
        return string.Join("\n", result.TextBlocks
            .OrderBy(b => b.BoundingBox.Top)
            .Select(b => b.Text));
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class DocumentRouter
{
    // One instance handles all languages — language is a property, not a constructor param
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ProcessDocument(string imagePath, string language)
    {
        // Language switch requires no model reload, no rebuild
        _ocr.Language = language switch
        {
            "chinese"  => OcrLanguage.ChineseSimplified,
            "japanese" => OcrLanguage.Japanese,
            "arabic"   => OcrLanguage.Arabic,
            "russian"  => OcrLanguage.Russian,
            _          => OcrLanguage.English
        };

        return _ocr.Read(imagePath).Text;
    }
}
C#

Motor yeniden inşası, model tekrar yüklemesi, dil başına ayrı indirme yok. İngilizce olmayan hedefler için dil paketleri NuGet — dotnet add package IronOcr.Languages.ChineseSimplified — aracılığıyla yüklenir ve geri yükleme adımı dağıtımı otomatik olarak gerçekleştirir. birden çok dil nasıl yapılır kılavuzu, dil paketi yüklemelerini ve diller dizini, 125'ten fazla mevcudu listeler.

Toplu İşleme Geçişi

RapidOCR.NET, tek bir RapidOcrEngine örneği üzerinde hiçbir iş parçacığı güvenliği garantisi vermez. Toplu işleme, ya tek iş parçacıklı bir sıra ya da kendi 300–500 MB model ayak izi taşıyan iş parçacığı başına motor oluşturumu gerektirir.IronOCR açıkça iş parçacığı güvenlidir: her iş parçacığı için bir IronTesseract oluşturun ve bu işlemleri kilitlemeden eşzamanlı olarak çalıştırın.

RapidOCR.NET Yaklaşımı:

using RapidOcrNet;

public class BatchOcrProcessor
{
    private readonly string _modelDir;

    public BatchOcrProcessor(string modelDir) => _modelDir = modelDir;

    // Thread-pool processing — each thread needs its own engine copy
    // 4 threads × 300-500 MB model footprint = 1.2-2 GB RAM minimum
    public Dictionary<string, string> ProcessBatch(IReadOnlyList<string> imagePaths)
    {
        var results = new System.Collections.Concurrent.ConcurrentDictionary<string, string>();

        Parallel.ForEach(imagePaths, new ParallelOptions { MaxDegreeOfParallelism = 4 },
            imagePath =>
            {
                // Each thread must create its own engine — not safe to share
                using var engine = new RapidOcrEngine(new RapidOcrOptions
                {
                    DetModelPath = Path.Combine(_modelDir, "det.onnx"),
                    ClsModelPath = Path.Combine(_modelDir, "cls.onnx"),
                    RecModelPath = Path.Combine(_modelDir, "rec_en.onnx"),
                    KeysPath     = Path.Combine(_modelDir, "en_keys.txt")
                });

                var result = engine.Run(imagePath);
                results[imagePath] = string.Join("\n",
                    result.TextBlocks
                          .OrderBy(b => b.BoundingBox.Top)
                          .Select(b => b.Text));
            });

        return new Dictionary<string, string>(results);
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public class BatchOcrProcessor
{
    // Thread-safe: create IronTesseract per thread, no shared state required
    public Dictionary<string, string> ProcessBatch(IReadOnlyList<string> imagePaths)
    {
        var results = new System.Collections.Concurrent.ConcurrentDictionary<string, string>();

        Parallel.ForEach(imagePaths, imagePath =>
        {
            // Lightweight construction — no model loading overhead per thread
            var ocr = new IronTesseract();
            var result = ocr.Read(imagePath);
            results[imagePath] = result.Text;
        });

        return new Dictionary<string, string>(results);
    }
}
C#

İş parçacığı başına RapidOcrEngine örnekleme kaybolur.IronOCR iş parçacığı örnekleri hafiftir — oluşturma sırasında dış model yüklemesi yok. çok iş parçacığı örneği, yüksek geçiş hatları için eşzamanlı işleme desenlerini gözler önüne serer.

Çoklu Çerçeve TIFF İşleme

RapidOCR.NET sadece tek bir görüntü dosyası kabul eder. Çok sayfalı bir TIFF işlemek — faksla alınan belgeler ve taranan arşivler için standart format — ayrı bir görüntüleme kütüphanesi ile bireysel karelere bölünmesini, bu karelerin geçici dosyalara kaydedilmesini, her birine engine.Run() çalıştırılmasını ve sonrasında temizlenmesini gerektirir. IronOCR, OcrInput.LoadImageFrames aracılığıyla çok kareli TIFF'i yerel olarak işler.

RapidOCR.NET Yaklaşımı:

using RapidOcrNet;
// Also requires: SixLabors.ImageSharp or System.Drawing for TIFF frame extraction

public class TiffOcrProcessor
{
    private readonly RapidOcrEngine _engine;

    public TiffOcrProcessor(string modelDir)
    {
        _engine = new RapidOcrEngine(new RapidOcrOptions
        {
            DetModelPath = Path.Combine(modelDir, "det.onnx"),
            ClsModelPath = Path.Combine(modelDir, "cls.onnx"),
            RecModelPath = Path.Combine(modelDir, "rec_en.onnx"),
            KeysPath     = Path.Combine(modelDir, "en_keys.txt")
        });
    }

    public string ProcessMultiPageTiff(string tiffPath)
    {
        var pageTexts = new List<string>();
        var tempDir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
        Directory.CreateDirectory(tempDir);

        try
        {
            // External library required to split TIFF frames
            var framePaths = SplitTiffIntoFrames(tiffPath, tempDir); // not in RapidOcrNet

            foreach (var framePath in framePaths)
            {
                var result = _engine.Run(framePath);
                pageTexts.Add(string.Join("\n",
                    result.TextBlocks
                          .OrderBy(b => b.BoundingBox.Top)
                          .Select(b => b.Text)));
            }
        }
        finally
        {
            // Clean up temp frame files
            Directory.Delete(tempDir, recursive: true);
        }

        return string.Join("\n\n", pageTexts);
    }

    private IEnumerable<string> SplitTiffIntoFrames(string tiffPath, string outputDir)
    {
        // Requires external library — implementation depends on what is installed
        throw new NotImplementedException("Add SixLabors.ImageSharp or similar");
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

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

    public string ProcessMultiPageTiff(string tiffPath)
    {
        using var input = new OcrInput();
        input.LoadImageFrames(tiffPath); // All frames loaded — no external library needed

        var result = _ocr.Read(input);
        return result.Text; // Pages assembled in order automatically
    }

    public IEnumerable<(int PageNumber, string Text, double Confidence)> ProcessTiffWithPageData(string tiffPath)
    {
        using var input = new OcrInput();
        input.LoadImageFrames(tiffPath);

        var result = _ocr.Read(input);

        foreach (var page in result.Pages)
            yield return (page.PageNumber, page.Text, page.Confidence);
    }
}
C#

Dış görüntü işleme kütüphanesi yok, geçici dosyalar yok, temizleme mantığı yok. LoadImageFrames tüm TIFF karelerini bir OcrInput hattına tek bir çağrıda okur. Kare seçimi, sayfa aralığı filtreleme ve büyük çok çerçeveli belgelerin bellek verimli işleme için TIFF ve GIF girdi nasıl yapılır kılavuzunu içermektedir.

Taralı Formlardan Yapılandırılmış Veri Çıkarımı

RapidOCR.NET, daha üst seviye belge yapısı olmadan — paragraflar, satırlar veya kelimeler kavramı olmadan — sınır kutusu ile metin bloklarını döndürür. Taralı formdan bireysel alanları çıkarmak, ham blok listesine karşı koordinat kesişim mantığı yazmayı gerektirir. IronOCR, karakter seviyesine kadar yapılandırılmış bir sonuç ağacı sağlar ve her seviyede koordinatlar içerir.

RapidOCR.NET Yaklaşımı:

using RapidOcrNet;

public class FormFieldExtractor
{
    private readonly RapidOcrEngine _engine;

    public FormFieldExtractor(string modelDir)
    {
        _engine = new RapidOcrEngine(new RapidOcrOptions
        {
            DetModelPath = Path.Combine(modelDir, "det.onnx"),
            ClsModelPath = Path.Combine(modelDir, "cls.onnx"),
            RecModelPath = Path.Combine(modelDir, "rec_en.onnx"),
            KeysPath     = Path.Combine(modelDir, "en_keys.txt")
        });
    }

    // Extract text within a defined region by filtering block coordinates manually
    public string ExtractFieldByRegion(string imagePath, float regionLeft, float regionTop,
                                        float regionRight, float regionBottom)
    {
        var result = _engine.Run(imagePath);

        // Filter blocks whose bounding box intersects the target region
        var blocksInRegion = result.TextBlocks
            .Where(b =>
                b.BoundingBox.Left   < regionRight  &&
                b.BoundingBox.Right  > regionLeft   &&
                b.BoundingBox.Top    < regionBottom &&
                b.BoundingBox.Bottom > regionTop)
            .OrderBy(b => b.BoundingBox.Top)
            .ThenBy(b => b.BoundingBox.Left);

        return string.Join(" ", blocksInRegion.Select(b => b.Text));
    }
}
C#

IronOCR Yaklaşımı:

using IronOcr;

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

    // Use CropRectangle to OCR only the target region — no post-filter needed
    public string ExtractFieldByRegion(string imagePath, int x, int y, int width, int height)
    {
        var region = new CropRectangle(x, y, width, height);

        using var input = new OcrInput();
        input.LoadImage(imagePath, region);

        return _ocr.Read(input).Text;
    }

    // Extract all fields with their coordinates from a full-page scan
    public IEnumerable<(string Text, int X, int Y, double Confidence)> ExtractAllWords(string imagePath)
    {
        var result = _ocr.Read(imagePath);

        foreach (var page in result.Pages)
            foreach (var word in page.Words)
                yield return (word.Text, word.X, word.Y, word.Confidence);
    }
}
C#

CropRectangle OCR'yi kesin ilgi alanına hapseder, bu tam sayfa OCR çalıştırıp sonuçları daha sonra filtrelemekten daha hızlı ve daha doğrudur. Kelime başına koordinatlar ve güven değerleri, herhangi bir manuel sınır kutusu kesişme kodu olmadan doğrudan result.Pages[i].Words üzerinde mevcuttur. bölgeli tabanlı OCR nasıl yapılır ve dikdörtgen kırpma örneği bu deseni detaylı olarak kapsar.

RapidOCR.NET API ile IronOCR Eşleme Referansı

RapidOCR.NETIronOCR Karşılığı
using RapidOcrNetusing IronOcr
new RapidOcrEngine(new RapidOcrOptions { ... })new IronTesseract()
RapidOcrOptions.DetModelPathGerekli değil — dahili olarak paketlenmiş
RapidOcrOptions.ClsModelPathGerekli değil — dahili olarak paketlenmiş
RapidOcrOptions.RecModelPathGerekli değil — dahili olarak paketlenmiş
RapidOcrOptions.KeysPathGerekli değil — dahili olarak paketlenmiş
RapidOcrOptions.UseGpuUygulanamaz — Dahili olarak CPU-optimizasyonu yapılmış
RapidOcrOptions.NumThreadsBir iş parçacığı başına bir IronTesseract ile Parallel.ForEach kullanın
engine.Run(imagePath)ocr.Read(imagePath)
engine.Dispose()using var ocr = new IronTesseract()
result.TextBlocksresult.Pages[i].Words / .Lines / .Paragraphs
result.TextBlocks[i].Textresult.Words[i].Text
result.TextBlocks[i].Confidenceresult.Words[i].Confidence
result.TextBlocks[i].BoundingBox.Topresult.Words[i].Y
result.TextBlocks[i].BoundingBox.Leftresult.Words[i].X
Manuel OrderBy(b => b.BoundingBox.Top) sıralamaGerekli değil — result.Text okuma sırasındadır
string.Join("\n", result.TextBlocks.Select(b => b.Text))result.Text
Dil dosyası değişimi (farklı model indirin)ocr.Language = OcrLanguage.French
Dil değişikliği için motorun yeniden derlenmesiGerekli değil — her çağrıda ocr.Language ayarlayın
PDF'ten görüntüye + engine.Run() döngüsüocr.Read("document.pdf")
Çok çerçeveli TIFF manuel çerçeve ayırmainput.LoadImageFrames("document.tiff")
Aranabilir PDF yeteneği yokresult.SaveAsSearchablePdf("output.pdf")
Barkod yeteneği yokocr.Configuration.ReadBarCodes = true

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: Modeller Dizini Taşındıktan Sonra Hâlâ Mevcut

RapidOCR.NET: Projede models/ dizini, derlemede kopyalanan MSBuild <Content> girdileriyle birlikte det.onnx, cls.onnx, rec_en.onnx ve en_keys.txt içerir. IronOCR'a geçtikten sonra, bu dizin ve bu girişler kalır ve hala derleme çıktısını şişirir.

Çözüm: models/ dizinini silin, karşılık gelen <ItemGroup> .csproj 'dan kaldırın ve eksik dosyaları kontrol eden herhangi bir başlangıç doğrulama mantığını kaldırın. Microsoft.ML.OnnxRuntime NuGet referansını ayrı olarak yüklendiyse ayrıca kaldırın.IronOCR kullanan bir .NET uygulamasının yayımlanmış çıktısı herhangi bir harici model dosyası içermez.

<!-- Remove this entire block from .csproj -->
<ItemGroup>
  <Content Include="models\**\*.*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>
XML

Sorun 2: İş Parçacığı Başına Motor Yapım Deseni

RapidOCR.NET: Paylaşılan durum sorunlarını önlemek için her iş parçacığına yeni bir RapidOcrEngine oluşturan paralel işleme kodu, önemli bir bellek maliyeti taşıdı: her motor örneği bağımsız olarak 300–500 MB ONNX model ağırlığı yükledi.

**Çözüm:**IronOCRIronTesseract örnekleri iş parçacığı güvenlidir ve hafiftir. Her iş parçacığına bir Parallel.ForEach 'de oluşturun ve bir örnek başına model yükleme maliyeti hakkında endişelenmeden oluşturun.IronOCR yaklaşımı yukarıdaki Yığın İşleme Geçiş örneği ile aynıdır — IronTesseract bu senaryoyu, aynı iş parçacığı başına yapı örneği deseni ile işler, ancak her bir RapidOcrEngine örneğinin taşıdığı 300–500 MB model yükleme maliyeti olmadan. Çoklu iş parçacığı örneği yüksek verim hattı için standart deseni gösterir.

Sorun 3: Desteklenmeyen Dil İstisnası

RapidOCR.NET: RapidOCR.NET üzerinden CJK olmayan belgeleri yönlendiren veya var olmayan bir İspanyolca/Fransızca/Almanca modeli ile bir motor oluşturmayı deneyen kod, çalışma zamanında bir dosya bulunamadı hatası verebilir veya boş sonuçlar üretebilir.

Çözüm: Uygun dil paketi NuGet paketini yükleyin ve ocr.Language 'ı hedef OcrLanguage öbek değeri olarak ayarlayın. Hiçbir model indirmesi, motor yeniden derlenmesi, her dil için ek kod yolu yoktur:

dotnet add package IronOcr.Languages.Spanish, IronOcr.Languages.French, IronOcr.Languages.Arabic

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.Spanish;
var result = ocr.Read("spanish-document.jpg");
C#

özel dil paketleri kılavuzu standart 125+ paketin ötesinde gelişmiş dil yapılandırmasını kapsamaktadır.

Sorun 4: Metin Bloğu Sıralama Mantığı Taşındıktan Sonra Kopuyor

RapidOCR.NET: result.TextBlocks düz ve sırasız bir liste olduğu için, genellikle kod temelleri arasında, sonuç işleme kodu boyunca yayılmış .OrderBy(b => b.BoundingBox.Top).ThenBy(b => b.BoundingBox.Left) zincirleri vardı.

Çözüm: Bu sıralama mantığını tamamen silin. IronOCR'deki result.Text zaten doğal okuma sırasına göre dizilmiş durumda. Sıralanmış bloklardan da sınır kutusu koordinatlarını tüketen kodlar için, blok referansını result.Pages[i].Words[j] ile değiştirin:

// Before: manual sort + coordinate extraction
var sorted = result.TextBlocks
    .OrderBy(b => b.BoundingBox.Top)
    .ThenBy(b => b.BoundingBox.Left);

foreach (var block in sorted)
    Console.WriteLine($"{block.Text} at ({block.BoundingBox.Left}, {block.BoundingBox.Top})");

// After: structured access, already in order
foreach (var page in result.Pages)
    foreach (var word in page.Words)
        Console.WriteLine($"{word.Text} at ({word.X}, {word.Y})");
C#

Sorun 5: Model Dosyaları Kaldırıldıktan Sonra CI/CD Hattı Başarısız Oluyor

RapidOCR.NET: Ayrı bir adım olarak bir artifakt depodan, paylaşılan bir S3 kovasından veya bir Git LFS deposundan models/ dizinini önbelleğe alan veya getiren yapı hatları, bu adımlar göçten sonra hiçbir şeyi geri yükleyemediklerinde başarısız olacaktır.

Çözüm: Model dosya getirme ve önbelleğe alma adımlarını CI hattından tamamen kaldırın. IronOCR'un motoru, standart dotnet restore adımının bir parçası olarak geri yüklenir. Ekstra bir hat safhası gerekmez. Kapsayıcılaştırılmış dağıtımlar için, herhangi bir COPY models/ ./models/ Docker talimatını kaldırın — IronOCR'nin Docker dağıtım kılavuzu, Debian/Ubuntu görüntülerinde gereken bir sistem paketini (libgdiplus) ve başka hiçbir şeyi belgelememektedir.

Sorun 6: Kısmi Taşınma Sonrası ONNX Çalışma Zamanı Sürüm Çatışmaları

RapidOCR.NET: Başka ONNX tabanlı ML paketleri (ML.NET, ONNX nesne tanıma, vb.) kullanan uygulamalar, RapidOCR.NET uyumu için belirli bir sürüme sabitlenmiş Microsoft.ML.OnnxRuntime değerine sahip olabilir. RapidOCR.NET'in kaldırılması, bu diğer paketlerde sürüm çatışmalarını ortaya çıkarabilir.

Çözüm: Microsoft.ML.OnnxRuntime 'yi açık paket listesinden kaldırın. IronOCR'un ONNX Runtime bağımlılığı olmadığı için RapidOCR.NET referansının kaldırılması tamamen sürüm sabitlemesini ortadan kaldırır. ONNX Çalışma Zamanına gerçekten ihtiyaç duyan diğer ML paketleri, RapidOCR.NET kısıtlaması olmadan kendi uyumlu sürümlerini standart NuGet bağımlılık çözümü ile çözebilirler.

RapidOCR.NET Taşınma Kontrol Listesi

Geçiş Öncesi Görevler

Değişiklik yapmadan önce tüm RapidOCR.NET kullanımını kod tabanında denetleyin:

# Find all files that reference RapidOcrNet
grep -r "RapidOcrNet\|RapidOcrEngine\|RapidOcrOptions" --include="*.cs" .

# Find model path configuration
grep -r "DetModelPath\|ClsModelPath\|RecModelPath\|KeysPath" --include="*.cs" .

# Find MSBuild model copy entries
grep -r "det\.onnx\|cls\.onnx\|rec.*\.onnx\|keys\.txt" --include="*.csproj" .

# Find model validation logic
grep -r "ValidateModel\|models/" --include="*.cs" .

# Find ONNX Runtime references
grep -r "OnnxRuntime\|Microsoft\.ML" --include="*.csproj" .

# Find language-switching patterns (multiple engine instances per language)
grep -r "CreateEnglishEngine\|CreateChineseEngine\|rec_en\|ch_rec\|en_keys\|ch_keys" --include="*.cs" .
SHELL

Sonuçları envanterleyin: bir motorun oluşturulduğu her yeri, model yollarının ayarlandığı her yeri, metin bloklarının sıralandığı her yeri ve PDF'ten görüntü dönüşümünün engine.Run() 'ye beslendiği her yeri not edin.

Kod Güncelleme Görevleri

  1. RapidOcrNet NuGet paket referansını tüm .csproj dosyalarından kaldırın.
  2. Microsoft.ML.OnnxRuntime NuGet paket referansını tüm .csproj dosyalarından kaldırın.
  3. IronOcr NuGet paketini kurun.
  4. Uygulamanın ihtiyaç duyduğu herhangi bir İngilizce olmayan dil için dil paketi NuGet paketlerini yükleyin.
  5. models/ dizinini projeden ve depodan silin.
  6. Tüm .csproj dosyalarından <Content Include="models\**\*.*"> MSBuild girdilerini kaldırın.
  7. Başlangıç model doğrulama yöntemlerini (EnsureModelsPresent tarzı yöntemler) kaldırın.
  8. Tüm kaynak dosyalarında using RapidOcrNetusing IronOcr ile değiştirin. 9.new RapidOcrEngine(new RapidOcrOptions { ... })with new IronTesseract()).
  9. engine.Run(imagePath) 'yu ocr.Read(imagePath) ile değiştirin.
  10. result.TextBlocks montaj zincirlerini (.OrderBy().Select(b => b.Text)) result.Text ile değiştirin.
  11. Koordinat filtreli alan çıkarımı, CropRectangle bölge girişi ile değiştirin.
  12. İş parçacığı başına motor yapımını, iş parçacığı başına IronTesseract yapımı ile değiştirin.
  13. Dil belirli motor fabrika yöntemlerini ocr.Language = OcrLanguage.X atamaları ile değiştirin.
  14. PDF'ten görüntüye dönüşüm kodunu kaldırın ve doğrudan ocr.Read("file.pdf") çağrılarıyla değiştirin.
  15. Çok kareli TIFF çerçeve bölme kodunu kaldırın ve input.LoadImageFrames("file.tiff") ile değiştirin.
  16. Uygulama başlangıcında IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" ekleyin.
  17. CI/CD boru hattı tanımlarından model dosya getir ve önbellek adımlarını kaldırın.
  18. Docker dosyalarından ONNX model COPY talimatlarını kaldırın.

Geçiş Sonrası Testler

  • Var olan görüntü OCR yollarının, RapidOCR.NET çıktısına eşit veya daha iyi doğrulukla metin döndürdüğünü doğrulayın.
  • result.Text okuma sırasının her belge türü için beklenen alan sırasıyla eşleştiğini doğrulayın.
  • Uygulamanın kullandığı her OcrLanguage değeri için dil değiştirme okuma testleri yapın.
  • Paralel toplu işlemciyi çalıştırın ve hiçbir iş parçacığı çekişme hata ya da eski-sonuç sorunlarının olmadığını onaylayın.
  • Çok çerçeveli TIFF işleminin, sayfaların doğru sayısını doğru her sayfa metni ile döndürdüğünü doğrulayın.
  • Beklenen koordinat alanlarına karşı CropRectangle yolu ile form alan çıkarımı testi yapın.
  • models/ dizininin derleme çıktısı ve dağıtım paketlerinde bulunmadığını doğrulayın.
  • CI hattını baştan sona çalıştırın ve hiçbir model getirme adımının kalmadığını onaylayın.
  • Bir Docker kapsayıcısı oluşturup çalıştırın ve başlangıçta COPY models/ katmanı veya dosya bulunamadı hatalarına rastlanmadığını doğrulayın.
  • Soğuk başlangıç gecikmesinin azaldığını doğrulamak için bir başlangıç süresi ölçümü test edin.

IronOCR'a Geçişin Ana Faydaları

Dağıtım Artık Deterministiktir. dotnet restore ve dotnet publish, hiçbir harici dosya bağımlılığı olmadan eksiksiz ve çalışan bir OCR dağıtımı üretir. Paket sürümünü yükleyen aynı NuGet geri yükleme, motorun çalışması için gereken her şeyi yükler. Ayrı bir sürümleme yapılan model dosyası, yapı önbellek adımları veya dağıtım doğrulama komut dosyaları yoktur. Boru hattı, herhangi bir diğer .NET paket bağımlılığı kadar basittir.

Dil Kapsamı İş Gereksinimleriyle Ölçeklendiğinde. Yeni bir belge dili desteği eklemek, dotnet add package IronOcr.Languages.X çalıştırmak ve ocr.Language ayarlamak anlamına gelir. Yukarı akış model mevcudiyet kontrolü, model indirmesi ve motor yeniden düzenlemesi yoktur. İngilizce OCR ile başlayan ve daha sonra Alman sözleşmeleri, Arapça faturalar veya Rusça satın alma siparişleri işlemek zorunda olan ekipler, uygulama mimarisine dokunmadan kapsamı genişletebilir. Tüm 125+ dil paketleri aynı kurulum desenini izler.

Yapılandırılmış Çıktı, Koordinat Montaj Kodunu Ortadan Kaldırır. result.Pages, .Paragraphs, .Lines, .Words ve .Characters hiyerarşisi, düz TextBlocks listesinin ve yapısal eksikliğini aşmak için çalışan sıralama mantığının yerini alır. Blok koordinatlarını sıralayarak okuma sırası metni çıkaran kod silinir. Kelime başına sınır kutularına ihtiyaç duyan kod, word.X, word.Y, word.Width, word.Height 'den elde eder ve herhangi bir kesişim filtresi gerekmez. OCR sonuçları özellikler sayfası tam çıkış modelini belgelendirir.

PDF ve TIFF İşleme, Harici Kütüphane Gerektirmez. Tek görüntü JPGler dışında en yaygın iki belge formatı — çok sayfalı PDF'ler ve çok çerçeveli TIFF'ler —IronOCR tarafından yerel olarak ele alınır. PDF veya TIFF girdisiyle desteklemek için eklenen tüm dış kütüphaneler kaldırılabilir. Net sonuç: güncellenmesi gereken daha az paket, daha az sürüm uyumluluk yüzeyi ve daha basit proje dosyaları. PDF girişi nasıl yapılır ve TIFF girişi nasıl yapılır her iki formatı da ayrıntılı bir şekilde kapsamaktadır.

Üretim Olayları İçin Bir Destek Yolu Var. Ticari lisanslar, GitHub sorun yanıtını bekleyemeyecek sorunlar için bir iletişim noktası ile doğrudan e-posta desteği içerir. SLA yükümlülükleri veya iş açısından kritik belge işleme boru hatları olan ekipler, topluluk yanıtını beklemeden kütüphaneyi sürdüren mühendislere olayları yönlendirebilir. IronOCR dokümantasyon merkezi bu destek yolunun yanı sıra referans dokümantasyonu sağlar.

$999 Süresiz Lisans Tek Seferlik Bir Maliyettir. Sayfa başına fiyatlandırma, işlem başına faturalandırma yoktur ve maliyet görüşmesini yeniden açan yıllık yenileme yoktur. Model yönetimi, PDF dönüştürme çözümleri, CI boru hattı bakımı ve desteklenmeyen dil yönlendirmeleri üzerinde harcanan mühendislik saatlerini fiyatlandıran geliştirme ekipleri, lisans maliyetine karşı karşılaştırmada sürekli olarak lehte bulurlar.

Lütfen dikkate alın: RapidOCR ve Tesseract, kendi sahiplerinin tescilli ticari markalarıdır. Bu site, Google veya RapidOCR ile ilişkilendirilmemiştir, desteklenmemektedir veya sponsorlanmamaktadır. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez