Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

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

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();
}
// 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();
}
Imports Tesseract

Private Const TessDataPath As String = "./tessdata" ' Works on dev — breaks in Docker

Public Function ExtractText(imagePath As String) As String
    ' TesseractEngine P/Invokes into platform-specific native DLLs
    ' Fails with DllNotFoundException if binaries are not in the right location
    Using engine As New TesseractEngine(TessDataPath, "eng", EngineMode.Default)
        Using img As Pix = Pix.LoadFromFile(imagePath)
            Using page As Page = engine.Process(img)
                Return page.GetText()
            End Using
        End Using
    End Using
End Function
$vbLabelText   $csharpLabel

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,999 Professional — tek seferlik satın alma, işlem başına ücret yok

Özellik Karşılaştırması

Özellik charlesw/tesseract IronOCR
Bakım Durumu Arşivlenmiş (2021'den beri güncelleme yok) Aktif olarak sürdürülüyor
Tesseract sürümü 4.1.1 5 (optimize edilmiş)
Lisans Apache 2.0 (ücretsiz) Ticari ($2,999 süresiz)
Yerel İkili Yönetimi Manuel (platform başına DLL dağıtımı) Paketlenmiş (yapılandırma yok)
Tessdata Yönetimi Manuel (indir + ayrı konuşlandır) Paketlenmiş (NuGet dil paketleri)
Görüntü ön işleme Yok (manuel uygulama gerektirir) Otomatik
PDF desteği Yok (harici kütüphane gerektirir) Yerel
Thread güvenliği Çağıranın sorumluluğu Yerleşik

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

Özellik charlesw/tesseract IronOCR
Bakım ve Sürümleme
Proje durumu Arşivlendi — GitHub yalnızca-okunur Aktif geliştirme
Tesseract motor sürümü 4.1.1 5 (güncel)
.NET 8 yerel ikili desteği Onaylanmadı (yeni sürüm yok) Tamamen doğrulandı
Güvenlik yaması sıklığı None Düzenli sürümler
Yerel İkili Dağıtımı
Windows x64 ikili NuGet'te dahil Paketlenmiş, yapılandırma yok
Windows x86 ikili Dahil (ayrı) Paketlenmiş, yapılandırma yok
Linux x64 ikili Dahil Paketlenmiş, yapılandırma yok
macOS ikili Dahil Paketlenmiş, yapılandırma yok
ARM64 ikili Arşiv sonrası onaylanmadı Paketlenmiş, yapılandırma yok
Tessdata dağıtımı Manuel indirme ve kopyalama NuGet dil paketleri
Docker dağıtımı Manuel KOPYA + yol yapılandırması Ek adım gerekmeden çalışır
OCR Özellikleri
Temel görüntü OCR Evet Evet
Otomatik düzeltme Hayır Evet
Otomatik gürültü giderme Hayır Evet
Otomatik kontrast Hayır Evet
Otomatik binarizasyon Hayır Evet
Çözünürlük normalleştirmesi Hayır Evet (EnhanceResolution)
Yerel PDF OCR Hayır (harici kütüphane) Evet
Şifre korumalı PDF Hayır (harici kütüphane) Evet
Aranabilir PDF çıktısı Hayır Evet
hOCR içeri aktarma Hayır Evet
Yapılandırılmış Sonuçlar
Tam belge metni Evet (page.GetText()) Evet (result.Text)
Koordinatlarla kelime seviyesi Evet (iterator API) Evet (result.Words)
Satır düzeyinde erişim Evet (iterator API) Evet (result.Lines)
Güven skoru Evet (page.GetMeanConfidence()) Evet (result.Confidence)
Sayfa düzeyinde sonuçlar Hayır Evet (result.Pages)
OCR sırasında barkod okuma Hayır Evet
Bölge bazlı OCR Hayır Evet (CropRectangle)
Dil Desteği
Dil sayısı Tesseract standart (100+) 125+ NuGet paketleri aracılığıyla
Dil yükleme yöntemi Manuel tessdata dosya indirimi dotnet add package
Birden fazla dili eşzamanlı destekleme Evet Evet

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);
    }
}
// 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);
    }
}
Imports System
Imports System.IO

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

Public Class TesseractEngineFactory
    Private Shared Function ResolveTessDataPath() As String
        ' 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

        Dim candidates = New String() {
            Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tessdata"),
            Path.Combine(Directory.GetCurrentDirectory(), "tessdata"),
            "/app/tessdata"  ' Docker-specific hard-code
        }

        For Each candidate In candidates
            If Directory.Exists(candidate) Then
                Return candidate
            End If
        Next

        Throw New DirectoryNotFoundException("tessdata not found — deployment misconfigured")
    End Function

    Public Shared Function Create() As TesseractEngine
        ' 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)
    End Function
End Class
$vbLabelText   $csharpLabel

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:


<ItemGroup>
  <None Update="tessdata\**\*">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

