IRONSOFTWAREHOME
VIDEOLAR

Tesseract'tan IronOCR'ye Geçiş

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

Bu kılavuz, charlesw Tesseract NuGet paketinden IronOCR'ye doğrudan bir geçiş yolu sağlar. Tessdata klasör yönetimini ortadan kaldırmak için gereken özel adımları, TesseractEngine ve Pix başlatma kalıplarını değiştirmeyi, yerleşik bir ön işleme hattı eklemeyi ve yerel PDF desteğini açmayı kapsar — bu kütüphane için karşılaştırma makalesinde zaten incelenmiş olan materyali tekrarlamadan.

Tesseract'tan Neden Geçiş?

Charlesw Tesseract paketi, gerçek OCR yeteneğini ortaya koyar ve 8 milyon NuGet indirilmesi bunu kanıtlar. Sürtünme motorda değil — üretim kalitesinde çıktı gönderebilmeniz için motor etrafında inşa etmeniz gereken altyapıdadır. Çoğu geçiş kararını yönlendiren dört özel acı noktası var.

Tessdata klasörü yönetimi her ortamda karışık hale gelir. Tek bir kelime bile tanınmadan önce, tessdata yolu mevcut olmalı, uygulamanızın ihtiyaç duyduğu her dil için doğru .traineddata dosyalarıyla doldurulmalı ve TesseractEngine'ye iletilen yolda tam olarak erişilebilir olmalıdır. Bu, geliştirme makineleri, CI yapıları, sahne sunucuları, üretim ana bilgisayarları ve Docker kapları için ayrı klasör kurulumları anlamına gelir. Eksik bir dosya çalışma zamanında, dağıtımdan sonra TesseractException: Failed to initialise tesseract engine hata mesajı verir — hangi dosyanın eksik olduğunu her zaman belirtmeyen bir mesaj. Her yeni ortam, bu hatanın meydana gelmesi için bir başka fırsattır.

Tesseract 4.1.1 yolun sonu. Charlesw kılıfı, 2019'da yayınlanan Tesseract 4.1.1'e sabitlenmiştir. Tesseract 5.x, bazı belge türlerinde ölçülebilir şekilde daha iyi doğruluk üreten LSTM model geliştirmeleri tanıttı. Bu paket aracılığıyla o sürüm mevcut değil ve kılıfın bakım hızı 2021'den bu yana önemli ölçüde yavaşladı. Güncel Tesseract sürümleriyle uyumlu doğruluğa önem veren takımlar, Charlesw kılıfı aracılığıyla herhangi bir yükseltme yolu yok.

Ön işleme olmaması, gerçek dünya belgelerinde güvenilirlik sağlamaz. Tesseract, temiz, yüksek çözünürlüklü, düzgün yönlendirilmiş giriş bekler. Eğrilik, gürültü, düşük DPI veya renkli arka planlar için yerleşik bir düzeltme uygulamaz. Ön işleme hattının el ile oluşturulması — gri tonlama dönüştürme, kontrast arttırma, binarizasyon, median gürültü filtreleme, makara düzeltim — yaklaşık 180 satır kod ile System.Drawing.Common (sadece Windows) kullanarak çalışır veya uygun bir Hough-dönüşümlü makara düzeltim için OpenCvSharp4 çekilmesini gerektirir. Bu boru hattı, yeni belge kaynakları kenar durumlarını tanıttıkça bakım yapılmalıdır.

PDF, ikinci bir bağımlılık zinciri gerektirir. Sözleşmeler, faturalar, banka ekstreleri ve uyumluluk belgeleri PDF olarak gelir. Tesseract bir PDF'yi açamaz. Boşluğu köprülemek için ayrı bir PDF işleme kütüphanesi gerektirir - PdfiumViewer, PDFtoImage veya Docnet.Core - her biri kendi yerel ikilileri, platforma özgü dağıtım adımları ve lisans dikkate alınmasıyla. GhostScript, AGPL lisanslama etkilerini tanıtır. Parola korumalı PDF'ler başka bir kütüphane daha ekler. Birden fazla ortamda üç ayrı yerel bağımlılık zincirini yöneten takımlar, doğrudan tek paket alternatiflerinin değerlendirilmesi için tetikleyici bir bakım eşiğine ulaşır.

İş parçacıklarına güvenli olmayan motor tasarımı, paralel işlem kapasitesini sınırlar. Bir TesseractEngine örneği iş parçacıkları arasında paylaşılamaz. Standart paralel işleme deseni, iş parçacığı başına bir motor oluşturur, her örnek başına 40-100 MB dil modeli verisi yükler. Sekiz paralel iplik, belgeler işlenmeden önce 320-800 MB motor başlangıç yükünü ifade eder. Bu bir hata değildir — iş parçacığı güvenli olmayan bir API'nin amaçlanan kullanımıdır — ancak bellek maliyeti gerçektir ve toplu ölçüler arttıkça birleşir.

Temel Sorun

Her Tesseract uygulaması aynı şekilde başlar: uygulamanın çalıştığı her makinada doğru olması gereken bir tessdata yolu belirtir.

