IRONSOFTWAREHOME
VIDEOLAR

TesseractOCR'den IronOCR'ye Geçiş

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

Bu kılavuz, .NET geliştiricileriniTesseractOCRNuGet paketinden (Sicos1977/Kees van Spelde çatalı) IronOCR'a tamamen geçirir. Dış ön işleme bağımlılıklarını kaldırmayı, yerel PDF girdi ve aranabilir PDF çıkışını etkinleştirmeyi, ad alanlarını ve API çağrılarını güncellemeyi ve geçiş yapılan entegrasyonu doğrulamayı kapsar. Karşılaştırma makalesinin önceden okunması gerekmez.

Neden TesseractOCR'dan Geçin

TesseractOCR, modern .NET'i hedefleyen ve Tesseract 5 yerel kütüphanelerini içeren aktif olarak sürdürülen bir topluluk sarmalayıcıdır. Daha eski sarmalardan geçiş yapmak, çerçeve uyumluluğunu çözer. Sarmalayıcı katmanının altında duran mimari boşlukları çözmez. Bu boşlukların üretimde ortaya çıkması, geçiş konuşmasını başlatır.

Ön işleme tamamen kütüphanenin dışında kalır. TesseractOCR, sağladığınız piksel üzerinde engine.Process(image) çağrısı yapar. Eğrilmiş bir tarama, düşük kontrastlı bir faks, bir makbuz fotoğrafı — hepsi Tesseract motoruna ham olarak gider. Kullanılabilir çıktı elde etmek için SixLabors.ImageSharp, SkiaSharp veya benzer bir görüntüleme kütüphanesi eklemek, belgelere özel ayarlanmış parametrelerle manuel filtre zincirleri yazmak ve ön işlenmiş görüntüyü bir temp dosyası aracılığıyla yönlendirmek gereklidir çünkü TesseractOCR.Pix.Image bir dosya yolu bekler. Deskew, standart .NET görselleştirme kütüphanelerinde hiç mevcut değildir - genellikle sıfırdan bir Hough dönüşüm açısı algılama algoritması uygulamayı gerektirir, genellikle 50 ila 100 ek satır. Bu, bir kerelik bir kurulum masrafı değildir; her yeni belge türü hattınıza girdiğinde tekrarlanır.

**PDF girişi ikinci bir kütüphane ve geçici dosya hattı gerektirir.**TesseractOCRgörüntüleri değil, PDF'leri işleyemez. Her PDF iş akışı, PDF sayfalarını BGRA bayt dizilerine işlemek için Docnet.Core, PdfiumViewer veya benzeri bir ek paket gerektirir, TesseractOCR'un okuyabileceği bir formata dönüştürmek için bir yardımcı yöntem ve tüm döngüyü saran geçici dosya oluşturma ve temizlik mantığı. Şifre korumalı PDF'ler yalnızca şifreyi çözmek için üçüncü bir kütüphane (AGPL lisanslı iText veya PDFSharp) gerektirir.

Aranabilir PDF çıktısının bir yolu yoktur. Tarayıcı belgelerden makine tarafından okunabilir PDF'ler üretmesi gereken ekipler — belge yönetimi, arşivleme ve uyum iş akışları için ortak bir gereksinim — TesseractOCR'un bunun için bir mekanizma sağlamadığını fark eder. Ne SaveAsSearchablePdf() var, ne hOCR'den PDF'ye bir boru hattı, ne de metin çıkarmanın ötesinde bir çıktı formatı. Bu yeteneği eklemek ya ikinci bir PDF kütüphanesi gerektirir ya da TesseractOCR'yi tamamen terk etmeyi gerektirir.

TIFF çok çerçeveli belgeler için manuel sayfa döngüsü gerektirir. Faks iş akışlarında ve belge tarayıcılarında yaygın olan çok sayfalı TIFF dosyaları, TesseractOCR'de yerel çok çerçeve işleme yoktur. Tüm çerçevelerin çıkarılması, harici bir kütüphane ile TIFF yüklemek, çerçeveleri yinelemek, her birini geçici bir dosyaya kaydedmek ve her geçici dosyayı OCR motoru üzerinden ayrı ayrı geçirmek gerektirir.

**Topluluk boyutu pratik desteği sınırlıyor.**TesseractOCRyaklaşık 200.000 NuGet indirmeye sahiptir. Stack Overflow, blog yazıları ve .NET Tesseract sarmalayıcıları hakkındaki GitHub sorun tartışmaları büyük ölçüde charlesw API'sine — TesseractEngine, Pix.LoadFromFile — değil, Sicos1977 API'sine gönderme yapar. TesseractOCR'ye özgü sorunların gerçek dünya sorun çözümü hızla bu duvara çarpar.

Temel Sorun

TesseractOCR'un ön işleme veya PDF desteği yoktur. Her üretim belge iş akışı, OCR'nin çalışabileceği bir noktaya ulaşmak için dış kütüphanelere gereksinim duyar:

