IRONSOFTWAREHOME
DIĞER BILEŞENLERLE KARŞILAŞTIRIN

Google OCR ile IronOCR Arasında Bir Karşılaştırma

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

2021 yılında arşivlenen charlesw/tesseract NuGet paketi, o tarihten beri güncelleme almadı — ancak geliştirme durmadan önce beş milyondan fazla NuGet indirimi biriktirdiğinden, hâlâ Stack Overflow cevaplarında, blog eğitimlerinde ve yeni proje taslaklarında görünüyor. Bugün bunu benimseyen ekipler, donmuş bir bağımlılığı devralır: Tesseract 4.1.1 model ağırlıkları, .NET 6/7/8 yerel ikili iyileştirmeler yoktur ve bir GitHub arşiv bildirimi ile sona eren bir bakım zaman çizelgesi vardır. Bu, tek bir OCR kod satırı çalıştırılmadan önceki pratik gerçektir.

İkinci gerçeklik, dağıtımda karşılaşılan bir sorundur. Tesseract NuGet paketi, platforma özgü yerel ikili dosyaları göndererek çalışır — Windows x64 için tesseract50.dll, x86 için ayrı bir derleme, Linux için libtesseract.so — ve yanlarında Leptonica resim kütüphanesini taşır. Bir geliştirici iş istasyonunda bu ikili dosyalar otomatik olarak çözülür. Bir Docker konteynerinde, Azure App Service'te veya bir ARM tabanlı Linux sunucusunda, geliştiriciler koşullu dağıtım mantığı yazmaya, DLL dosyalarını yayına çıkışa kopyalamaya ve çalıştırma zamanında DllNotFoundException hata ayıklamaya başlar. IronOCR, harici yerel ikili dosya yönetimi olmadan her şeyi tek bir yönetilen NuGet paketi içinde taşır.

charlesw/tesseract'ı Anlamak

NuGet paket kimliği Tesseract altında yayımlanan charlesw/tesseract kütüphanesi, Tesseract OCR C++ motorunun yönetilen .NET sarmalayıcısıdır. Charles Weld, 2012'den yaklaşık 2021 yılına kadar aktif olarak sürdürdü ve .NET uygulamalarında Tesseract erişimi için fiili standart haline geldi. GitHub deposu şimdi arşivlenmiş durumda, demektir ki çekme istekleri gözden geçirilmez, sorunlara yanıt verilmez ve başka NuGet sürümleri yayımlanmaz.

Son yayımlanan sürüm, LSTM sinir ağı tanıma modeli ile Tesseract 4.1.1'i sarar. Aralık 2021'de yeniden yazılmış LSTM modeli ile taşınan ve düşük kaliteli belgeler üzerinde ölçülebilir şekilde artırılmış doğruluk sunan Tesseract 5, bu paket aracılığıyla mevcut değildir. Sarmalayıcı, .NET Standard 2.0 ve .NET Framework 4.6.2+'yi hedefler, bu da modern .NET çalışma zamanlarında çalıştığı anlamına gelir, ancak alttaki yerel motor ve eğitilmiş modelleri 2021 seviyelerinde donmuştur.

Ana mimari özellikler:

  • 2021'den beri arşivlendi: Bakım yok, hata düzeltmesi yok, güvenlik yaması yok, Tesseract 5 yükseltmesi yok
  • Platforma özgü yerel ikili dosyalar: Ayrı tesseract50.dll (Windows x64), tesseract50.dll (Windows x86), libtesseract.so (Linux x64) ve platform başına konuşlandırılan eşlikçi Leptonica DLL'leri
  • Tessdata dahil değil: Dil modeli dosyaları (.traineddata) tesseract-ocr/tessdata GitHub deposundan indirilmeli ve ayrı olarak dağıtılmalıdır, bu da dağıtım paketine dil başına 15+ MB eklenmesine neden olur
  • Resim ön işleme yok: İdeal olmayan görüntülerde (eğik, düşük DPI, gürültülü) ham Tesseract doğruluğu, sarmalayıcı dışında yazılmış özel bir ön işleme hattı gerektirir
  • PDF desteği yok: Motor sadece görüntü için; PDF sayfaları, OCR çalışmadan önce ayrı bir kütüphane tarafından görüntüye dönüştürülmelidir
  • İş parçacığı güvenliği çağrı yapan kişinin sorumluluğudur: TesseractEngine örnekleri iş parçacıkları arasında paylaşılacak şekilde güvenli değildir

Yerel İkili Dağıtımı

charlesw/tesseract içindeki yerel ikili yönetim deseni, yerel bir geliştirme makinesini aşan ekipler için en önemli pratik sorundur:

// charlesw/Tesseract: engine creation requires tessdata path at runtime
// The path must resolve correctly in every deployment target

private const string TessDataPath = @"./tessdata"; // Works on dev — breaks in Docker

public string ExtractText(string imagePath)
{
    // TesseractEngine P/Invokes into platform-specific native DLLs
    // Fails with DllNotFoundException if binaries are not in the right location
    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);
    using var img = Pix.LoadFromFile(imagePath);
    using var page = engine.Process(img);

    return page.GetText();
}

TessDataPath dizesi her dağıtım hedefinde farklı bir şekilde çözülmelidir. Bir geliştirici Windows makinesinde yerel bir klasöre işaret eder. Bir Docker Linux konteynerinde, o klasör, resim yapısı açıkça tessdata'yı COPY etmedikçe mevcut değildir. Azure App Service'de uygulama kök yolu, yerel yoldan farklıdır. Her ortam koşullu yol mantığını veya açık bir dağıtım betiğini gerektirir ve bu mantık paketin içinde yoktur — tamamen yazan ve sürdüren çağıran kodudur.