Tesseract Yaklaşımı:

// TessDataPath must exist and be populated — breaks on first clean deployment
private const string TessDataPath = @"./tessdata";

public static string ExtractText(string imagePath)
{
    // Runtime failure if eng.traineddata is missing from TessDataPath
    if (!Directory.Exists(TessDataPath))
        throw new DirectoryNotFoundException(
            $"Tessdata not found at {TessDataPath}. " +
            "Download from https://github.com/tesseract-ocr/tessdata");

    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);
    using var img   = Pix.LoadFromFile(imagePath);  // Leptonica Pix object
    using var page  = engine.Process(img);
    return page.GetText();
}
C#

IronOCR Yaklaşımı:

// No tessdata folder. No path. No file check. Just OCR.
var text = new IronTesseract().Read("document.jpg").Text;
C#

Tüm TessDataPath sabiti, Directory.Exists muhafız, Pix nesnesi ve üç seviyeli using iç içe geçmişlik ortadan kalkar. Dil bilgileri NuGet paketine gömülüdür.

##IronOCR ve Tesseract Karşılaştırma Tablosu

Aşağıdaki tablo, geçiş kararları sırasında en çok önem taşıyan yetenekleri kapsar.

ÖzellikTesseract (charlesw)IronOCR
NuGet paketiTesseractIronOcr
Tesseract motoru sürümü4.1.1 (2019, sabitlenmiş)Optimize Edilmiş Tesseract 5.x
Tessdata YönetimiManuel klasör + dosya indirmePaketlenmiş — sıfır yapılandırma
Dil paketleriManuel .traineddata indirmeHer dil için NuGet paketi
Mevcut diller100+ (manuel)125+ (NuGet)
Çok dillilik aynı anda"eng+fra+deu" dizeOcrLanguage.French + OcrLanguage.German
Görüntü ön işlemeManuel (~180 satır)Yerleşik tek satır yöntemler
DeskeyManuel (Hough dönüşümü gerekli)input.Deskew()
Gürültü AzaltmaManuel (medyan filtre)input.DeNoise()
Kontrast / BinarizasyonManuel piksel yinelemeinput.Contrast(), input.Binarize()
Derin gürültü gidermeMevcut değilinput.DeepCleanBackgroundNoise()
PDF girişiHiçbiri - dış kütüphane gerektirirYerel (tarama, dijital, karışık)
Şifre korumalı PDFŞifre çözme kütüphanesi gerekirinput.LoadPdf(path, Password: "...")
Çok sayfalı TIFFManuel çerçeve yinelemesiinput.LoadImageFrames()
Aranabilir PDF çıktısıDesteklenmiyorresult.SaveAsSearchablePdf()
Yapılandırılmış sonuç erişimiResultIterator döngüsüresult.Pages, .Paragraphs, .Words
Thread güvenliğiİş parçacığı güvenli değilİplik güvenli tekil örnek
Barkod okumaDesteklenmiyorocr.Configuration.ReadBarCodes = true
Çapraz platformHer platform için yerel DLL'ler gerekliTek NuGet, tüm platformlar
Docker dağıtımıapt-get + tessdata KOPYALAMA adımlarıEk adımlar yok
LisanslamaApache 2.0 (ücretsiz)Süresiz ($999 Lite / $1,499 Pro / $2,999 Enterprise)
Ticari destekSadece toplulukEvet (e-posta + öncelik katmanları)

Hızlı Başlangıç: Tesseract'tan IronOCR Geçişi

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

Charlesw Tesseract kılıfını kaldırın:

dotnet remove package Tesseract
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

Dil paketleri gerektiğinde ayrı paketler olarak yüklenir:

dotnet add package IronOcr.Languages.French, IronOcr.Languages.German

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

Tesseract ad alanınıIronOCR ad alanı ile değiştirin:

// Before
using Tesseract;

// After
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

Lisans başlatmasını, herhangi bir IronTesseract çağrısından önce, uygulama başlatıldığında bir kez ekleyin:

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

Ücretsiz bir deneme, geliştirme sırasında bir anahtar olmadan çalışır. Üretim dağıtımları, lisanslama sayfasından geçerli bir anahtar gerektirir.

Kod Göç Örnekleri

Tessdata Yolunun Kaldırılması ve Motor Başlatma

En önemli değişiklik, TesseractEngine başlatmasını ve onu çevreleyen tüm tessdata doğrulama kodunu kaldırmaktır.

Tesseract Yaklaşımı:

// Every class that uses OCR must handle this initialization block
private const string TessDataPath = @"./tessdata";