// TesseractOCR: three packages, a temp file, and manual byte conversion
// just to OCR one PDF page — before any preprocessing
// dotnet add package TesseractOCR
// dotnet add package Docnet.Core
// dotnet add package SixLabors.ImageSharp   (preprocessing)

using var library = DocLib.Instance;
using var docReader = library.GetDocReader(pdfPath, new PageDimensions(200, 200));
using var pageReader = docReader.GetPageReader(0);
var bytes = pageReader.GetImage(); // BGRA — not a format Pix.Image accepts directly

string tempPath = Path.GetTempFileName() + ".png";
SaveBgraAsPng(bytes, pageReader.GetPageWidth(), pageReader.GetPageHeight(), tempPath);
// ^ 30+ line helper method needed here

using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
using var image = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
using var page = engine.Process(image);
string text = page.Text;
File.Delete(tempPath); // hope this succeeds
C#
// IronOCR: one package, three lines, preprocessing automatic
// dotnet add package IronOcr

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf(pdfPath);
string text = ocr.Read(input).Text;
C#

IronOCR vs TesseractOCR: Özellik Karşılaştırması

Aşağıdaki tablo, geçiş değerlendirmesi sırasında en önemli olan yetenekleri eşler.

ÖzellikTesseractOCRIronOCR
NuGet paketiTesseractOCRIronOcr
.NET uyumluluğu.NET 6.0, 7.0, 8.0.NET Framework 4.6.2+, .NET Core, .NET 5/6/7/8/9
LisansApache 2.0 (ücretsiz)Ticari (süresiz, $999 itibariyle)
Tessdata yönetimiGerekli (GitHub'dan elle indirin)Gereksiz (içsel dahil)
Dahili ön işlemeNoneDeskew, DeNoise, Kontrast, Binarizasyon, Keskinleştirme, Ölçekleme, Geliştirme, Erod, Ters Çevir
Derin arka plan gürültü uzaklaştırmaHayırEvet (DeepCleanBackgroundNoise())
Yerel PDF girişiHayır (Docnet.Core veya benzeri gerektirir)Evet (input.LoadPdf())
Şifre korumalı PDFHayır (şifre çözmek için üçüncü kütüphane gerektirir)Evet (tek Password parametresi)
Aranabilir PDF çıktısıHayırEvet (result.SaveAsSearchablePdf())
Çoklu-çerçeve TIFF girişiHayır (dış çerçeve çıkartımı gerektirir)Evet (input.LoadImageFrames())
Akış ve bayt dizisi girdisiHayır (geçici dosya arabulucu gerektirir)Evet (doğrudan LoadImage(stream), LoadImage(bytes))
İş parçacığı güvenliğiHayır (iş parçacığı başına bir motor örneği)Evet (tek IronTesseract ile paylaşılan)
Bölge bazlı OCRHayırEvet (CropRectangle)
OCR sırasında barkod okumaHayırEvet (ocr.Configuration.ReadBarCodes = true)
Yapısal çıktı (sayfalar, kelimeler, koordinatlar)Hayır (sadece düz metin dizesi)Evet (Pages, Paragraphs, Lines, Words ile X/Y)
Güven puanlamaBelge seviyesi float (0.0–1.0)Belge ve kelime-seviyesi double (0–100)
hOCR içeri aktarmaHayırEvet
125+ dil NuGet paketleriHayırEvet
Çapraz platform dağıtımıWindows, Linux, macOSWindows, Linux, macOS, Docker, Azure, AWS
Ticari destekHayır (tek gönüllü bakıcı)Evet (e-posta, SLA seçenekleri)

Hızlı Başlangıç: TesseractOCR'den IronOCR'ye Geçiş

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

TesseractOCR ve onu desteklemek için eklenen herhangi bir kütüphaneyi kaldırın:

dotnet remove package TesseractOCR
dotnet remove package Docnet.Core
dotnet remove package SixLabors.ImageSharp
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

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

TümTesseractOCRisim alanı alımlarınıIronOCR ile değiştirin:

// Before (TesseractOCR)
using TesseractOCR;
using TesseractOCR.Enums;

// After (IronOCR)
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

Uygulama başlangıcında, herhangi bir OCR çağrısından önce bir kez lisans başlatma ekleyin:

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

IronOCR lisanslama sayfasından ücretsiz bir deneme lisansı değerlendirme için mevcuttur.

Kod Göç Örnekleri

Harici Ön İşleme Hattını Değiştirme

TesseractOCR, her belge kalitesi iyileştirmesi için harici bir görüntüleme kütüphanesi gerektirir. Aşağıdaki kod, belge kalitesi değişken olduğunda ekiplerin yazdığı deseni gösterir - gritonlamaya dönüştürme, karşıtlık ayarı, gürültü azaltma ve OCR çalıştırılmadan önce geçici dosya yazma. Deskew (eğik bir taramayı düzeltme) standart .NET görselleştirme kütüphanelerinde mevcut değildir ve ayrı bir algoritma gerektirir.

TesseractOCR Yaklaşımı:

// Requires: dotnet add package SixLabors.ImageSharp
// Manual preprocessing — parameters must be tuned per document type
// Deskew is NOT in ImageSharp — requires custom Hough transform (~50-100 lines)

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Processing;
using TesseractOCR;
using TesseractOCR.Enums;

public string ExtractFromLowQualityScan(string imagePath)
{
    using var image = Image.Load(imagePath);

    image.Mutate(x => x.Grayscale());
    image.Mutate(x => x.Contrast(1.5f));          // manual tuning required
    image.Mutate(x => x.GaussianBlur(0.5f));      // noise reduction approximation
    image.Mutate(x => x.BinaryThreshold(0.5f));   // threshold requires per-doc adjustment

    // Deskew omitted — no built-in support, ~80 lines of additional code

    string tempPath = Path.GetTempFileName() + ".png";
    try
    {
        image.Save(tempPath);

        using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
        using var pix = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
        using var page = engine.Process(pix);

        return page.Text;
    }
    finally
    {
        File.Delete(tempPath);
    }
}
C#

IronOCR Yaklaşımı:

// No external imaging library
// No temp file — OcrInput accepts a path, stream, or byte array directly
// Deskew is built in — automatic angle detection and correction

using IronOcr;

public string ExtractFromLowQualityScan(string imagePath)
{
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    input.Deskew();           // automatic angle correction
    input.DeNoise();          // intelligent noise removal
    input.Contrast();         // automatic contrast enhancement
    input.Binarize();         // clean black-and-white conversion

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

ImageSharp bağımlılığının kaldırılması ayar döngüsünü tamamen ortadan kaldırır. OcrInput ön işleme hattı, belge OCR için kalibre edilmiş algoritmaları uygular - kontrast çarpanları veya bulanıklık yarıçaplarını tahmin etmez. görüntü filtreleri eğitimi ve görüntü kalite düzeltme kılavuzu varsayılanın ayarlama gerektirdiği durumlar için parametre seçenekleriyle her mevcut filtreyi kapsar.

Çok Çerçeveli TIFF İşlemeyi Değiştirme

Faks belgeleri, belge tarayıcı çıktısı ve arşiv dosyaları sık sık çok sayfalı TIFF dosyaları olarak gelir.TesseractOCRçok çerçeve desteği sunmaz - her çerçeve harici bir kütüphane ile çıkarılmalı, diske kaydedilmeli ve motor geçildiğinde teker teker verilmelidir. IronOCR, tüm TIFF'i tek bir çağrıda yükler.

TesseractOCR Yaklaşımı:

// Requires: dotnet add package SixLabors.ImageSharp
// Manual frame extraction — every frame becomes a temp file on disk

using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Formats.Tiff;
using TesseractOCR;
using TesseractOCR.Enums;

public string ExtractFromMultiPageTiff(string tiffPath)
{
    var allText = new System.Text.StringBuilder();
    var tempFiles = new List<string>();

    try
    {
        using var image = Image.Load(tiffPath);
        using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);

        for (int frameIndex = 0; frameIndex < image.Frames.Count; frameIndex++)
        {
            // Clone frame and save to temp file — no in-memory path
            using var frameImage = image.Frames.CloneFrame(frameIndex);
            string tempPath = Path.GetTempFileName() + ".png";
            tempFiles.Add(tempPath);
            frameImage.SaveAsPng(tempPath);

            using var pix = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
            using var page = engine.Process(pix);

            allText.AppendLine($"=== Frame {frameIndex + 1} ===");
            allText.AppendLine(page.Text);
        }
    }
    finally
    {
        foreach (var f in tempFiles)
            try { File.Delete(f); } catch { }
    }

    return allText.ToString();
}
C#

IronOCR Yaklaşımı:

// No external library for frame extraction
// All frames processed in one Read() call — no manual loop required

using IronOcr;

public string ExtractFromMultiPageTiff(string tiffPath)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImageFrames(tiffPath);   // loads all frames automatically
    var result = ocr.Read(input);

    // Access per-page text if needed
    foreach (var page in result.Pages)
        Console.WriteLine($"Frame {page.PageNumber}: {page.Text}");

    return result.Text;
}
C#