Yerel ikili dosyalar kendileri de aynı ilgi gerektirir. Kendi kendine yeten .NET 8 dağıtımlarını hedefleyen yayın profillerinde, çalışma zamanı tanımlayıcısı, paketin gönderdiği ikili varyantla eşleşmelidir. win-x64 yayımlama x64 yerel DLL'yi içerir; linux-arm64 dağıtımı, paketin ARM64 ikili dosyasını gönderdiğini doğrulamayı gerektirir — ve bir arşivlenmiş paket için, ikili dosya yoksa ekipler bunu talep etmek için bir sorun bildiremez.

IronOCR'u Anlamak

IronOCR, optimize edilmiş bir Tesseract 5 motorunu otomatik görüntü ön işleme, yerel PDF işleme ve OCR altyapısını tek bir NuGet paket referansına indirgeyen dağıtım modeli ile saran ticari bir .NET OCR kütüphanesidir. Kütüphane, .NET 6, .NET 7, .NET 8, .NET Standard 2.0 ve .NET Framework 4.6.2+'yi hedefler, aktif geliştirme ve düzenli sürümlerle.

Anahtar özellikler:

  • Tek bir NuGet paketi: dotnet add package IronOcr kütüphaneyi tüm yerel ikili dosyalarla, İngilizce için tessdata ve paketlenmiş çalışma zamanı bağımlılıklarıyla kurar — ayrı dağıtım adımlarına gerek yok
  • Aktif olarak sürdürülen: Tesseract 5 model güncellemelerini, .NET platform iyileştirmeleri ve hata düzeltmelerini izleyen düzenli sürümler
  • Otomatik ön işleme: Çağıran kod olmadan otomatik uygulanan düzeltme, gürültü giderme, kontrast artırma, binarizasyon ve çözünürlük normalleşmesi
  • Yerel PDF desteği: İkincil bir render kütüphanesi olmaksızın doğrudan okunur; şifre korumalı PDF'ler tek bir parametre ile işlenir
  • Tasarıma göre iş parçacığı güvenli: IronTesseract örnekleri iş parçacıkları arasında kullanıma uygundur; Parallel.ForEach başına iş parçacığı örneği oluşturmadan çalışır
  • 125+ dil paketi: Ayrı NuGet paketleri olarak mevcuttur (IronOcr.Languages.French vb.) — tessdata klasör yönetimi yok
  • Aranabilir PDF çıktısı: result.SaveAsSearchablePdf(), tek bir yöntem çağrısında PDF/A uyumlu aranabilir bir belge oluşturur
  • Süresiz lisanslama: $999 Lite / $1,499 Plus / $2,399 Professional — tek seferlik satın alma, işlem başına ücret yok

Özellik Karşılaştırması