public string RecognizeInvoiceNumber(string imagePath)
{
    // Check tessdata presence — missing file = silent runtime failure
    foreach (var lang in new[] { "eng" })
    {
        if (!File.Exists(Path.Combine(TessDataPath, $"{lang}.traineddata")))
            throw new FileNotFoundException(
                $"Missing {lang}.traineddata. " +
                "Download from https://github.com/tesseract-ocr/tessdata");
    }

    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);

    // Pix is a Leptonica wrapper type — not a standard .NET image
    using var img  = Pix.LoadFromFile(imagePath);
    using var page = engine.Process(img);

    string text = page.GetText();
    float  conf = page.GetMeanConfidence();

    return conf > 0.7f ? text : string.Empty;
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public string RecognizeInvoiceNumber(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);

    // Confidence property returns 0-100 double
    return result.Confidence > 70 ? result.Text : string.Empty;
}
C#

FileNotFoundException muhafız, tessdata sabiti, Pix nesnesi ve üç seviyeli iç içe geçmişlik yoktur. IronTesseract, dil verileri gömülü olduğundan, argümansız olarak oluşturulur. Varsayılan olmayan davranış gerektiğinde konfigürasyon seçenekleri için IronTesseract kurulum kılavuzu'na ve tam güven API'si için güvenlik puanları kılavuzuna bakın.

Çoklu Sayfa TIFF İşleme ve Ön İşleme Boru Hattı

Taranmış belge arşivlerinde ve faks sistemlerinde yaygın olan çok çerçeveli TIFF dosyaları, Tesseract ile açık çerçeve yinelemesine ihtiyaç duyar. IronOCR, tek bir çağrıda tüm kareleri yükler ve ön işleme hattını düzgün bir şekilde uygular.

Tesseract Yaklaşımı:

using Tesseract;
using System.Drawing;
using System.Drawing.Imaging;

private const string TessDataPath = @"./tessdata";

public static string ExtractFromMultiPageTiff(string tiffPath)
{
    var allText = new System.Text.StringBuilder();

    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);
    using var tiffImage = Image.FromFile(tiffPath);

    int frameCount = tiffImage.GetFrameCount(FrameDimension.Page);

    for (int i = 0; i < frameCount; i++)
    {
        tiffImage.SelectActiveFrame(FrameDimension.Page, i);

        // Must save each frame to disk — Pix.LoadFromFile requires a path
        string tempPath = Path.GetTempFileName() + ".png";
        try
        {
            tiffImage.Save(tempPath, ImageFormat.Png);

            using var img  = Pix.LoadFromFile(tempPath);
            using var page = engine.Process(img);
            allText.AppendLine(page.GetText());
        }
        finally
        {
            File.Delete(tempPath); // Uncleaned temp files fill disk on failure
        }
    }

    return allText.ToString();
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public static string ExtractFromMultiPageTiff(string tiffPath)
{
    using var input = new OcrInput();
    input.LoadImageFrames(tiffPath);  // Loads all frames at once
    input.Deskew();                   // Applied to every frame uniformly
    input.DeNoise();

    var result = new IronTesseract().Read(input);
    return result.Text;
}
C#

Çerçeve yinelemesi yok. Geçici dosya oluşturma yok. Temizlik mantığı yok. Ön işleme hattı, ek bir döngü olmadan her kareye uygulanır. TIFF ve GIF giriş kılavuzu, büyük arşiv dosyaları için seçici çerçeve aralıkları dahil olmak üzere çok çerçeveli işleme ayrıntılı bir şekilde kapsar.

Aranabilir PDF Oluşturma

Taranmış bir PDF'yi aranabilir bir PDF'ye dönüştürmek, Tesseract'ın her sayfayı bir görüntüye render etmesini (harici bir PDF kütüphanesi ile), OCR işlemi yapmasını ve ardından bir metin katmanıyla bir PDF yeniden yapılandırmasını gerektirir — çok kütüphaneli, çok adımlı bir süreç. IronOCR, giriş, OCR ve çıkış işlevlerini tek bir boru hattında işler.

Tesseract Yaklaşımı:

// Requires: PdfiumViewer + Tesseract + a PDF writer library (iText, PdfSharp)
// Each library adds its own native dependencies and license considerations

using Tesseract;
// using PdfiumViewer;  // Comment: must add NuGet + deploy native pdfium.dll
// using iText.Kernel.Pdf;  // Comment: AGPL or commercial license required

private const string TessDataPath = @"./tessdata";