Çerçeve çıkarma döngüsü, geçici dosya listesi, finally temizleme bloğu - tümü ortadan kalkar. 20 sayfalık bir faks TIFF'i için bu, yaklaşık 40 satırı 6 ile değiştirir. TIFF ve GIF girdi kılavuzu seçici çerçeve aralıkları dahil olmak üzere çok çerçeve yükleme seçeneklerini kapsar.

Aranabilir PDF Çıktısı Üretme

Bu senaryo TesseractOCR'de geçiş yolu ile yapmaz - sadece yapılamaz. Makine tarafından okunabilir, metin seçilebilir belgeler haline gelmesi gereken taranmış PDF'ler (arama indeksleme, erişilebilirlik veya arşivleme için) aranabilir bir PDF çıktısı üretmeyi gerektirir.TesseractOCRyalnızca çıkarılan metni üretir.IronOCR doğrudan aranabilir PDF üretir.

TesseractOCR Yaklaşımı:

// No path available — TesseractOCR cannot produce any PDF output.
// The closest workaround requires a separate PDF library (iTextSharp AGPL,
// or similar) to overlay extracted text onto the original PDF manually.
// This is 150-300 lines of additional code and introduces AGPL license concerns.

// The best available output from TesseractOCR:
using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
using var pix = TesseractOCR.Pix.Image.LoadFromFile("scanned-page.png");
using var page = engine.Process(pix);