Özellikcharlesw/tesseractIronOCR
Bakım DurumuArşivlenmiş (2021'den beri güncelleme yok)Aktif olarak sürdürülüyor
Tesseract sürümü4.1.15 (optimize edilmiş)
LisansApache 2.0 (ücretsiz)Ticari ($2,399 süresiz)
Yerel İkili YönetimiManuel (platform başına DLL dağıtımı)Paketlenmiş (yapılandırma yok)
Tessdata YönetimiManuel (indir + ayrı konuşlandır)Paketlenmiş (NuGet dil paketleri)
Görüntü ön işlemeYok (manuel uygulama gerektirir)Otomatik
PDF desteğiYok (harici kütüphane gerektirir)Yerel
Thread güvenliğiÇağıranın sorumluluğuYerleşik

Ayrıntılı Özellik Karşılaştırması

Özellikcharlesw/tesseractIronOCR
Bakım ve Sürümleme
Proje durumuArşivlendi — GitHub yalnızca-okunurAktif geliştirme
Tesseract motor sürümü4.1.15 (güncel)
.NET 8 yerel ikili desteğiOnaylanmadı (yeni sürüm yok)Tamamen doğrulandı
Güvenlik yaması sıklığıNoneDüzenli sürümler
Yerel İkili Dağıtımı
Windows x64 ikiliNuGet'te dahilPaketlenmiş, yapılandırma yok
Windows x86 ikiliDahil (ayrı)Paketlenmiş, yapılandırma yok
Linux x64 ikiliDahilPaketlenmiş, yapılandırma yok
macOS ikiliDahilPaketlenmiş, yapılandırma yok
ARM64 ikiliArşiv sonrası onaylanmadıPaketlenmiş, yapılandırma yok
Tessdata dağıtımıManuel indirme ve kopyalamaNuGet dil paketleri
Docker dağıtımıManuel KOPYA + yol yapılandırmasıEk adım gerekmeden çalışır
OCR Özellikleri
Temel görüntü OCREvetEvet
Otomatik düzeltmeHayırEvet
Otomatik gürültü gidermeHayırEvet
Otomatik kontrastHayırEvet
Otomatik binarizasyonHayırEvet
Çözünürlük normalleştirmesiHayırEvet (EnhanceResolution)
Yerel PDF OCRHayır (harici kütüphane)Evet
Şifre korumalı PDFHayır (harici kütüphane)Evet
Aranabilir PDF çıktısıHayırEvet
hOCR içeri aktarmaHayırEvet
Yapılandırılmış Sonuçlar
Tam belge metniEvet (page.GetText())Evet (result.Text)
Koordinatlarla kelime seviyesiEvet (iterator API)Evet (result.Words)
Satır düzeyinde erişimEvet (iterator API)Evet (result.Lines)
Güven skoruEvet (page.GetMeanConfidence())Evet (result.Confidence)
Sayfa düzeyinde sonuçlarHayırEvet (result.Pages)
OCR sırasında barkod okumaHayırEvet
Bölge bazlı OCRHayırEvet (CropRectangle)
Dil Desteği
Dil sayısıTesseract standart (100+)125+ NuGet paketleri aracılığıyla
Dil yükleme yöntemiManuel tessdata dosya indirimidotnet add package
Birden fazla dili eşzamanlı desteklemeEvetEvet

Bakım Durumu ve Proje Yaşam Döngüsü

Bu iki kütüphane arasındaki en önemli fark, hala sürdürülen bir projeden ziyade, artık bakım edilen bir proje olmaması.

charlesw/tesseract: Arşivlendiğinde Pratikte Ne Anlama Geliyor

Bir GitHub deposu arşivlendiğinde, bakım sorumlusunun tüm geliştirmeyi durdurma kararı aldığı anlamına gelir.charlesw/tesseractdeposu bu durumu açıkça gösterir. 2021'den beri hiçbir taahhüt yapılmamıştır. December 2021'de Tesseract 5 motoru, yeniden yazılmış LSTM modeli ile, düşük kaliteli taramalar üzerinde daha yüksek doğruluk sunarak piyasaya çıktı ancak bu paket aracılığıyla kullanılamaz. Arşivden bu yana keşfedilen her hata — daha yeni .NET çalışma zamanlarıyla uyumluluk sorunları, Linux'ta değişen yerel ikili yükleme davranışı veya Tesseract C kütüphanesindeki güvenlikle ilgili sorunlar dahil olmak üzere — bir düzeltme yolu yok.

Bugün Tesseract üzerinde bir NuGet bağımlılığı olan yeni projeler, zaten son güncellemesini alan bir paketle başlıyor. On iki ay içinde, o bağımlılık bir yıl daha bakımdan uzaklaşmış olacak. Üç yıl içinde, muhtemelen mevcut .NET çalışma zamanları üzerinde başarısız olacaktır. Paket kurulmaya devam edecek ve temel API derlenecek, ancak bakım borcu görünmeden birikir.

Doğruluk farkının ötesinde pratik sonucu: Bir kritik CVE, Tesseract 4.1.1'in C++ kodu için yayımlandığında, charlesw NuGet paketi bir yama almayacak. Tek yollar, kaynaklardan yerel ikiliyi çatallamak ve yeniden derlemek için — hiç de yanıltıcı olmayan bir görev — ya da maruziyeti kabul etmek.

IronOCR Yaklaşımı

IronOCR, tanıma hattına iyileştirmeler uygulayan Tesseract 5'i gönderir ve kütüphane düzenli güncellemeler alır. Tesseract 5 modelinden gelen doğruluk iyileştirmeleri, hiçbir kod değişikliği olmaksızın mevcuttur — bir paket güncellemesi onları sağlar. IronTesseract kurulum rehberi, dondurulmuş bir 2021 anlık görüntüsü yerine aktif gelişmeyi yansıtan mevcut API'yi kapsar.

.NET uygulamasında üretim OCR'i için, arşivlenmiş bir kütüphane bağımlılığı sadece teknolojik bir tercih değil, aynı zamanda bir iş riski. Bu riski dürüstçe değerlendirmek, bu karşılaştırmanın amacıdır.

Yerel İkili Dağıtımı

Bu bölüm, charlesw/tesseract'ın arşivlenen durumu dolayısıyla, en acil geliştirme sürtüşmesini yaratır. Kütüphanenin dağıtım modeli, yerel ikili dosyaları ve tessdata dosyalarını her dağıtım hattında açık eserler olarak yönetmeyi gerektirir.

charlesw/tesseract Yaklaşımı

Tesseract NuGet paketi, en yaygın platformlar için kendi runtimes/ klasöründe yerel ikili dosyalar içerir. Varsayılan .NET SDK yayın davranışını kullanan bir geliştirici iş istasyonunda, bu ikili dosyalar otomatik olarak çıkış dizinine kopyalanır ve her şey çalışır. Dağıtım hedefleri o mutlu yoldan saptığında sorunlar ortaya çıkar:

// Production code must handle path differences across environments
// There is no standard solution — every team builds their own

public class TesseractEngineFactory
{
    private static string ResolveTessDataPath()
    {
        // Dev machine: ./tessdata relative to executable
        // Docker: /app/tessdata (must be COPY'd into image)
        // Azure App Service: D:\home\site\wwwroot\tessdata
        // All three paths are different; all three need correct traineddata files

        var candidates = new[]
        {
            Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata"),
            Path.Combine(Directory.GetCurrentDirectory(), "tessdata"),
            "/app/tessdata",  // Docker-specific hard-code
        };

        foreach (var candidate in candidates)
        {
            if (Directory.Exists(candidate))
                return candidate;
        }

        throw new DirectoryNotFoundException("tessdata not found — deployment misconfigured");
    }

    public static TesseractEngine Create()
    {
        // TesseractEngine P/Invokes tesseract50.dll on Windows, libtesseract.so on Linux
        // If the native binary for the current runtime identifier is missing, throws DllNotFoundException
        return new TesseractEngine(ResolveTessDataPath(), "eng", EngineMode.Default);
    }
}

Tessdata dosyalarının kendileri başka bir dağıtım adımı ekler. İngilizce için, eng.traineddata yaklaşık 15 MB'dir. Her ek dil için, Tesseract GitHub deposundan başka bir 15 MB dosyası indirilmelidir, kaynak kontrole veya bir dağıtım artefakt deposuna taahhüt edilmeli, .csproj içinde çıktı dizinine kopyalanacak şekilde yapılandırılmalı ve her ortamda mevcut olduğu doğrulanmalıdır. .csproj girişi şu şekilde görünür:

<!-- Must be added manually for every project using charlesw/Tesseract -->
<ItemGroup>
  <None Update="tessdata\**\*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>
XML

Yeni bir projede bu girişi unutun, CI'ye dağıtın ve OCR hattı çalışma zamanında bir yol hatasıyla başarısız olur — derleme hatası değil. Başarısızlık, üretimde veya hazırlıkta ortaya çıkar, derleme zamanında değil.

ARM64 Linux üzerinde — AWS Graviton ve Apple Silikon yapı ajanları standart hale geldikçe giderek daha alakalı olan — arşivlenmiş paket, güncellenmiş ikililere dair bir garanti sunmaz. Paketin son yayını, ARM64 sunucu altyapısının yaygın olarak benimsenmesinden önce gelir.

IronOCR Yaklaşımı

IronOCR, tüm yerel ikili dosyalarını ve İngilizce tessdatayı NuGet paketi içinde kendi içinde paketler. Yönetilecek hiçbir tessdata dosyası, hiçbir .csproj CopyToOutputDirectory girişi ve yazılacak hiçbir platforma özgü yol mantığı yoktur. Tüm kurulum şudur:

// Install: dotnet add package IronOcr
//Hayırtessdata download.Hayırnative binary configuration.Hayırpath management.

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

var text = new IronTesseract().Read("document.jpg").Text;
C#

Bu kod Windows x64, Linux x64, Linux ARM64, macOS x64 ve macOS ARM64 üzerinde değişmeden çalışır. Aynı ikili çıktı, herhangi bir platforma özgü mantık gerektirmeden Docker, Azure App Service ve AWS Lambda'ya dağıtılır. Docker dağıtım kılavuzu ve Linux dağıtım kılavuzu, Windows dışındaki hedefler için özel gereksinimleri belgelemektedir, ki bunlar minimale indirgenmiştir.

Ek diller NuGet aracılığıyla kurulur — dosya indirmeleri yok, dizin yapılandırması yok:

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

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);
var result = ocr.Read("multilingual-document.jpg");