<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;
// 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;
Imports IronOcr

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

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

Dim text As String = New IronTesseract().Read("document.jpg").Text
$vbLabelText   $csharpLabel

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");
// 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");
Imports IronOcr

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.French
ocr.AddSecondaryLanguage(OcrLanguage.German)
Dim result = ocr.Read("multilingual-document.jpg")
$vbLabelText   $csharpLabel

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();
}
// 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();
}
Imports Tesseract

Public Function ExtractText(imagePath As String) As String
    Using engine As New TesseractEngine(TessDataPath, "eng", EngineMode.Default)
        Using img As Pix = Pix.LoadFromFile(imagePath)
            Using page As 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()
            End Using
        End Using
    End Using
End Function
$vbLabelText   $csharpLabel

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}%");
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}%");
Imports IronOcr

Using input As 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

    Dim result = New IronTesseract().Read(input)
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

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);
    }
}
// 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);
    }
}
Imports System
Imports System.IO
Imports System.Runtime.InteropServices

Public Module TesseractFactory
    Public Function GetTessDataPath() As String
        ' Runtime environment detection — purely deployment plumbing
        If Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER") = "true" Then
            ' Docker: tessdata must be explicitly COPY'd into the image
            Return "/app/tessdata"
        End If

        If RuntimeInformation.IsOSPlatform(OSPlatform.Linux) Then
            ' Linux bare metal: path convention differs from Windows
            Return Path.Combine(AppContext.BaseDirectory, "tessdata")
        End If

        ' Windows dev machine
        Return "./tessdata"
    End Function

    Public Function CreateEngine() As TesseractEngine
        ' 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)
    End Function
End Module
$vbLabelText   $csharpLabel

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"]

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"]

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/tesseract IronOCR 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.Default Otomatik (Tesseract 5 LSTM varsayılan)
EngineMode.TesseractOnly ocr.Configuration.PageSegmentationMode
PageIteratorLevel.Word result.Words koleksiyonu
PageIteratorLevel.Line result.Lines koleksiyonu
TessDataPath (manuel yol) Uygulanabilir değil (paketlenmiş)
Manuel tessdata dosya indirimi dotnet add package IronOcr.Languages.French
Manuel deskew (Hough dönüşümü) input.Deskew()
Manuel kontrast artırma input.Contrast()
Manuel ikili hale getirme input.Binarize()
Manuel DPI ölçekleme input.EnhanceResolution(300)
Mevcut değil (harici kütüphane) input.LoadPdf(pdfPath)
Mevcut değil result.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;
// 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;
Imports Tesseract

Dim text As String

Using engine As New TesseractEngine("./tessdata", "eng", EngineMode.Default)
    Using img As Pix = Pix.LoadFromFile(imagePath)
        Using page As Page = engine.Process(img)
            text = page.GetText()
        End Using
    End Using
End Using

' After: IronOCR
text = New IronTesseract().Read(imagePath).Text
$vbLabelText   $csharpLabel

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}%");
}
// 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}%");
}
Imports System

' Before: charlesw/Tesseract iterator pattern
Using iter = page.GetIterator()
    iter.Begin()
    Do
        Dim bounds As Object
        If iter.TryGetBoundingBox(PageIteratorLevel.Word, bounds) Then
            Dim word = iter.GetText(PageIteratorLevel.Word)
            Dim confidence = iter.GetConfidence(PageIteratorLevel.Word)
            Console.WriteLine($"'{word?.Trim()}' at ({bounds.X1},{bounds.Y1}) - {confidence:P1}")
        End If
    Loop While iter.Next(PageIteratorLevel.Word)
End Using

' After: IronOCR direct collection access
Dim result = New IronTesseract().Read(imagePath)
For Each word In result.Words
    Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) - {word.Confidence}%")
Next
$vbLabelText   $csharpLabel

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;
// 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;
Imports PdfiumViewer
Imports Tesseract

Using document As PdfDocument = PdfDocument.Load(pdfPath)
    Using engine As New TesseractEngine(TessDataPath, "eng", EngineMode.Default)
        For i As Integer = 0 To document.PageCount - 1
            Using pageImage = document.Render(i, 300, 300, PdfRenderFlags.CorrectFromDpi)
                ' Save temp file, load into Pix, process, delete temp file...
            End Using
        Next
    End Using
End Using

' After:IronOCR(one library, native PDF support)
Dim text As String = New IronTesseract().Read(pdfPath).Text
$vbLabelText   $csharpLabel

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
# 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ınPDFium 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.

Sıkça Sorulan Sorular

charlesw/tesseract (.NET Tesseract sarmalayıcı) nedir?

charlesw/tesseract (.NET Tesseract sarmalayıcı), geliştiriciler ve işletmeler tarafından görüntülerden ve belgelerden metin çıkarmak için kullanılan bir OCR çözümüdür. .NET uygulama geliştirme için IronOCR ile birlikte değerlendirilen birkaç OCR seçeneğinden biridir.