string extractedText = page.Text; // flat string — no PDF output possible
File.WriteAllText("output.txt", extractedText);
// Cannot produce a searchable PDF — no API exists for this
C#

IronOCR Yaklaşımı:

// Native searchable PDF output — no additional library required
// Input can be a scanned image, a scanned PDF, or a multi-page TIFF

using IronOcr;

public void CreateSearchablePdf(string scannedPdfPath, string outputPath)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadPdf(scannedPdfPath);
    input.Deskew();     // improve accuracy before generating the output
    input.DeNoise();

    var result = ocr.Read(input);
    result.SaveAsSearchablePdf(outputPath);   // searchable, text-selectable PDF
}
C#

SaveAsSearchablePdf() çağrısı, OCR metnini, taranmış orijinal görüntünün arkasında görünmez bir katman olarak PDF'ye gömer. Belge görsel olarak aynı kalır, ancak tam aranabilir, seçilebilir ve indekslenebilir hale gelir. aranabilir PDF kılavuzu tüm API'yi kapsar ve aranabilir PDF örneği tam çalışma desenini gösterir.

Bayt Dizisi Girişi Değiştirme ve Geçici Dosyaları Ortadan Kaldırma

TesseractOCR'nin Pix.Image API'si bir dosya yolu kabul eder. Görüntü verisi bir bayt dizisi olarak geldiğinde — bir veritabanından, bir HTTP çok parçalı yüklemeyle, bir bellek önbelleğinden —TesseractOCRişlenmeden önce geçici bir dosyaya yazmayı zorlar. IronOCR'nin OcrInput doğrudan byte dizileri ve akışları kabul eder, böylece geçici dosya adımı tamamen ortadan kaldırılır.

TesseractOCR Yaklaşımı:

// TesseractOCR.Pix.Image has no byte[] or Stream overload
// Every in-memory image must be written to disk before processing

using TesseractOCR;
using TesseractOCR.Enums;

public string ExtractFromBytes(byte[] imageBytes)
{
    // Force a disk write just to satisfy the file-path API
    string tempPath = Path.GetTempFileName() + ".png";

    try
    {
        File.WriteAllBytes(tempPath, imageBytes);

        using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
        using var pix = TesseractOCR.Pix.Image.LoadFromFile(tempPath);
        using var page = engine.Process(pix);

        return page.Text;
    }
    finally
    {
        // Risk: if an exception fires between WriteAllBytes and Delete,
        // temp files accumulate on the server disk
        if (File.Exists(tempPath))
            File.Delete(tempPath);
    }
}
C#

IronOCR Yaklaşımı:

// OcrInput accepts byte arrays and streams natively
// No disk write, no temp file cleanup, no cleanup failure risk

using IronOcr;

public string ExtractFromBytes(byte[] imageBytes)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImage(imageBytes);   // direct byte array — no temp file
    return ocr.Read(input).Text;
}

public string ExtractFromStream(Stream imageStream)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImage(imageStream);  // direct stream — no intermediate buffer
    return ocr.Read(input).Text;
}
C#

Net uygulamalarda yüklenen belgeleri işleyen temp-file deseni, yük altında disk kullanımını birikir ve temizleme kodu eğer atarsa yarış durumları tanıtır. akış girişi kılavuzu ve görüntü girişi kılavuzu MemoryStream, byte[], Bitmap ve dosya yolu dahil tüm desteklenen giriş formatlarını kapsar.

Yapısal Veri ile Kelime-Seviyesinde Güven Filtreleme

TesseractOCR, tek bir belge düzeyinde güven skoru (page.MeanConfidence, 0.0 ile 1.0 arasında bir float) ve düz bir metin dizisi döndürür. Kelime-seviyesi güven, kelime konumlandırması ve yapısal hiyerarşi yoktur. Belirsiz kelimeleri işaretleyerek, belirli bölgeleri çıkararak veya metni belge koordinatlarına haritalayarak bir iş akışı oluşturmak, temel olarak farklı bir çıkış modeline geçmeyi gerektirir.

TesseractOCR Yaklaşımı:

// Only document-level confidence available
// No word coordinates, no structural hierarchy

using TesseractOCR;
using TesseractOCR.Enums;