Dağıtım karmaşıklığındaki fark ihmal edilebilir düzeyde değildir. CI/CD hatları içinde birden fazla dağıtım hedefiyle charlesw/tesseract'ı koruyan ekipler, IronOCR'nin tamamen ortadan kaldırdığı yol ve ikili sorunlarıyla rutin olarak 4–8 saat harcar. Dağıtım sürtüşmesi olmadan görüntülerden metin okuma için Tam bir adım adım kılavuz,IronOCR öğreticileri aracılığıyla tamamlanmıştır.

Tesseract 4.x vs Tesseract 5 Doğruluk

charlesw/tesseract paketi, Tesseract 5 yeniden yazımından önceki son 4.x sürümü olan Tesseract 4.1.1'i sunar. IronOCR, resim motoruna gönderilmeden önce ek ön işleme uygulanan Tesseract 5'i sunar. Gerçek dünya belgelerinde doğruluk farkı büyük ölçüde fazladır.

charlesw/tesseract Yaklaşımı

Temiz, yüksek DPI taramalarda, Tesseract 4.1.1, Tesseract 5 ile karşılaştırılabilir sonuçlar üretir. Sapma, düşük çözünürlüklü görüntüler, hafifçe eğilmiş belgeler, fakslar ve basılı metinlerin fotoğraflarında ortaya çıkar. Tesseract 4.1.1'deki LSTM modeli, Tesseract 5 ile gönderilen ek eğitim verileri ve mimari iyileştirmelerin faydasını görmedi.

Daha kritik bir şekilde,charlesw/tesseractön işleme sağlamaz. Ham bir görüntü doğrudan motora gönderilir. Bir tüketici düz yatak tarayıcısından 150 DPI'lik bir taramada, doğruluk %40–70'e düşer. 5 derece eğilmiş bir belgede, doğruluk %70'in altına düşebilir. Eğikte açılı, dengesiz aydınlatmalı bir belgenin fotoğrafında, doğruluk %10–40 olabilir:

// charlesw/Tesseract: what you get without preprocessing
public string ExtractText(string imagePath)
{
    using var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default);
    using var img = Pix.LoadFromFile(imagePath);
    using var page = engine.Process(img);

    // On a poor-quality scan: 40-70% accuracy
    // On a skewed document: 60-80% accuracy
    // On a photo of a document: 10-40% accuracy
    return page.GetText();
}