public static void CreateSearchablePdf(string inputPdfPath, string outputPdfPath)
{
    // Step 1: Render PDF pages to images (requires PdfiumViewer)
    // Step 2: Run OCR on each image (Tesseract)
    // Step 3: Write text positions back into PDF (requires iText or PDFsharp)
    //
    // Total: ~150 lines across three libraries
    // Native binaries required: tesseract*.dll, leptonica*.dll, pdfium.dll
    // License risk: iText is AGPL unless you purchase a commercial license

    throw new NotImplementedException(
        "Requires PdfiumViewer + Tesseract + a PDF writer. " +
        "No single-package solution exists with this stack.");
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public static void CreateSearchablePdf(string inputPdfPath, string outputPdfPath)
{
    using var input = new OcrInput();
    input.LoadPdf(inputPdfPath);
    input.Deskew();    // Correct scanned page skew before OCR
    input.DeNoise();   // Remove scanner artifacts

    var result = new IronTesseract().Read(input);
    result.SaveAsSearchablePdf(outputPdfPath);
}
C#

Bir yöntem çağrısı, gömülü bir metin katmanıyla aranabilir PDF üretir. Harici PDF kütüphanesi yok, yerel pdfium ikilisi yok, AGPL bağımlılıklarıyla lisans karmaşası yok. Aranabilir PDF nasıl yapılır kılavuzu çıkış formatını belgeler ve PDF OCR örneği, tam bir taranmış belge boru hattını anlatır. IronOCR'nun PDF girişi ile neler yapabileceği üzerine daha geniş bir bağlam için PDF OCR kullanım durumu sayfası, üretim mimarisi kalıplarını kapsar.

Taranmış Belgelerden Yapılandırılmış Veri Çıkartma

Tesseract, kelime düzeyinde verileri ResultIterator ile açığa çıkarır, bu da manuel sınır kutusu çıkarımı ile bir do/while döngüsü gerektirir. IronOCR, belgeleri bir araya getirilmiş öğeler olarak sunar — sayfalar, paragraflar, satırlar, kelimeler — zaten dolu koordinatlarla birlikte güçlü türde koleksiyonlar olarak.

Tesseract Yaklaşımı:

using Tesseract;

private const string TessDataPath = @"./tessdata";

public static void ExtractStructuredData(string imagePath)
{
    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);
    using var img    = Pix.LoadFromFile(imagePath);
    using var page   = engine.Process(img);
    using var iter   = page.GetIterator();

    iter.Begin();
    do
    {
        if (iter.IsAtBeginningOf(PageIteratorLevel.Para))
            Console.WriteLine("-- New Paragraph --");

        if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds))
        {
            string word       = iter.GetText(PageIteratorLevel.Word);
            float  confidence = iter.GetConfidence(PageIteratorLevel.Word);
            Console.WriteLine(
                $"Word: '{word?.Trim()}' " +
                $"at ({bounds.X1},{bounds.Y1})-({bounds.X2},{bounds.Y2}) " +
                $"conf={confidence:P0}");
        }
    }
    while (iter.Next(PageIteratorLevel.Word));
}
C#

IronOCR Yaklaşımı:

using IronOcr;

public static void ExtractStructuredData(string imagePath)
{
    var result = new IronTesseract().Read(imagePath);

    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber} — confidence: {result.Confidence}%");

        foreach (var paragraph in page.Paragraphs)
        {
            Console.WriteLine($"  Paragraph at ({paragraph.X},{paragraph.Y}):");
            Console.WriteLine($"  {paragraph.Text}");

            foreach (var word in paragraph.Words)
            {
                Console.WriteLine(
                    $"    Word: '{word.Text}' " +
                    $"at ({word.X},{word.Y}) " +
                    $"size {word.Width}x{word.Height} " +
                    $"conf={word.Confidence:P0}");
            }
        }
    }
}
C#

ResultIterator döngüsü tamamen kaybolur. Belge hiyerarşisi bir dizi yineleme yapılabilir koleksiyonlardır — iteratör durumu yok, elle seviyelendirme takibi yok, çıkış parametresiyle sınırlayıcı kutu çıkartması yok. Her kelime nesnesi, kendi koordinatlarını ve güvenini taşır. Okuma sonuçları kılavuzu, hiyerarşinin her seviyesini belgeler ve OcrResult API referansı, mevcut tüm özellikleri listeler.

Tessdata Dosya Yönetimi Olmadan Çok Dilli OCR

Bir Tesseract uygulamasına dil eklemek, bir .traineddata dosyasını indirip tessdata klasörüne yerleştirerek, bu klasörü içeren her dağıtım manifestini güncelleyerek ve motor başlatma dizgisini değiştirerek gerçekleştirilir.IronOCR ile, bir tek NuGet paket referansı yeterlidir.

Tesseract Yaklaşımı:

using Tesseract;

private const string TessDataPath = @"./tessdata";

public static string ExtractFromEuropeanDocument(string imagePath)
{
    // Before this call works, these files must exist:
    // ./tessdata/eng.traineddata  (~15 MB, from GitHub)
    // ./tessdata/fra.traineddata  (~15 MB, from GitHub)
    // ./tessdata/deu.traineddata  (~15 MB, from GitHub)
    // ./tessdata/spa.traineddata  (~15 MB, from GitHub)
    // Total: ~60 MB to download, version-match, and deploy to every environment

    foreach (var lang in new[] { "eng", "fra", "deu", "spa" })
    {
        if (!File.Exists(Path.Combine(TessDataPath, $"{lang}.traineddata")))
            throw new FileNotFoundException(
                $"Download {lang}.traineddata from " +
                "https://github.com/tesseract-ocr/tessdata " +
                $"and place in {TessDataPath}");
    }

    // Language string is a concatenation — order affects recognition priority
    using var engine = new TesseractEngine(TessDataPath, "eng+fra+deu+spa", EngineMode.Default);
    using var img    = Pix.LoadFromFile(imagePath);
    using var page   = engine.Process(img);
    return page.GetText();
}
C#