public void ProcessWithConfidence(string imagePath)
{
    using var engine = new Engine(@"./tessdata", Language.English, EngineMode.Default);
    using var pix = TesseractOCR.Pix.Image.LoadFromFile(imagePath);
    using var page = engine.Process(pix);

    float docConfidence = page.MeanConfidence; // 0.0 to 1.0 for the whole document

    if (docConfidence >= 0.7f)
        Console.WriteLine($"Accepted ({docConfidence:P0}): {page.Text}");
    else
        Console.WriteLine($"Rejected ({docConfidence:P0}): document needs preprocessing");

    // No way to identify WHICH words are uncertain
    // No word coordinates available
}
C#

IronOCR Yaklaşımı:

// Per-word confidence and coordinate data
// Filter individual uncertain words without discarding the whole document

using IronOcr;

public void ProcessWithWordLevelConfidence(string imagePath)
{
    var ocr = new IronTesseract();
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    var result = ocr.Read(input);

    Console.WriteLine($"Document confidence: {result.Confidence}%");

    // Iterate words and flag those below threshold
    foreach (var page in result.Pages)
    {
        foreach (var word in page.Words)
        {
            if (word.Confidence < 70)
            {
                // Low-confidence word — log position for review
                Console.WriteLine(
                    $"Low confidence word '{word.Text}' ({word.Confidence}%) " +
                    $"at X:{word.X} Y:{word.Y}");
            }
        }
    }

    // Extract only high-confidence text
    var reliableWords = result.Pages
        .SelectMany(p => p.Words)
        .Where(w => w.Confidence >= 70)
        .Select(w => w.Text);

    Console.WriteLine(string.Join(" ", reliableWords));
}
C#

Fatura işleme, form çıkarma ve belirsiz metin üzerinde işlem yapmaktan daha kötü olan herhangi bir iş akışında kelime-seviyesi güven filtresi önemlidir. güven puanları kılavuzu tam puanlama modelini kapsar ve okuma sonuçları kılavuzu tam yapısal çıktı hiyerarşisini belgelendirir.

TesseractOCR API'sinden IronOCR'ye Eşleme Referansı

TesseractOCRIronOCRNotlar
new Engine(tessDataPath, Language.English, EngineMode.Default)new IronTesseract()Tessdata yolu yok; motor mod seçim gerekmez
TesseractOCR.Pix.Image.LoadFromFile(path)input.LoadImage(path)Ayrıca byte[] ve Stream kabul eder.
engine.Process(pixImage)ocr.Read(input)OcrResult yerine Page döndürür.
page.Textresult.TextAynı semantik
page.MeanConfidence (0.0–1.0 float)result.Confidence (0–100 double)Ölçek farklı — eşik karşılaştırmalarını güncelle
Dil.İngilizce |Dil.FransızcaOcrLanguage.English + OcrLanguage.FrenchEk operator, değil bitwise OR
EngineMode.DefaultYokIronOCR modu dahili olarak seçer
EngineMode.LstmOnlyYokOtomatik
TesseractOCR.Exceptions.TesseractExceptionIronOcr.Exceptions.OcrExceptionDaha az işlenmesi gereken istisna türü
DllNotFoundException (yerel eksik)UygulanamazIronOCR kendi yerel bağımlılıklarını dahil eder
BadImageFormatException (mimari uyumsuzluk)UygulanamazDahili olarak ele alınır
Harici Image.Mutate(x => x.Grayscale())input.Binarize()Dahili, dış kütüphane yok
Harici Image.Mutate(x => x.Contrast(...))input.Contrast()Otomatik kalibrasyon
Harici Hough dönüşümü düzeltmeinput.Deskew()Yerleşik, tek bir metod çağrısı
Harici GaussianBlur gürültü filtresiinput.DeNoise()Zeki gürültü giderme
DocLib.GetDocReader(pdfPath, ...)input.LoadPdf(pdfPath)Docnet.Core gerekli değil
docReader.GetPageReader(i).GetImage() + geçici dosyainput.LoadPdf(pdfPath)Tüm döngü değiştirildi
input.LoadPdf(encrypted, Password: "...")Tek parametre — üçüncü kitaplık gerekmez
N/A (PDF çıktısı yok)result.SaveAsSearchablePdf(outputPath)TesseractOCR'de eşdeğeri yok
N/A (çerçeve desteği yok)input.LoadImageFrames(tiffPath)Çoklu çerçeve TIFF tek çağrıda
N/A (sadece dosya yolu)input.LoadImage(stream) / input.LoadImage(bytes)Geçici dosya düzenini ortadan kaldırır
Her iş parçacığı için Engine örnekleriTüm iş parçacıkları arasında paylaşılan tek IronTesseractTasarımı gereği iş parçacığı güvenli
page.MeanConfidence (sadece belge)Her bir kelime için word.ConfidenceKelime seviyesi puanlama mevcut

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

Sorun 1: Güven Eşiği Değerleri Geçişten Sonra Bozuluyor

TesseractOCR: page.MeanConfidence, 0.0 ile 1.0 arasında bir float döndürür. Kod genellikle if (confidence >= 0.7f) ile sonuçları kabul etmek için kontrol eder.