Kullanılabilir doğruluğu geri kazanmak, gri tonlamalı dönüşüm, kontrast artırma, ikili hale getirme, Hough dönüşümü veya projeksiyon profilleri ile yeniden eğme, gürültü giderme ve DPI normalizasyonu gibi işlemler gerektirir. Bu işlem hattı, System.Drawing, SixLabors.ImageSharp veya benzeri ile kullanılan 100-300 ek kod satırıdır — bunlardan hiçbiri Tesseract paketinin bir parçası değildir. Her bir ön işleme adımı ayrı bir uygulama, test etme ve ayarlama gerektirir. Hough dönüşümü ile doğru şekilde uygulanan yalnızca deskew adımı, 50+ satırdır.

IronOCR Yaklaşımı

IronOCR, görüntüyü Tesseract 5 motoruna göndermeden önce otomatik ön işleme uygular. Ham charlesw/tesseract'tan %40–70 doğruluk getiren aynı düşük kaliteli tarama, IronOCR'den %95+'a yükselir çünkü kütüphane görüntüyü motorla tanıştırmadan önce normalleştirir. Açık kontrol gerektiğinde, ön işleme API'si özel uygulamayı gerektirmeyen işlem adımlarını yansıtır.

using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");

// Named preprocessing steps — no custom image processing code
input.Deskew();               // Corrects rotation up to ~10 degrees
input.DeNoise();              // Removes speckle and scanner noise
input.Contrast();             // Normalizes contrast
input.Binarize();             // Adaptive thresholding
input.EnhanceResolution(300); // Upsamples to 300 DPI if needed

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");

Görüntü kalitesi düzeltme kılavuzu, ön işleme filtrelerinin tam setini ve kullanım alanlarını belgeler. Renkli arka planlı veya dengesiz ışıklı belgeler için, görüntü renk düzeltme kılavuzu ek filtreleri kapsar. Her iki kılavuz da geçerli API'yi yansıtır — charlesw belgeleri, artık güncelleme almayan bir kütüphaneyi anlatırken.

Özellikle düşük kaliteli tarama senaryoları için, düşük kaliteli tarama OCR örneği, somut girdilerle önce/sonra doğruluk farkını gösterir.

Platforma Özgü Dağıtım Kodu

Yerel ikili yönetimi ve platformlar arası dağıtım arasındaki etkileşim, yalnızcacharlesw/tesseractpaketleme modelinin neden olduğu bir kod kategorisi yaratır ve bu kodun IronOCR projelerinde bir benzeri yoktur.

charlesw/tesseract Yaklaşımı

Birden fazla ortamda charlesw/tesseract'ı dağıtan ekipler, OCR ile ilgisi olmayan koşullu dağıtım mantıkları biriktirir. Tessdata'ya yol, ortam tarafından değişir. Yerel ikili yükleme davranışı, Windows ve Linux arasında değişir. Docker resimleri, bazı Linux temel resimlerinde Leptonica bağımlılıkları için açık COPY talimatları ve apt-get komutları gerektirir:

// Platform-conditional code required to deploy charlesw/Tesseract
// This block exists in real production codebases

public static class TesseractFactory
{
    public static string GetTessDataPath()
    {
        // Runtime environment detection — purely deployment plumbing
        if (Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") == "true")
        {
            // Docker: tessdata must be explicitly COPY'd into the image
            return "/app/tessdata";
        }

        if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
        {
            // Linux bare metal: path convention differs from Windows
            return Path.Combine(AppContext.BaseDirectory, "tessdata");
        }

        // Windows dev machine
        return @"./tessdata";
    }

    public static TesseractEngine CreateEngine()
    {
        // x86/x64 conditional logic may be needed for specific deployment targets
        // EngineMode.Default uses LSTM; EngineMode.TesseractOnly uses legacy engine
        return new TesseractEngine(GetTessDataPath(), "eng", EngineMode.Default);
    }
}

Charlesw/tesseract'ı kullanan bir proje için Dockerfile, açıkça tessdata kopyalama gerektirir ve baz görüntüye bağlı olarak sistem düzeyinde Leptonica paket kurulumu gerektirebilir.

# Dockerfile for charlesw/Tesseract deployment
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

# Leptonica may need system installation depending on base image
RUN apt-get update && apt-get install -y libleptonica-dev

COPY --from=build /app/publish /app

# tessdata must be explicitly staged — not bundled in the NuGet package
COPY tessdata/ /app/tessdata/

WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]
Text

Bu Dockerfile, charlesw/tesseract'ın dağıtım modeline ilişkin operasyonel bilgileri doğrudan altyapı koduna gömer. Baz görüntü değiştiğinde veya Linux dağıtımı Leptonica'yı güncellediğinde derleme bozulur. Arşivlenmiş bir paketle, tek çözüm özelleştirilmiş bir yerel ikili derleme hattı bulundurmaktır.

IronOCR Yaklaşımı

IronOCR'nın tessdata KOPYALA adımı yoktur, Leptonica için sistem paketi kurulumu yoktur ve platforma özgü yol mantığı yoktur.IronOCR için Docker dağıtım kılavuzu, Linux üzerinde System.Drawing desteği için yalnızca standart libgdiplus kurulumunu gerektirir — Linux üzerinde herhangi bir .NET uygulamasının zaten ihtiyacı olan bir altyapı:

# Dockerfile for IronOCR deployment
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base

# libgdiplus is standard for any .NET app using System.Drawing on Linux
RUN apt-get update && apt-get install -y libgdiplus

COPY --from=build /app/publish /app

# No tessdata COPY. No Leptonica apt-get. No native binary management.

WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]
Text

IronOCR'nin AWS dağıtım kılavuzu ve Azure dağıtım kılavuzu aynı deseni izler: bir standart sistem paketi, ardından uygulama. Kütüphaneye özgü altyapı kodu gerekmez.