IronOCR Yaklaşımı:

// Install language packs once per project:
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.German
// dotnet add package IronOcr.Languages.Spanish
using IronOcr;

public static string ExtractFromEuropeanDocument(string imagePath)
{
    var ocr = new IronTesseract();
    ocr.Language = OcrLanguage.English;
    ocr.AddSecondaryLanguage(OcrLanguage.French);
    ocr.AddSecondaryLanguage(OcrLanguage.German);
    ocr.AddSecondaryLanguage(OcrLanguage.Spanish);

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

Tessdata klasörü, dosya varlığı döngüsü, yol birleştirme dizgisi ve dağıtım manifeste güncellemeleri, PackageReference satırları .csproj içinde değiştirir. Docker'a bir dil eklemek, bir ekstra dotnet add package eklemek anlamına gelir — bir Dockerfile COPY adımı değil. birden fazla dil kılavuzu tam 125+ dil kataloğunu ve CJK karakter setlerini kapsar ve diller indeksi mevcut tüm dil paketlerini listeler.

Tesseract API ile IronOCR Eşleştirme Referansı

Tesseract (charlesw)IronOCR
new TesseractEngine(tessDataPath, "eng", EngineMode.Default)new IronTesseract()
Pix.LoadFromFile(path)input.LoadImage(path) veya ocr.Read(path)
Pix.LoadFromMemory(bytes)input.LoadImage(bytes)
engine.Process(img)ocr.Read(input)
page.GetText()result.Text
page.GetMeanConfidence()result.Confidence
page.GetHOCRText(0)result.SaveAsHocrFile(path)
engine.Process(img, tessRect)input.LoadImage(path, new CropRectangle(x, y, w, h))
page.GetIterator()result.Pages / result.Paragraphs / result.Words
iter.GetText(PageIteratorLevel.Word)result.Words[i].Text
iter.GetConfidence(PageIteratorLevel.Word)result.Words[i].Confidence
iter.TryGetBoundingBox(PageIteratorLevel.Word, out bounds)word.X, word.Y, word.Width, word.Height
"eng+fra+deu" dil dizgisiocr.AddSecondaryLanguage(OcrLanguage.French)
Tessdata klasörü + .traineddata dosyalarNuGet dil paketi (IronOcr.Languages.French)
Uygun değil — PdfiumViewer veya benzeri gerektiririnput.LoadPdf(path)
Yok — şifreleme kütüphanesi gerekliinput.LoadPdf(path, Password: "secret")
N/A — iText veya PDFSharp gerektirirresult.SaveAsSearchablePdf(outputPath)
Yok — manuel System.Drawing boru hattıinput.Deskew(), input.DeNoise(), input.Binarize()
Yok — iş parçacığı başına @Parallel.ForEach motorTüm iş parçacıkları arasında paylaşılan tek IronTesseract
Uygun değil — desteklenmiyorocr.Configuration.ReadBarCodes = true

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

Sorun 1: Geçiş Sonrası Tessdata Yol Referansı Kalıyor

Tesseract: TessDataPath sabitleri, Directory.Exists(TessDataPath) muhafızları ve File.Exists(Path.Combine(TessDataPath, lang + ".traineddata")) kontrolleri, proje dosyalarında <Content Include="tessdata\**"> derleme öğeleri olarak kod tabanında görünür.

Çözüm: Tüm bulunma yerlerini arayın ve bunları tessdata klasörü ile birlikte kaldırın:

# Find all tessdata references in source
grep -r "TessDataPath\|tessdata\|traineddata" --include="*.cs" .
grep -r "tessdata" --include="*.csproj" .
SHELL

Yol sabitlerini ve dosya koruyucularını kaldırdıktan sonra tessdata klasörünü projeden silin. <Content Include="tessdata\**" CopyToOutputDirectory="..." /> satırlarını .csproj dosyalarından kaldırın. Dockerfile COPY ./tessdata satırları ve ENV TESSDATA_PREFIX ortam değişken bildirimleri de güvenle kaldırılabilir.

Sorun 2: Pix Nesnesi Türü Çözülemiyor

Tesseract: Pix, Tesseract ad alanından bir Leptonica görüntü sarıcı türüdür. Değişken bildirimlerinde (using var img = Pix.LoadFromFile(...)), Pix parametrelerini kabul eden yöntem imzalarında ve Pix.LoadFromMemory() veya Pix.LoadFromBitmap() çağıran herhangi bir koda referans olarak görünür.

Çözüm: Pix.LoadFromFile(path)'yi input.LoadImage(path) ile OcrInput örneğinde değiştirin. Pix.LoadFromMemory(bytes) yerine input.LoadImage(bytes) ile değiştirin. OcrInput sınıfı, dosya yolları, bayt dizileri, akışlar ve System.Drawing.Bitmap nesnelerini doğrudan kabul eder. Ara bir sarmalayıcı türe dönüşüm gerekmez. resim girdi kılavuzu ve akış girdi kılavuzu kabul edilen girdilerin tam setini içerir.

Sorun 3: ResultIterator Döngü Deseni Doğrudan Eşdeğere Sahip Değil

Tesseract: ResultIterator üzerinde iter.Begin(), iter.Next(PageIteratorLevel.Word) ve iter.TryGetBoundingBox() ile yineleyen kod, kelime seviyesi veya karakter seviyesi çıkarımlar için standart bir desendir. Bu desen, yineleyici durumunu ve seviye geçişlerini manuel olarak izlemeyi gerektirir.

Çözüm: Yineleyici döngüsünü result.Words, result.Pages veya uygun koleksiyon seviyesi üzerinde LINQ ile değiştirin:

// Before: iterator loop
using var iter = page.GetIterator();
iter.Begin();
do
{
    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds))
    {
        string text = iter.GetText(PageIteratorLevel.Word);
        // process text and bounds
    }
}
while (iter.Next(PageIteratorLevel.Word));