Çözüm: IronOCR, güveni 0–100 ölçeğinde double olarak raporlar. Var olan tüm eşik değerlerini 100 ile çarpın. 0.7f bir eşiği 70.0 olur. Belge düzeyindeki güven result.Confidence'de; Kelime düzeyindeki güven word.Confidence'da result.Pages[n].Words içinde.

// Before (TesseractOCR): page.MeanConfidence >= 0.7f
// After (IronOCR):
var result = new IronTesseract().Read("document.png");
if (result.Confidence >= 70.0)
{
    Console.WriteLine(result.Text);
}
C#

Sorun 2: Geçiş Denemesi Sonrası Geçici Dizin Doluyor

TesseractOCR: Pix.Image.LoadFromFile() kısıtı etrafında yazılan kod sıklıkla geçici dosyalar oluşturarak bunları finally bloklarında temizler. finally bloğunun kendisi bir hata fırlatırsa veya uygulama zorla sonlandırılırsa, geçici dosyalar birikir.

Çözüm: Tüm File.WriteAllBytes(tempPath, bytes) + Pix.Image.LoadFromFile(tempPath) kalıplarını input.LoadImage(bytes) veya input.LoadImage(stream) ile değiştirin. Hiçbir kod geçici dosya oluşturmadığında, temizleme mantığı ve geçici depolama için dizin oluşturulması tamamen silinebilir. GetTempFileName, GetTempPath ve SaveBgraAsPng'yi arayın ve tüm gerçekleşmeleri bulun.

grep -rn "GetTempFileName\|GetTempPath\|SaveBgraAsPng" --include="*.cs" .
SHELL
// Before: byte[] → temp file → Pix.Image.LoadFromFile
// After: byte[] → OcrInput directly
using var input = new OcrInput();
input.LoadImage(imageBytes);   // no disk write
var result = ocr.Read(input);
C#

Tüm desteklenen giriş formatları için görüntü giriş kılavuzuna bakın.

Sorun 3: Dil Operatörü Değişikliği Derleyici Hatasına Neden Oluyor

TesseractOCR: Çok dilli OCR, bir bayraklar numarası üzerinde bitwise OR kullanır: Language.English|Language.French. Bu, bir [Flags] enum örüntüsüdür.

**Çözüm:**IronOCR toplama operatörünü kullanır: OcrLanguage.English + OcrLanguage.French. Bunlar benzer görünse de farklı operatörlerdir. Language.'i OcrLanguage. ile değiştirmek için bir bul ve değiştir yapın |Dil ifadelerinde to + çoğu durumu ele alır. Herhangi bir çalışma zamanı oluşturulmuş dil kombinasyonunun da + kullandığını doğrulayın.

// Before (TesseractOCR):
var engine = new Engine(@"./tessdata",
    Language.English | Language.French | Language.German,
    EngineMode.Default);

// After (IronOCR):
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English + OcrLanguage.French + OcrLanguage.German;
C#

Sorun 4: Docnet ve ImageSharp Paketleri Kaldırıldıktan Sonra Hala Referans Veriliyor

TesseractOCR: PDF iş akışları içinTesseractOCRkullanan projeler genellikle doğrudan bağımlı Docnet.Core'a ve ön işleme için SixLabors.ImageSharp veya SkiaSharp'a sahiptir. IronOCR'ye geçildikten sonra, bu paketler çoğunlukla .csproj içinde kalır çünkü using ifadeleri tamamen kaldırılmamıştır.

Çözüm: Paketleri .csproj'den kaldırdıktan sonra, kalan tüm using Docnet.Core, using SixLabors.ImageSharp ve ilgili isim alanı referanslarını arayın. using ifadeleri artık bağımlılık ağaçlarında var olmayan isim alanlarına referans verirse, derleyici bunları işaretler — ancak sadece dotnet remove package komutları gerçekten çalıştırıldıysa.

grep -rn "using Docnet\|using SixLabors\|using SkiaSharp" --include="*.cs" .
SHELL

Tanımlanan dosyaların referanslarını kaldırın, ardından eski boru hattına hizmet eden ön işleme yardımcı yöntemleri (SaveBgraAsPng, ApplyGrayscale, ApplyThreshold ve benzerleri) silin.

Sorun 5: Docker Görüntü Boyutu Geçiş Sonrası Artıyor

TesseractOCR: Bazı Docker yapılandırmaları, Tesseract'ı sistem paketi olarak apt-get install tesseract-ocr tesseract-ocr-eng aracılığıyla yükler ve ardından bu sistem ikililerine referans verir. Bu, dil paketlerine bağlı olarak görüntüye yaklaşık 30-80MB ekler.

Çözüm: IronOCR, kendi Tesseract ikili dosyalarını NuGet paketi içinde paketler. Dockerfile'daki apt-get install tesseract-ocr satırı artık gerekli değildir ve kaldırılmalıdır. Dil paketleri de apt-get install tesseract-ocr-fra'den değil, NuGet'ten gelir. Docker dağıtım kılavuzu, IronOCR'un bir konteynerde çalışması için gereken temel görüntü yapılandırmalarını ve tam paketleri sağlar.