API Eşleme Başvurusu

charlesw/tesseractIronOCR Karşılığı
new TesseractEngine(tessDataPath, "eng", EngineMode.Default)new IronTesseract() (yol yok, mod seçimi yok)
Pix.LoadFromFile(imagePath)input.LoadImage(imagePath)
engine.Process(img)ocr.Read(input)
page.GetText()result.Text
page.GetMeanConfidence()result.Confidence
page.GetIterator()result.Words, result.Lines, result.Pages
iter.GetText(PageIteratorLevel.Word)word.Text (foreach result.Words üzerinde)
iter.GetConfidence(PageIteratorLevel.Word)word.Confidence
iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds)word.X, word.Y, word.Width, word.Height
EngineMode.DefaultOtomatik (Tesseract 5 LSTM varsayılan)
EngineMode.TesseractOnlyocr.Configuration.PageSegmentationMode
PageIteratorLevel.Wordresult.Words koleksiyonu
PageIteratorLevel.Lineresult.Lines koleksiyonu
TessDataPath (manuel yol)Uygulanabilir değil (paketlenmiş)
Manuel tessdata dosya indirimidotnet add package IronOcr.Languages.French
Manuel deskew (Hough dönüşümü)input.Deskew()
Manuel kontrast artırmainput.Contrast()
Manuel ikili hale getirmeinput.Binarize()
Manuel DPI ölçeklemeinput.EnhanceResolution(300)
Mevcut değil (harici kütüphane)input.LoadPdf(pdfPath)
Mevcut değilresult.SaveAsSearchablePdf(outputPath)

Takımlar charlesw/tesseract'dan IronOCR'ye Geçmeyi Düşündüğünde

Eski Bir Eğitici Bulan Yeni Projeler

En yaygın senaryo, bir geliştiricinin yeni bir projeye başlaması, charlesw/tesseract referans alan 2019 veya 2020 Stack Overflow cevabını veya blog gönderisini bulması, paketi kurması ve proje ortasında bunun arşivlendiğini keşfetmesidir. Bu noktada ekip bir karar verir: dondurulmuş bir bağımlılığa devam etmek veya kod tabanı büyümeden önce göç etmek. Gönderim öncesi arşiv durumu fark eden ekipler genellikle hemen geçiş yapar — API yüzeyi küçük olduğu için charlesw/tesseract'tan IronOCR'ye geçiş genellikle birkaç saat sürer ve sürekli bakım riski ortadan kalkar. IronOCR eğitici merkezi, başlangıçtacharlesw/tesseractbağımlılığına yol açan güncelliğini yitirmiş topluluk içeriğini değiştiren mevcut örnekler sunar.

Çoklu Platform Dağıtım Gereksinimleri

İlk başta Windows üzerinde charlesw/tesseract'ı dağıtan ve sonra Linux hedefleri ekleyen ekipler — Kubernetes ve Docker'ın benimsenmesinin artmasıyla yaygınlaşan bir durum — yerel ikili dağıtım karmaşıklığına tamamen vururlar. Tessdata yollarını yapılandırma, Leptonica'nın kullanılabilirliğini doğrulama, platforma özel Docker talimatlarını yönetme: hızla birikir. Dağıtım hedefi ARM64 (AWS Graviton maliyet için, Apple Silicon CI için) eklediğinde, arşiv paketin ikili desteği belirsiz hale gelir. Bu durumdaki ekipler, dağıtım ile ilgili destek yükü ticari lisans maliyetini aştığında IronOCR'yi değerlendirir. IronOCR'nin dağıtımının nasıl göründüğünü karşılaştırmak için Linux dağıtım kılavuzu gösterir: önemli ölçüde daha basit. Mevcut fiyatlar için lisanslama sayfasına bakın.

Doğruluk Eşiklerini Aşmayan Belgeler

Temiz, kontrol edilen girdilerde — yüksek DPI'li yazılı belgelerin taramaları — charlesw/tesseract'ı kullanan ekipler kabul edilebilir sonuçlar elde eder ve hemen değiştirme sebebi yoktur. Tetikleyici gerçek dünya belgeleri geldiğinde olur: dış kaynaklı taranmış formlar, fakslar, mobil cihazlardan çekilen fotoğraflar, düşük kontrastı bozulmuş eski yazılı materyaller. Ön işleme olmadan, bu girdiler üzerindencharlesw/tesseractdoğruluğu kullanılabilir eşiklerin altına düşer. Arşivli bir paketin üzerine bir ön işleme hattı kurmak, geleceği olmayan bir bağımlılığı destekleyen altyapıya geliştirme süresi yatırmak demektir. Bu kırılma noktasında, IronOCR'nın otomatik ön işleme ve Tesseract 5 doğruluğu için dava kolaylaşır.

Güvenlik ve Uyum İncelemeleri

Düzenlenmiş ortamlar — sağlık, finans, hükümet — bağımlılık denetimleri arşivlenmiş paketleri bulgu olarak işaretler. Güvenlik yamaları alamayan bir bağımlılık, mevcut güvenlik açığı durumuna bakılmaksızın bir uyum riski oluşturur. Charlesw/tesseract paketi bir C++ kütüphanesini sarar; Tesseract 4.1.1'in C kodundaki herhangi bir gelecekteki CVE, NuGet paketi aracılığıyla hiçbir iyileştirme yolu bulamaz. Arşivlenmiş bir bağımlılıkla inşa edilmiş bir sistemi inceleyen uyum ekipleri ya bir yedek ya da belgelenmiş bir istisna isteyecektir. Bu durumu bir güvenlik denetiminde deneyimleyen ekipler, her denetim döngüsü için bir istisna belgelemek yerine bulguyu temizlemek için IronOCR'yi tercih ederler.