// After: enumerable collection
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
    // word.Text, word.X, word.Y, word.Width, word.Height, word.Confidence
}
C#

Paragraf düzeyi erişim için — Tesseract yineleyicisinde temiz bir karşılığı yoktur — result.Pages[i].Paragraphs kullanın. okuma sonuçları kılavuzu mevcut tüm seviyeleri belgelendirmektedir.

Sorun 4: PDF Kütüphanesi Kodu Tamamen Kaldırılmalıdır

Tesseract: Tesseract'a geçmeden önce PDF sayfalarını görüntülere dönüştüren herhangi bir kod — PdfiumViewer document.Render() döngüleri, PDFtoImage Conversion.ToImage() çağrıları, Docnet.Core GetPageReader() desenleri veya GhostScript işlem çağrıları, yalnızca Tesseract'ın PDF'leri açamamasından dolayı vardır. Bu sınıflar, döngüler, geçici dosya desenleri ve yerel ikili dağıtımlar tüm gerçek gereksinimin etrafında iskelet oluşturur.

Çözüm: PDF işleme kodunu tamamen silin. Tüm render-sonra-OCR bloğunu input.LoadPdf(path) ile değiştirin:

// Before: ~50-150 lines of PdfiumViewer + Tesseract + temp file management
// After:
using var input = new OcrInput();
input.LoadPdf("document.pdf");
input.Deskew();
input.DeNoise();
var result = new IronTesseract().Read(input);
C#

PdfiumViewer, PDFtoImage ve Docnet.Core paket referanslarını .csproj'den kaldırın. Yerel ikili dağıtımları (pdfium.dll, GhostScript çalıştırılabilir dosyaları) derleme komut dosyaları ve Dockerfile'lardan çıkarın. PDF giriş kılavuzu, sayfa aralığı seçimi ve parola korumalı PDF'leri kapsıyor.

Sorun 5: Her İplik İçin Paralel İşleme Motoru Deseni

Tesseract: Güvenli paralel OCR için standart desen, Parallel.ForEach gövdesine yeni bir TesseractEngine oluşturmaktır, çünkü tek bir motor iş parçacığı açısından güvenli değildir. Bu, her iş parçacığında tam dil modelini yükler.

Çözüm: Döngüden önce bir kez IronTesseract oluşturun ve içinde referans alın:

// Before: engine per thread, 40-100 MB per language model, times thread count
Parallel.ForEach(files, file =>
{
    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);
    using var img    = Pix.LoadFromFile(file);
    using var page   = engine.Process(img);
    results[file] = page.GetText();
});

// After: single engine, thread-safe, shared pool
var ocr = new IronTesseract();
Parallel.ForEach(files, file =>
{
    var result = ocr.Read(file);
    results[file] = result.Text;
});
C#

İş parçacığı güvenliği değişikliği ayrıca döngü gövdesinden using imha desenini de ortadan kaldırır, bu yalnızca her iş parçacığı başına motorun zamanında serbest bırakıldığından emin olmak için gerekliydi.

Sorun 6: EngineMode Enum'un Doğrudan Eşdeğeri Yok

Tesseract: EngineMode.Default, EngineMode.TesseractOnly ve EngineMode.LstmOnly, Tesseract'ın eski motoru, LSTM veya her ikisini kullanıp kullanmayacağını seçmek için TesseractEngine kurucularında görünür. charlesw sarmalayıcı bu modları açığa çıkarır çünkü Tesseract 4.x her iki motoru da korudu.

**Çözüm:**IronOCR yalnızca yüksek doğrulukla yapılandırılmış Tesseract 5 LSTM motorunu kullanır. Eski bir motora geri dönülecek bir EngineMode parametresi yoktur. Kurucu çağrısını çevirirken EngineMode argümanını kaldırın. Verim-accuracy ayarlaması için ocr.Configuration.PageSegmentationMode kullanın ve hız optimizasyon kılavuzuna danışın.

Tesseract Geçiş Kontrol Listesi

Öncesi-Geçiş