.NET geliştiricileri için IronOCR, charlesw/tesseract (.NET Tesseract sarmalayıcı) ile nasıl karşılaştırılır?

IronOCR, IronTesseract'ı temel motoru olarak kullanan bir NuGet yerli .NET OCR kütüphanesidir. charlesw/tesseract (.NET Tesseract sarmalayıcı) ile karşılaştırıldığında, daha basit bir dağıtım (herhangi bir SDK yükleyici yok), sabit fiyatlandırma ve COM ara yüzde ya da bulut bağımlılıkları olmadan temiz bir C# API sunar.

IronOCR, charlesw/tesseract (.NET Tesseract sarmalayıcı)dan daha mı kolay kurulabilir?

IronOCR, tek bir NuGet paketi aracılığıyla yüklenir. SDK kurulumları, kopyalamak için lisans dosyaları, kaydedilecek COM bileşenleri veya yönetilecek ayrı çalışma zamanı ikili dosyaları yoktur. Tüm OCR motoru paket içinde yer alır.

charlesw/tesseract (.NET Tesseract sarmalayıcı) ile IronOCR arasında hangi doğruluk farkları vardır?

IronOCR, standart iş belgeleri, faturalar, makbuzlar ve taranmış formlar için yüksek tanıma doğruluğu sağlar. Çok kötü durumda olan belgeler ya da nadir yazılar için ise doğruluk, kaynak kalitesine göre değişiklik gösterebilir. IronOCR, düşük kaliteli girişlerde tanımayı geliştirmek için görüntü ön işleme filtreleri içerir.

IronOCR, PDF metin çıkarma desteği sunuyor mu?

Evet. IronOCR, tek bir çağrıda hem yerel PDF'lerden hem de taranmış PDF görüntülerinden metin çıkarır. Çok sayfalı TIFF dosyaları, görüntüler ve akıntılar da desteklenir. Taranmış PDF'ler için, OCR sayfa bazında uygulanır ve her sayfa için sonuç nesneleri sağlanır.

charlesw/tesseract (.NET Tesseract sarmalayıcı) lisanslaması ile IronOCR'yi nasıl karşılaştırılır?

IronOCR, sayfa veya tarama başına ücret içermeyen sabit oranlı bir süresiz lisans kullanır. Yüksek belge hacmi işleyen kuruluşlar, hacme rağmen aynı lisans maliyetini öder. Ayrıntılar ve hacim fiyatlandırması IronOCR lisans sayfasında mevcuttur.

IronOCR hangi dilleri destekliyor?

IronOCR, ayrı NuGet dil paketleri aracılığıyla 127 dili destekler. Bir dil eklemek için tek bir 'dotnet add package IronOcr.Languages.{Language}' komutu gerekir. Manuel dosya yerleştirme veya yol yapılandırması gerekmez.

.NET projesine IronOCR'yi nasıl kurarım?

NuGet üzerinden kurun: 'Install-Package IronOcr' Package Manager Console'da veya 'dotnet add package IronOcr' CLI'de. Ek dil paketleri aynı şekilde yüklenir. Yerel SDK kurucusu gerekmez.

IronOCR, charlesw/tesseract'ten farklı olarak Docker ve konteynerize dağıtımlar için uygun mu?

Evet. IronOCR, NuGet paketi aracılığıyla Docker konteynerlerinde çalışır. Lisans anahtarı, bir ortam değişkeni aracılığıyla ayarlanır. Lisans dosyaları, SDK yolları veya OCR motoru için hacimlerin bağlanmasına gerek yoktur.

charlesw/tesseract karşısında IronOCR'yi satın almadan önce deneyebilir miyim?

Evet. IronOCR deneme modu, belgeleri işler ve çıkış üzerine bir filigran eklemeli OCR sonuçları döndürür. Lisans satın almadan önce kendi belgeleriniz üzerinde doğruluğu kontrol edebilirsiniz.

IronOCR, metin çıkarma yanında barkod okuma desteği sunar mı?

IronOCR, metin çıkarma ve OCR'ye odaklanır. Barkod okuma için Iron Software, eşlik eden bir kütüphane olan IronBarcode'u sağlar. Her ikisi de ayrı ayrı veya Iron Suite paketi olarak mevcuttur.

charlesw/tesseract (.NET Tesseract sarmalayıcı)dan IronOCR'ye geçiş yapmak kolay mı?

charlesw/tesseract (.NET Tesseract sarmalayıcı)dan IronOCR'ye geçiş genellikle başlangıç dizilerini IronTesseract oluşturma ile değiştirmeyi, COM yaşam döngüsü yönetimini kaldırmayı ve API çağrılarını güncellemeyi içerir. Çoğu geçişler, kod karmaşıklığını önemli ölçüde azaltı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ı...

Daha Fazla Oku

Iron Destek Ekibi

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