Tesseract 5 Doğruluk Gereksinimi

Doğruluk gereksinimlerinicharlesw/tesseractile karşılaştıran ve Tesseract 4.1.1'i yetersiz bulan ekipler — özellikle el yazısı metin, bozulmuş taramalar veya alışılmadık yazı tiplerine sahip belgeler üzerinde — arşivlenmiş paketi kullanarak motoru yükseltemez. Kitaplıkları değiştirmeden Tesseract 5'i almak mümkün değildir. IronOCR, otomatik ön işlemeye ek olarak Tesseract 5 doğruluğunu sunar ve doğruluk artışını katlar. Bozulmuş belgelerdeki fark (düşük DPI taramalarında %40–70'e karşı %95+) yeterince büyük ki bu, bakım endişesinden bağımsız olarak göç kararlarını yönetir.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

TesseractEngine'i IronTesseract ile Değiştirmek

charlesw/tesseract API'si, açıkça belirtilmiş tessdata yolu ve dil kodu dizesi ile bir TesseractEngine oluşturmaya odaklanır. IronOCR, bu tüm oluşturma modelini sıfır argümanlı bir yapılandırıcı ile değiştirir. TessDataPath sabiti ve EngineMode enumu içinde örtük olan motor yapılandırması önemsiz hale gelir —IronOCR kendi motor başlatmasını dahili olarak yönetir:

// Before: charlesw/Tesseract
using var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
using var img = Pix.LoadFromFile(imagePath);
using var page = engine.Process(img);
var text = page.GetText();

// After: IronOCR
var text = new IronTesseract().Read(imagePath).Text;

TessDataPath sabiti, tessdata klasörü ve .csproj CopyToOutputDirectory girişi tamamen silinir. Platforma özgü herhangi bir yük yolu çözümleme kodu da silinir. IronTesseract API referansı, varsayılanların ötesinde motor düzeyinde ayar gerekiyorsa tam yapılandırma yüzeyini kapsar.

Sayfa Yineleyiciyi Yapılandırılmış Sonuçlarla Değiştirme

charlesw/tesseract, page.GetIterator(), iter.Begin(), iter.Next() ile PageIteratorLevel enum değerlerini kullanarak bir iterator deseni aracılığıyla kelime seviyesinde veri sunar. IronOCR, bu işi sonuç nesnesinde doğrudan koleksiyon erişimi ile değiştirir. İteratör kodu silinir; veriler doğrudan erişilebilirdir:

// Before: charlesw/Tesseract iterator pattern
using var iter = page.GetIterator();
iter.Begin();
do
{
    if (iter.TryGetBoundingBox(PageIteratorLevel.Word, out var bounds))
    {
        var word = iter.GetText(PageIteratorLevel.Word);
        var confidence = iter.GetConfidence(PageIteratorLevel.Word);
        Console.WriteLine($"'{word?.Trim()}' at ({bounds.X1},{bounds.Y1}) - {confidence:P1}");
    }
} while (iter.Next(PageIteratorLevel.Word));

// After:IronOCR direct collection access
var result = new IronTesseract().Read(imagePath);
foreach (var word in result.Words)
{
    Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) - {word.Confidence}%");
}
C#

sonuç okuma kılavuzu tüm yapılandırılmış sonuç modelini kapsar — sayfalar, paragraflar, satırlar, kelimeler ve karakterler — iteratör yönetimi olmadan hepsi erişilebilir.

PDF Desteği Ekleme

Charlesw/tesseract'ın PDF yeteneği yoktur. Resimlerle birlikte PDF işleyen projeler genellikle PdfiumViewer, PDFtoImage veya benzeri olan ikinci bir bağımlılığa sahiptir — bu, PDF sayfalarını Tesseract'a geçmeden önce Bitmap nesnelerine dönüştürür. Bu ikincil kütüphane ve kendi yerel ikili bağımlılığı, IronOCR'ye geçerken tamamen kaldırılabilir:

// Before: charlesw/Tesseract + PdfiumViewer (two libraries, two native dependencies)
using (var document = PdfDocument.Load(pdfPath))
using (var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default))
{
    for (int i = 0; i < document.PageCount; i++)
    {
        using var pageImage = document.Render(i, 300, 300, PdfRenderFlags.CorrectFromDpi);
        // Save temp file, load into Pix, process, delete temp file...
    }
}

// After:IronOCR(one library, native PDF support)
var text = new IronTesseract().Read(pdfPath).Text;
C#

PDF giriş kılavuzu, sayfa aralığı seçimi, parola korumalı PDF'ler ve aranabilir PDF çıktısını kapsar —charlesw/tesseractaltında ayrı kütüphaneler ve önemli ölçüde kod gerektiren yetenekler.

Dil Paketi Geçişi

charlesw/tesseract içindeki her dil, ayrı .traineddata dosya indirmesi, manuel depolama ve açık dağıtım yapılandırması gerektirir.IronOCR dil paketlerine geçiş, dil başına bir NuGet paketi eklemesidir, başka değişiklik yoktur:

# Remove manual tessdata files and .csproj CopyToOutputDirectory entries
# Add NuGet language packs instead:
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.German
SHELL