Tüm Tesseract ve tessdata referansları için kod tabanını denetleyin:

# Find all using directives for the Tesseract namespace
grep -rn "using Tesseract" --include="*.cs" .

# Find TesseractEngine constructors
grep -rn "TesseractEngine\|TessDataPath\|tessdata" --include="*.cs" .

# Find Pix object usage
grep -rn "Pix\." --include="*.cs" .

# Find ResultIterator usage
grep -rn "GetIterator\|ResultIterator\|PageIteratorLevel" --include="*.cs" .

# Find PDF rendering libraries added for Tesseract
grep -rn "PdfiumViewer\|PDFtoImage\|Docnet\|GhostScript" --include="*.cs" .

# Find tessdata references in project files
grep -rn "tessdata\|traineddata" --include="*.csproj" .

# Find tessdata references in Dockerfiles
grep -rn "tessdata\|TESSDATA_PREFIX\|libtesseract" Dockerfile* .
SHELL

Geçiş kapsamını tahmin etmek için envanter sonuçları:

  • Değişiklik gerektiren sınıfların sayısını belirlemek için using Tesseract ile dosya sayın
  • Hangi PDF işleme kütüphanesinin kullanıldığını (PdfiumViewer, PDFtoImage, Docnet.Core, GhostScript) tespit edin
  • Hangi IronOCR dil NuGet paketlerinin eklenmesi gerektiğini belirlemek için TesseractEngine kurucu dizgilerinde referans verilen dilleri not edin

Kod Geçişi

  1. Tüm .csproj dosyalarından Tesseract NuGet paketi referansını kaldırın
  2. Tesseract desteği için eklenen PDF işleme kütüphanesi NuGet referanslarını kaldırın (PdfiumViewer, PDFtoImage, Docnet.Core)
  3. IronOcr NuGet paketini yükleyin
  4. Gerekli dil NuGet paketlerini yükleyin (IronOcr.Languages.French, vb.)
  5. Uygulama başlangıcında IronOcr.License.LicenseKey = "YOUR-KEY"; ekleyin
  6. Tüm ilgili dosyalarda using Tesseract;'yi using IronOcr; ile değiştirin
  7. TessDataPath sabitlerini ve tüm Directory.Exists / File.Exists tessdata muhafızlarını kaldırın
  8. new TesseractEngine(...)'yi new IronTesseract() ile değiştirin
  9. Pix.LoadFromFile(path)'i bir OcrInput örneğinde input.LoadImage(path) ile değiştirin
  10. Pix.LoadFromMemory(bytes)'i input.LoadImage(bytes) ile değiştirin
  11. engine.Process(img)'i ocr.Read(input) ile değiştirin
  12. page.GetText()'i result.Text ile değiştirin
  13. page.GetMeanConfidence()'i result.Confidence ile değiştirin
  14. ResultIterator döngülerini result.Words veya result.Pages[i].Paragraphs üzerindeki sıralama ile değiştirin
  15. PDF işleme döngülerini input.LoadPdf(path) ile değiştirin — işleme kütüphane kodunu tamamen silin
  16. "eng+fra+deu" dil dizgilerini ocr.AddSecondaryLanguage(OcrLanguage.X) çağrıları ile değiştirin
  17. Tessdata klasörünü ve onun yapım <Content Include="..."> proje öğelerini silin
  18. Derleme betiklerinden ve Dockerfile'larından yerel ikili dağıtım adımlarını kaldırın (tessdata COPY, TESSDATA_PREFIX ENV, apt-get libtesseract-dev)

Geçiş Sonrası

  • Geliştirme sırasında Tesseract sarmalayıcı ile kullanılan aynı örnek resimlerdeki temel metin çıkarımını doğrulayın
  • Güven derecelerinin makul olduğunu doğrulayın (temiz belgeler için %70+, yüksek kaliteli taramalar için %85+)
  • Çok sayfalı TIFF girişinin, result.Pages'de doğru sayıda sayfa ürettiğini test edin
  • PDF girişinin dış kitaplık gerektirmeden okunduğunu doğrulayın
  • Bilinen şifreli dosyaya karşı input.LoadPdf(path, Password: "...") ile parola korumalı PDF okuma test edin
  • Aranabilir PDF çıktısının Adobe Reader'da açıldığını ve metin aramasını desteklediğini doğrulayın
  • Paralel işlemeyi test edin: Bir IronTesseract örneğini bir Parallel.ForEach döngüsünden önce oluşturun ve iş parçacığı güvenliği istisnalarının olmadığını doğrulayın
  • Her dil paketi için dil hedefli belge setinin doğru çıktı verdiğini doğrulayın
  • @COPY tessdata ve apt-get libtesseract-dev olmadan Docker derlemesini çalıştırın — kapsayıcının başladığını ve belgeleri işlediğini doğrulayın
  • Yapılan çıktının dizininde tessdata klasörünün ve yerel DLL dosyalarının olmadığını doğrulayın
  • Yerel ikili referansları kaldırdıktan sonra günlüklerde hiçbir TesseractException veya System.DllNotFoundException görünmediğini kontrol edin