# Remove these lines after migration:
# RUN apt-get install -y tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra
# COPY ./tessdata /app/tessdata
Text

Sorun 6: TesseractException ve DllNotFoundException Catch Blokları Erişilemez Hale Geliyor

TesseractOCR: ÜretimTesseractOCRentegrasyonları TesseractOCR.Exceptions.TesseractException, DllNotFoundException (kayıp yerel ikililer için) ve BadImageFormatException (mimari uyumsuzluklar için) hatalarını yakalar. Bu istisna türleri tessdata ve yerel ikili dosya dağıtımının istikrarsızlığına karşı savunma yanıtlarıdır.

**Çözüm:**IronOCR yerel bağımlılıkları paketler ve başlangıçlarını dahili olarak yönetir. DllNotFoundException ve BadImageFormatException uygulanmaz. Bu catch bloklarını kaldırın. İstisna yüzeyi, OCR hataları için IronOcr.Exceptions.OcrException'ye, dosya erişim problemleri için ise standart IOException'ye indirgenir.

// Before: five exception types to handle
catch (TesseractOCR.Exceptions.TesseractException ex) { ... }
catch (DllNotFoundException ex) { ... }
catch (BadImageFormatException ex) { ... }
catch (OutOfMemoryException ex) { ... }

// After: two exception types
catch (IronOcr.Exceptions.OcrException ex) { ... }
catch (IOException ex) { ... }
C#

TesseractOCR Geçiş Kontrol Listesi

Öncesi-Geçiş

Kod tabanında tümTesseractOCRkullanım noktalarını denetleyin:

grep -rn "using TesseractOCR" --include="*.cs" .
grep -rn "new Engine(" --include="*.cs" .
grep -rn "Pix\.Image\.LoadFromFile\|engine\.Process\|page\.Text\|MeanConfidence" --include="*.cs" .
grep -rn "Language\." --include="*.cs" .
SHELL

Kaldırılacak tüm destekleyici altyapıyı belirleyin:

grep -rn "using Docnet\|using SixLabors\|GetTempFileName\|SaveBgraAsPng" --include="*.cs" .
grep -rn "tessdata" --include="*.cs" .
grep -rn "tessdata" --include="*.csproj" .
grep -rn "tessdata" Dockerfile 2>/dev/null || true
SHELL

Geçiş öncesinde, geçiş sonrası kaliteyi doğrulamak için belgelerin temsilci bir örneğinde mevcut doğruluk taban çizgisini belgeleyin.

Kod Geçişi

  1. dotnet remove package TesseractOCR çalıştırın
  2. dotnet remove package Docnet.Core çalıştırın (varsa)
  3. dotnet remove package SixLabors.ImageSharp çalıştırın (ön işleme için eklendiyse)
  4. dotnet add package IronOcr çalıştırın
  5. Uygulama başlangıcında IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" ekleyin
  6. using TesseractOCR ve using TesseractOCR.Enums'yi using IronOcr ile değiştirin
  7. new Engine(tessDataPath, Language.English, EngineMode.Default)'yi new IronTesseract() ile değiştirin
  8. TesseractOCR.Pix.Image.LoadFromFile(path)'yi input.LoadImage(path) ile bir OcrInput örneği üzerinde değiştirin
  9. engine.Process(pixImage)'i ocr.Read(input) ile değiştirin
  10. page.Text'i result.Text ile değiştirin
  11. Güven eşiği karşılaştırmalarını güncelleyin — tüm 0.0–1.0 değerlerini IronOCR için 0–100 ölçeği için 100 ile çarpın
  12. Language.X| Language.Y with OcrLanguage.X + OcrLanguage.Y
  13. Tüm ön işleme yardımcı yöntemlerini silin (SaveBgraAsPng, manuel filtre zincirleri, temp dosya mantığı)
  14. Docnet PDF işleme döngülerini input.LoadPdf(path) veya input.LoadPdfPages(path, start, end) ile değiştirin
  15. Çok çerçeveli TIFF döngülerini input.LoadImageFrames(tiffPath) ile değiştirin
  16. File.WriteAllBytes(tempPath, bytes) + LoadFromFile(tempPath)'yi input.LoadImage(bytes) ile değiştirin
  17. Yakalama bloklarını güncelleyin — TesseractException, DllNotFoundException, BadImageFormatException'yi kaldırın
  18. Tessdata klasörünü, proje çıktı dizini yapılandırmasından ve Docker görüntülerinden kaldırın