çoklu dillere yönelik kılavuz, eş zamanlı çoklu dil tanımasını kapsar. Diller indeksi, mevcut 125+ dil paketinin tamamını listeler.

Ek IronOCR Yetenekleri

Charlesw/tesseract eşdeğerleriyle doğrudan eşleşen özelliklerin ötesinde, IronOCR'nin arşivlenmiş pakette karşılığı olmayan yetenekleri şunlardır:

  • Aranabilir PDF çıktısı: result.SaveAsSearchablePdf(), orijinal görüntünün üzerine örtüşen görünmez bir metin katmanıyla PDF oluşturur —charlesw/tesseractaltında ayrı bir PDF kütüphanesi gerektiren bir özellik için tek bir yöntem çağrısı
  • Bölge tabanlı OCR: CropRectangle görüntünün belirli alanlarına tanımayı sınırlayarak, yapılandırılmış belgeler için (faturalar ve formlar gibi) hız ve doğruluğu artırır
  • OCR sırasında barkod okuma: ocr.Configuration.ReadBarCodes = true, bir dokümandan tek bir geçişte hem metni hem de barkodları çıkarır
  • Tüm seviyelerde güven puanları: Kelime başına, satır başına ve sayfa başına güven doğrudan sonuç nesnesinden erişilebilir ve iteratör kodu ihtiyacı olmadan
  • Taralı belge işleme: Çok sayfalı taralı belgeler için otomatik sayfa döndürme algılama dahil özel hat optimizasyonları
  • Asenkron OCR: OCR işlemleri için yerel asenkron destek — ASP.NET uygulamaları için OCR üzerinde duraklatmanın kabul edilemez olduğu yerlerde geçerli
  • Tablo çıkarma: Taralı belgelerden tablo verilerinin yapılandırılmış olarak çıkarılması, satır ve sütun ilişkilerini korur
  • hOCR eksportu: result.SaveAsHocrFile(), aşağı akış işlemesi için kelime koordinatlarıyla hOCR HTML olarak OCR sonucunu çıktılar

.NET Uyumluluğu ve Geleceğe Hazırlık

IronOCR, .NET 6, .NET 7, .NET 8 ve .NET Standard 2.0'yi hedefler ve her sürümde aktif doğrulama yapar. .NET 9 genel erişilebilirliğe ulaştıkça ve .NET 10, 2026'da önizlemeye girdiğinde,IronOCR bu uyumluluğu sürdürecek güncellemeleri alır. 2021'de arşivlenmiş olancharlesw/tesseractpaketi, .NET Standard 2.0'ı hedef alır — mevcut .NET çalışma zamanları üzerinde geriye dönük uyumlulukla çalışır, ancak hiçbir zaman .NET 9 veya daha yeni sürümlerle doğrulanmayacak, ve ortaya çıkan herhangi bir çalışma zamanı düzeyinde uyumsuzluk paketti çözüm bulunamaz. Çok yıllık bir uygulama yaşam döngüsüne sahip ekipler için bu yörünge önemlidir: IronOCR, .NET sürüm takvimini takip eder; charlesw/tesseract, dört yıl önce bu takibi bıraktı.

Sonuç

Charlesw/tesseract paketi, on yıl boyunca .NET Tesseract entegrasyonunu tanımladı ve indirme sayısını haklı olarak kazandı. Temiz, yüksek DPI'li görüntü girdilerinde ve kararlı dağıtım ortamlarındaki projeler için işlevselliğini sürdürür. Bu, ilk kurulum sırasında çoğu ekibin tanıdığı bir kullanım durumu değildir.

Arşiv durumu, küçük bir dipnot değildir. Bu, Tesseract 5 doğruluğunun elde edilemeyeceği, güvenlik yamalarının gelmeyeceği ve modern çok platformlu altyapıda dağıtım karmaşıklığının bakımcidan hiçbir çözüm yolu olmadığı anlamına gelir. ARM64 derleme ajanlarına, Docker dağıtım gereksinimlerine veya bozulmuş tarama doğruluk eşiğine rastlayan takımlar, tam bu gereksinimlerin en önemli olduğu anda, arşiv paketin sınırlarına vuracak.

IronOCR, charlesw/tesseract'ın yarattığı özel sürtüşme noktalarını ele alır: tessdata dağıtım töreni ortadan kalkar, yerel ikili platforma özgü mantık ortadan kalkar ve Tesseract 5 doğruluğu üzerine otomatik ön işleme ile birlikte gelir. Lisans maliyeti — $999 süresiz başlangıcı — kaydedilen dağıtım saatleri, yazılması gerekmeyen ön işleme kodu ve bağımlılık grafiğinden ortadan kaldırılan bakım riski ile karşılaştırılır.

2026'da yeni projeler için, arşivli bir kütüphane ile başlamak bilinen gelecekteki maliyetleri kabul etme kararıdır. Zaten charlesw/tesseract'ı üretimde çalıştıran ekipler için geçiş yolu kısadır — API yüzeyi küçüktür, kod silmeleri eklemelerden fazladır ve IronOCR belgeleri arşiv paketinin gerektirdiği her model için mevcut yedekler sunar.

Lütfen dikkate alın: PDFium ve Tesseract, ilgili sahiplerinin tescilli markalarıdır. Bu site, Chromium Project veya Google ile ilişkilendirilmemiş, onaylanmamış veya desteklenmemiştir. 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