IronOCR'a Geçişin Ana Faydaları

Dağıtım tek bir pakete küçülür. Tessdata klasörü, platforma özel yerel kütüphaneler (tesseract50.dll, leptonica-1.82.0.dll, libtesseract.so.5) ve herhangi bir PDF işleme yerel ikili dosyaları, dağıtım öğesinden yok oldu. Yeni bir ortam eklemek — bir Linux kapsayıcı, bir AWS Lambda işlevi, bir macOS geliştirici makinesi — platforma özgü kurulum adımları gerektirmez. Docker dağıtım kılavuzu ve Linux dağıtım kılavuzu süreci onaylıyor: paketi yükleyin, lisans anahtarını ekleyin, çalıştırın. Yok apt-get, yok KOPYA, yok ortam değişkenleri.

Dil eklemeleri saniyeler alır, dakikalar değil. İspanyolca OCR desteği eklemek, "spa.traineddata indirin, tessdata klasörüne yerleştirin, dağıtım manifestini güncelleyin, motor yapıcıdaki yolu kontrol edin"den dotnet add package IronOcr.Languages.Spanish ve ocr.AddSecondaryLanguage(OcrLanguage.Spanish)'ya geçer. Aynı iki adım her platformda çalışır. 10+ dil destekleyen ekipler — uluslararası belge işleme iş akışlarında ortak olan — bu işlemi saatler süren bakım sürecinden dakikalar süren bir kerelik kurulum sürecine sıkıştırır. Tam katalogu diller indeksinde inceleyin.

PDF iş akışlarının dış kütüphanelere ihtiyacı yoktur. PdfiumViewer yerel ikililerini dağıtmak ve yönetmek, 32/64 bit ortamlar için pdfium.dll bitini yönetmek, GhostScript'ten doğan AGPL lisans hususlarını ele almak ve sayfa başına işleme döngüleri yazmak gereksinimi ortadan kalkar. input.LoadPdf(), taranmış PDF'leri, dijital PDF'leri, karma içerikli PDF'leri ve parola korumalı PDF'leri yerel olarak okur. result.SaveAsSearchablePdf(), herhangi bir ikincil kütüphane dahil olmadan aranabilir bir çıktı üretir. Tüm tur — taranmış bir PDF yüklemek, iskele ve gürültü giderme, OCR, aranabilir çıktı kaydet — 10 satırdan az kodla gerçekleştirilebilir. Üretim hattı desenleri için aranabilir PDF'ler blog yazısını inceleyin.

Ön işleme yerleşiktir, sizin oluşturmanız gerekmez. Yaklaşık 180 satırdaki manuel ön işleme kodu — gri tonlama renk matrisi, piksel-iterasyon kontrast geliştirme, medyan filtre gürültü azaltma, Hough dönüşüm makara düzeltim, DPI ölçekleme — bir dizi tek satır yöntem çağrısına dönüşüyor: input.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize(). Çoğu gerçek dünyadaki belge için, varsayılan okuma herhangi bir açık filtre çağrısı olmadan akıllı otomatik ön işleme uygular. görüntü kalite düzeltme kılavuzu ve görüntü filtreleri eğitimi tüm filtre kataloğunu kapsar.

Tesseract 5 doğruluğu hemen mevcuttur. charlesw sarmalayıcı Tesseract 4.1.1'e sabitlenmiştir. IronOCR, herhangi bir işlem gerektirmeyen optimize edilmiş Tesseract 5 LSTM motoru sunar. Zor belge türlerinde doğruluğun azaldığını ölçen ekipler — düşük DPI taramalar, fakslar, el yazısı formlar — paketleri değiştirdikleri anda Tesseract 5 yeniliklerinden faydalanır. Doğruluk farkı, LSTM tanımasının eski motoru geride bıraktığı belgelerde en çok fark edilir, bu da gerçek dünya OCR iş yüklerinin çoğunluğunu oluşturur.

Ticari destek, topluluk sorun çözümünü değiştirir. charlesw sarmalayıcı, garanti edilen yanıt süreleri olmayan ve SLA bulunmayan bir topluluk tarafından sürdürülen açık kaynaklı bir projedir.IronOCR e-posta desteği, daha yüksek seviyelerde öncelikli destek ve düzenli .NET uyumluluk güncellemelerine sahip ticari olarak sürdürülen bir kod tabanı sağlar. Belge işleme hatlarında SLA bulunan ekipler için bu destek modeli önemlidir. IronOCR ürün sayfası ve belge merkezi tam özellik setini ve dağıtım seçeneklerini kapsar.

Lütfen dikkate alın: Ghostscript, PDFium, PDFSharp, Tesseract ve iText, ilgili sahiplerinin tescilli markalarıdır. Bu site, Artifex Software, Chromium Project, Google, empira Software GmbH veya iText Group ile bağlantılı, onaylanmış veya desteklenmiş değildir. Tüm ürün adları, logolar ve markalar, ilgili sahiplerinin malıdır. 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