Geçiş Sonrası

  • dotnet build'in sıfır derleyici hatası ve sıfır erişilemez-yakalama uyarısı ürettiğini doğrulayın
  • Geçiş öncesi doğruluk temel örneği karşısında OCR çalıştırın ve sonuçları karşılaştırın
  • Çok sayfalı TIFF dosyalarının doğru sayıda sayfa çıkardığından emin olun
  • Aranabilir PDF çıktısının seçilebilir metinle bir PDF görüntüleyicisi içinde açıldığını doğrulayın
  • Uygulamanın gerçek veri kaynaklarından bayt dizisi ve akış giriş yollarını test edin
  • Kelime düzeyi güven değerlerinin 0–100 aralığında olduğunu doğrulayın (0.0–1.0 değil)
  • İş parçacığı başına motor tahsis uyarıları olmadığını doğrulamak için paralel işlem testleri çalıştırın
  • Hedef ortama (Docker, Azure, Linux) dağıtın ve IronOCR'nin DllNotFoundException olmadan başlatıldığını doğrulayın
  • Dağıtım komut dosyalarında hiçbir tesdata klasörü veya .traineddata dosyasının referans alınmadığını doğrulayın

IronOCR'a Geçişin Ana Faydaları

Ön işleme, artık 100 satırlık bir bağımlılıktan değil, tek satırlık bir yapılandırmadan ibaret hale gelir. Geçişten sonra, input.Deskew(), input.DeNoise() ve input.Contrast() bir harici görüntü işleme kütüphanesini, manuel parametre ayarlamalarını ve ikisi arasında bağlantı kuran temp dosya yazmasını değiştirir. Telefon fotoğrafları, eğimli taramalar ve düşük kontrast fakslar — önceden özel bir ön işleme mühendisi gerektiren doküman türleri — yerleşik boru hattından güvenilir çıkış üretir. ön işleme özellikleri sayfası mevcut tüm filtreleri listeler.

PDF birinci sınıf giriş ve çıkış formatıdır. Docnet bağımlılığı, BGRA'dan PNG'ye dönüştürme yardımcı yöntemi, geçici dosya yönetim döngüsü, parola korunmuş dosyalar için üçüncü kütüphane — bunların hepsi kaybolur. Sisteme gelen herhangi bir PDF doğrudan input.LoadPdf()'a gider. Aranabilir hale gelmesi gereken herhangi bir taranmış belge result.SaveAsSearchablePdf()'dan çıkar. TesseractOCR'de 100'den fazla satır gerektiren tüm PDF boru hattı, bir avuç metod çağrısı haline gelir. Desteklenen tüm PDF iş akışlarının tam kapsamı için PDF OCR kullanım durumu sayfasını inceleyin.

Yapılandırılmış çıktı, düz metin dizilerini değiştirir. result.Pages, result.Paragraphs, result.Lines ve result.Words, belge yapısını her bir eleman koordinatları ve kelime başına güven puanları ile ortaya çıkarır. Önceden belirli alanları bulmak için sezgisel çözümleme gerektiren iş akışları — fatura numaraları, tarihler, tutarlar — kelime düzeyi koordinatlar ve güven filtreleme yerine kullanılabilir. Bu, IronOCR'un OCR sonuç özelliklerinin üzerine güvenilir form çıkarımı ve doküman işleme hatları inşa etmek için temel niteliğindedir.

Dağıtım, tessdata düzenlemesi gerektirmeyi durdurur. Tessdata klasörü, curl indirme komut dosyaları, Docker COPY ./tessdata katmanı, .traineddata dosyaları için CI/CD önbellek yapılandırması — hepsi kaybolur. Diller, NuGet paketleri halinde, sürümlenmiş olarak gönderilir, proje bağımlılıklarının geri kalanı ile birlikte geri yüklenir ve dağıtılır, ister bir geliştirici iş istasyonu, ister bir Docker kabı, ister bir Azure App Service, ister bir AWS Lambda olsun. Azure dağıtım kılavuzu ve Linux dağıtım kılavuzu , üretim ortamları için doğrulanmış yapılandırmalar sağlar.

**Lisans modeli öngörülebilir.**TesseractOCRücretsizdir, ancak gerektirdiği altyapı değildir — ön işleme uygulaması için geliştirici zamanı, PDF kütüphanesi değerlendirmesi, tessdata dağıtım betiklemesi, ve harici bağımlılık zincirinin sürekli bakımı. IronOCR'nin süresiz lisansı ($999 Lite, $1,499 Professional, $2,399 Enterprise), altyapı çalışmalarının haftalarını değiştiren ve yinelenen bakım yüzeyini ortadan kaldıran tek seferlik bir maliyettir. Garanti edilen yanıt yolu ile ticari destek, tek bir gönüllü bakımcının GitHub sorun kuyruğuna dayanmaya olan bağımlılığı değiştirir.

Lütfen dikkate alın: PDFium, PDFSharp, Tesseract ve iText kendi sahiplerinin tescilli markalarıdır. Bu site, Chromium Projesi, Google, empira Software GmbH veya iText Group ile bağlantılı değil, onlardan onay almış ya da destekçi değildir. Tüm ürün adları, logolar ve markalar, ilgili sahiplerinin mülkü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