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

OCR API Microsoft Azure Vision ile IronOCR: Hangisi Belge Görüntülerini Daha İyi İşler?

Curtis Chau
Curtis Chau
Updated: 28 Haziran 2026

Tesseract'tan tek bir OCR sonucu okumadan önce, bir ön işleme hattı yazdınız — gri tonlama dönüşümü, kontrast geliştirme, binarizasyon, gürültü giderme, devirme düzenlemesi, DPI ölçekleme — metin tanıma ile ilgili olmayan yaklaşık 180 satırlık bir resim manipülasyon kodu. charlesw Tesseract sarıcının gerçek maliyeti: sıfır dolar lisans ücreti değil, motoru sıfırdan kurulmamış belgeler üzerinde güvenilir bir şekilde çalıştırmak için 20-40 saat mühendislik. Ardından, uygulamanızın PDF'ler aldığını keşfedersiniz ve boru hattının bir PDF dönüştürme kütüphanesiyle önden başlaması gerekir.

Tesseract'ı Anlamak

NuGet paketi Tesseract (charlesw wrapper), yerel Tesseract OCR motorunu .NET uygulamalarına açan bir P/Invoke köprüsüdür. Leptonica görüntü işleme kütüphanesini ve Tesseract motoru binarylerini sarar, C# geliştiricilerine mevcut en yetenekli açık kaynak kodlu OCR motorlarından birine doğrudan erişim sağlar.

Tesseract'ın kendisi, açık kaynak dünyasındaki OCR omurgasıdır. İlk olarak 1980'lerde Hewlett-Packard tarafından geliştirilen ve 2005'te Google tarafından açık kaynak yapılan motor, charlesw sarıcı üzerinden yalnızca yaklaşık 8 milyon NuGet indirimi biriktirdi. Bu sayı, niş bir proje değil, gerçek bir kullanım sağlar. Görüntüler temiz ve iyi biçimlendirilmiş olduğunda, Tesseract, minimum yapılandırma ile %95+ doğruluğa ulaşır.

Bu kütüphanenin her üretim kullanımını şekillendiren kritik mimari gerçekler:

  • Yalnızca resim girişi: Tesseract resimleri işler. Dahili bir PDF görüntüleyicisine sahip değildir. Her PDF iş akışı, her sayfayı Tesseract'ın dokunabileceği bir resime çevirmek için ayrı bir kütüphane (PdfiumViewer, PDFtoImage, Docnet.Core, GhostScript) gerektirir.
  • Manuel ön işleme gereklidir: Tesseract, temiz, yüksek çözünürlüklü, düzgün bir şekilde yönlendirilmiş görüntüler bekler. Dahili filtreler sağlamaz. Değişiklik yapılmadan sapma, gürültü, düşük DPI ve renk arka planları doğruluğu azaltır ve bu düzeltme tamamen geliştiricinin sorumluluğundadır.
  • Tessdata dosya yönetimi: Dil tanıma, GitHub'dan indirilen ve tessdata klasörüne yerleştirilen .traineddata dosyalarına bağlıdır. Her dil 15-100 MB. Her ortam - geliştirme, CI, aşama, üretim,Docker- doğru dosyaların doğru yol üzerinde olmasını gerektirir.
  • Yerel ikili dağıtım: Wrapper, platforma özgü yerel kütüphaneleri beraberinde getirir (tesseract50.dll, leptonica-1.82.0.dll Windows'ta; Linux'ta .so dosyaları). Bunlar, hedef mimariye eşleştirilmeli ve uygulamanın yanında dağıtılmalıdır.
  • İş parçacığı güvenli olmayan motor: Bir TesseractEngine örneği iş parçacıkları arasında paylaşılamaz. Paralel işleme, iş parçacığı başına bir motor oluşturulmasını gerektirir, motor başlatmanın 40-100 MB bellek yükünü paralellik derecesine göre çarpar.
  • Tesseract sürümü 4.1.1'e sabitlendi: charlesw sarıcı Tesseract 4.1.1'i izler, 2019'da piyasaya sürüldü. Geliştirilmiş LSTM doğruluğuna sahip Tesseract 5.x bu paket aracılığıyla mevcut değildir.

Ön İşleme Boşluğu

Ön işleme gereksinimi, atlayabileceğiniz bir yapılandırma seçeneği değildir. Bu, üretim doğruluğu ile gerçek dünya belgelerinde kullanılamaz çıktı arasındaki farktır. Bu wrapper için image-preprocessing-tesseract.cs kaynak dosyası tam el kitabı işlem hatlarını belgeliyor:

// Tesseract requires every one of these steps to be written manually
public static string ExtractWithPreprocessing(string imagePath)
{
    using (var original = new Bitmap(imagePath))
    {
        // Step 2: Convert to grayscale (~25 lines)
        using (var grayscale = ConvertToGrayscale(original))
        {
            // Step 3: Apply contrast enhancement (~15 lines)
            using (var enhanced = EnhanceContrast(grayscale))
            {
                // Step 4: Binarize — convert to black and white (~15 lines)
                using (var binarized = Binarize(enhanced, 128))
                {
                    // Step 5: Remove noise (~25 lines)
                    using (var denoised = RemoveNoise(binarized))
                    {
                        // Step 6: Deskew if rotated (~50 lines, simplified)
                        using (var deskewed = Deskew(denoised))
                        {
                            // Step 7: Scale to 300 DPI (~20 lines)
                            using (var scaled = ScaleToDpi(deskewed, 300))
                            {
                                return RunTesseract(scaled);  // Save to temp file, load Pix, process
                            }
                        }
                    }
                }
            }
        }
    }
}

O iç içe using yapısı önemsiz değil — her adım gerçek bir uygulamadır: gri tonlama için bir renk matrisi, kontrast için piksel döngüsü, binarizasyon için başka bir piksel döngüsü, gürültü için bir medyan filtre ve düzeltme için bir Hough dönüşümü yedeği. image-preprocessing-tesseract.cs kaynağı doğrudan belirtir: 'Basitleştirilmiş düzeltme — gerçek uygulama Hough dönüşümü gerektirir. Bu genellikle OpenCV veya benzeri bir kütüphane gerektirir.'

Toplam: tek bir kelime okunmadan önce yaklaşık 180 satır. Aynı dosyadaki doğruluk tablosu yatırımı neden gerekli gösterir — Tesseract ön işlem olmadan 5 derecelik sapma belgesi üzerinde %60-70 doğruluk üretir, uygun şekilde ön işlenmiş giriş %90+ ulaşır.

IronOCR'u Anlamak

IronOCR, optimize edilmiş Tesseract 5 LSTM motorunu yerleşik bir ön işleme hattı, doğal PDF desteği ve yerel binary yönetimi gerektirmeyen bir yönetilen API ile entegre eden ticari bir .NET OCR kütüphanesidir. Kütüphane, tessdata klasörleri, platforma özel DLL dağıtım adımları ve ek PDF dönüştürme kütüphaneleri olmadan tek bir NuGet paketi olarak kurulur.

IronOCR'nin tasarımını belirleyen anahtar özellikler:

  • Otomatik ön işlem: Deskew, DeNoise, Contrast, Binarize ve EnhanceResolution OcrInput üzerinde tek satırlık yöntem çağrılarıdır. Motor, ayrıca OCR başlamadan önce varsayılan olarak akıllı otomatik ön işleme uygular.
  • Yerel PDF girişi: input.LoadPdf() taranmış PDF'leri, dijital PDF'leri ve karışık PDF'leri hiçbir harici bağımlılık olmadan kabul eder. Parola korumalı PDF'ler için bir ek parametre gereklidir.
  • NuGet üzerinden 125+ dil: Dil paketleri standart NuGet paketleri olarak kurulur — IronOcr.Languages.French, IronOcr.Languages.Arabic — ve hiçbir klasör yönetimi veya yol yapılandırması gerektirmez.
  • İş parçacığı güvenli IronTesseract örneği: Tek bir örnek tüm iş parçacıklarına eş zamanlı hizmet eder. Paralel toplu işleme, iplik başına motor başlatmayı gerektirmez.
  • Çapraz platform tek paket: Windows, Linux, macOS, Docker, Azure ve AWS hepsi platforma özel yapılandırma olmadan aynı NuGet paketinden dağıtılır.
  • Aranabilir PDF çıktısı: OCR sonuçlarını tek bir yöntem çağrısında aranabilir PDF'ye dönüştürür.
  • Fiyatlandırma: $999 Lite süresiz / $1,499 Plus / $2,399 Professional / $4,799 Unlimited — tek seferlik satın alma, doküman başına ücret yok.

Özellik Karşılaştırması

ÖzellikTesseract (charlesw)IronOCR
LisansApache 2.0 (ücretsiz)Ticari ($999+ süresiz)
PDF girişiHiçbiri - dış kütüphane gerektirirDoğal yerleşik
Görüntü ön işlemeElle - 100+ satırlık kodOtomatik + tek satırlık yöntemler
Dil yönetimiManuel tessdata dosya indirimiNuGet paketi kurulum
Thread güvenliğiİplik güvenli değil (iplik başına motor)İplik güvenli tekil örnek
DağıtımDoğal DLL'ler + tessdata klasörüTek bir NuGet paketi
Tesseract sürümü4.1.1 (2019)5.x optimize edilmiş

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

Kategori / ÖzellikTesseract (charlesw)IronOCR
Kurulum ve Yükleme
NuGet yükleInstall-Package TesseractInstall-Package IronOcr
Ek kurulum adımlarıtessdata indir + yol yapılandırmaNone
Yerel binar dağıtımıGereklidirPaket içinde
Docker kurulumapt-get + tessdata kopyalamaEk adımlar yok
Kurulum süresi tahmini2-4 saat5 dakika
Ön işlem
HizalamaElle (50+ satır)input.Deskew()
Gürültü gidermeElle (25+ satır)input.DeNoise()
Kontrast artırmaElle (15+ satır)input.Contrast()
BinarizasyonElle (15+ satır)input.Binarize()
Çözünürlük ölçeklemeElle (20+ satır)input.EnhanceResolution(300)
Toplam ön işleme LOC~180 satır1-10 satır
PDF Desteği
Taralı PDF'leri OkuYerel olarak desteklenmezYerel
Dijital PDF'leri OkuYerel olarak desteklenmezYerel
Şifre korumalı PDF'lerŞifre çözme kütüphanesi gerekirBir parametre
Sayfa aralığı seçimiElle (PDF kütüphanesi aracılığıyla)input.LoadPdfPages()
Aranabilir PDF'ler oluşturDesteklenmiyorresult.SaveAsSearchablePdf()
Dil Desteği
İngilizceDahil (dosya gereklidir)Dahil
Ek dillerElle .traineddata indirmeNuGet paketi
Dil sayısı100+ (manuel yönetim)125+ (NuGet)
Çok dilli tek çağrıda"eng+fra+deu" dizesiAddSecondaryLanguage()
Konu İşleme
İş parçacığı güvenli motorHayırEvet
Paralel işlemeİş parçacığı başına motor oluşturmaPaylaşılan tek örnek
İplik başına bellekHer biri 40-100 MBPaylaşılan havuz
Çıktı ve Sonuçlar
Düz metinpage.GetText()result.Text
Kelime düzeyi sınırlayıcı kutularResultIterator döngüresult.Words LINQ
Güven skorupage.GetMeanConfidence()result.Confidence
Aranabilir PDFDesteklenmiyorresult.SaveAsSearchablePdf()
hOCR içeri aktarmapage.GetHOCRText()result.SaveAsHocrFile()
Barkod tespitiDesteklenmiyorocr.Configuration.ReadBarCodes = true
Platform Desteği
WindowsEvetEvet
LinuxDerleme/apt-get gerektirirEvet
macOSElle kurulum gerektirirEvet
DockerÇok adımlı kurulumKutudan çıkar çıkmaz çalışır

Ön İşleme Boşluğu

Ön işleme gereksinimi, 20-40 saatlik zaman tahmininin kaynağıdır. Bu abartı değildir. Tesseract ile sıfırdan güvenilir bir ön işleme hattı oluşturmak, IronOCR'nin yerleşik olarak sunduğu her dönüşümü uygulamak anlamına gelir.

Tesseract Yaklaşımı

image-preprocessing-tesseract.cs'de gösterilen tam ön işleme hattı, System.Drawing.Common (yalnızca Windows) ya da ImageSharp gibi ek bir platformlar arası kütüphaneyi gerektirir. Yalnızca düzeltme uygulaması basitleştirilmiş olduğunu belirtir — üretim düzeyindeki bir kayma algılama algoritması, genellikle OpenCvSharp4'ün ek bir bağımlılık olarak dahil edilmesini gerektiren bir Hough hattı dönüşümü gerektirir.

// image-preprocessing-tesseract.cs — the actual implementation pattern
private static Bitmap ConvertToGrayscale(Bitmap original)
{
    var result = new Bitmap(original.Width, original.Height);
    using (var graphics = Graphics.FromImage(result))
    {
        var colorMatrix = new ColorMatrix(new float[][]
        {
            new float[] { 0.299f, 0.299f, 0.299f, 0, 0 },
            new float[] { 0.587f, 0.587f, 0.587f, 0, 0 },
            new float[] { 0.114f, 0.114f, 0.114f, 0, 0 },
            new float[] { 0, 0, 0, 1, 0 },
            new float[] { 0, 0, 0, 0, 1 }
        });
        using (var attributes = new ImageAttributes())
        {
            attributes.SetColorMatrix(colorMatrix);
            graphics.DrawImage(original,
                new Rectangle(0, 0, original.Width, original.Height),
                0, 0, original.Width, original.Height,
                GraphicsUnit.Pixel, attributes);
        }
    }
    return result;
}

private static Bitmap EnhanceContrast(Bitmap image)
{
    var result = new Bitmap(image.Width, image.Height);
    float contrast = 1.5f;
    for (int y = 0; y < image.Height; y++)
    {
        for (int x = 0; x < image.Width; x++)
        {
            var pixel = image.GetPixel(x, y);
            int r = Clamp((int)((pixel.R - 128) * contrast + 128));
            int g = Clamp((int)((pixel.G - 128) * contrast + 128));
            int b = Clamp((int)((pixel.B - 128) * contrast + 128));
            result.SetPixel(x, y, Color.FromArgb(r, g, b));
        }
    }
    return result;
}

private static Bitmap RemoveNoise(Bitmap image)
{
    var result = new Bitmap(image.Width, image.Height);
    int kernelSize = 3;
    int radius = kernelSize / 2;
    for (int y = radius; y < image.Height - radius; y++)
    {
        for (int x = radius; x < image.Width - radius; x++)
        {
            var pixels = new List<int>();
            for (int ky = -radius; ky <= radius; ky++)
                for (int kx = -radius; kx <= radius; kx++)
                    pixels.Add(image.GetPixel(x + kx, y + ky).R);
            pixels.Sort();
            int median = pixels[pixels.Count / 2];
            result.SetPixel(x, y, Color.FromArgb(median, median, median));
        }
    }
    return result;
}

// After all preprocessing, save to temp file — Tesseract requires a file path
private static string RunTesseract(Bitmap preprocessed)
{
    string tempPath = Path.GetTempFileName() + ".png";
    try
    {
        preprocessed.Save(tempPath, ImageFormat.Png);
        using (var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default))
        using (var img = Pix.LoadFromFile(tempPath))
        using (var page = engine.Process(img))
            return page.GetText();
    }
    finally
    {
        if (File.Exists(tempPath)) File.Delete(tempPath);
    }
}

Bu, kaynak dosyalardan gerçek kod — kurgulanmış bir en kötü durum değil. Kontrast ve gürültü gidermek için piksel-tekrar yaklaşımı her piksel üzerinde O(n²) işletir. Geçici dosya kaydetme ve yükleme isteğe bağlı değildir; Pix.LoadFromFile disk üzerinde bir dosya yolu gerektirir. Günde 1.000 taranmış belge işleyen bir uygulama için bu, OCR zamanına ek olarak ölçülebilir yük bindirir.

IronOCR Yaklaşımı

IronOCR'daki aynı ön işleme, OcrInput üzerinde bir dizi yöntem çağrısından oluşur.

// dotnet add package IronOcr
using IronOcr;

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

input.Deskew();           // Detects and corrects skew angle automatically
input.DeNoise();          // Removes scanner artifacts and specks
input.Contrast();         // Enhances contrast for character separation
input.Binarize();         // Converts to black and white with adaptive threshold
input.EnhanceResolution(300);  // Scales to 300 DPI for optimal recognition

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

Geçici dosya yok. Piksel yinelemesi yok. System.Drawing.Common veya OpenCvSharp4 bağımlılığı yok. görüntü kalitesi düzeltme kılavuzu ve görüntü yönlendirme düzeltme kılavuzu tam filtre kataloğunu içerir — 15'ten fazla mevcuttur. görüntü filtreleri örneği, düşük kaliteli tarama hattını baştan sona gösterir.

Çoğu gerçek dünya belgesi için, varsayılan okuma, hiçbir açık filtre çağrısı olmadan akıllı otomatik ön işlem uygular:

// Automatic preprocessing applied internally — no explicit filter calls needed
var text = new IronTesseract().Read("scanned-invoice.jpg").Text;

Temiz, yüksek DPI'lı girdide bu bir maliyet getirmez. 72 DPI'lık bir telefon fotoğrafında, motor ölçeklendirir, geliştirir ve metni tanımaya başlamadan önce normalleştirir.

PDF Boşluğu

PDF, iş belgeleri için standart teslimat formatıdır. Sözleşmeler, faturalar, banka ekstreleri, tıbbi kayıtlar — bunlar PDF olarak gelir. Tesseract bir PDF'yi açamaz. Köprüyü kurmak için başka bir kütüphane, başka bir yerel bağımlılık ve 50-150 satır arası ek bağlantı kodu gerekir.

Tesseract Yaklaşımı

pdf-ocr-processing-tesseract.cs dosyası, üç ayrı PDF render kütüphanesi seçeneğini — PdfiumViewer, PDFtoImage ve Docnet.Core — her biri farklı bağımlılık zincirleri ve takaslarla belgeler. Bu dosyadaki PdfiumViewer örneği temsili:

// Tesseract PDF processing — from pdf-ocr-processing-tesseract.cs
// Requires: PdfiumViewer NuGet + pdfium native DLL deployed to application directory
// NuGet: PdfiumViewer, PdfiumViewer.Native.x64

using PdfiumViewer;

public static string ExtractFromPdfWithPdfium(string pdfPath)
{
    var results = new List<string>();

    using (var document = PdfDocument.Load(pdfPath))
    {
        using (var engine = new TesseractEngine(TessDataPath, "eng", EngineMode.Default))
        {
            for (int pageIndex = 0; pageIndex < document.PageCount; pageIndex++)
            {
                // Render page to image at 300 DPI
                using (var pageImage = document.Render(pageIndex, 300, 300,
                    PdfRenderFlags.CorrectFromDpi))
                {
                    // Tesseract requires a file path — must write to disk first
                    string tempPath = Path.GetTempFileName() + ".png";
                    try
                    {
                        pageImage.Save(tempPath);
                        using (var img = Pix.LoadFromFile(tempPath))
                        using (var page = engine.Process(img))
                            results.Add(page.GetText());
                    }
                    finally
                    {
                        File.Delete(tempPath);  // Must clean up or disk fills
                    }
                }
            }
        }
    }

    return string.Join("\n\n--- Page Break ---\n\n", results);
}

pdf-ocr-processing-tesseract.cs kaynağı doğrudan bağımlılık zincirini belirtir: 'Tesseract: Apache 2.0, PdfiumViewer: BSD, iText: AGPL veya ticari, GhostScript: AGPL veya ticari.' Bu son öğe, kurumsal bağlamlarda önemlidir — GhostScript'in AGPL lisansı, uygulamanızın açık kaynak olmasını gerektirir, eğer bir ticari GhostScript lisansı satın almazsanız.

Parola korumalı PDF'ler bir başka katman ekler. Aynı dosyadaki PasswordProtectedPdf sınıfı, 'Şifreleme desteği olan bir PDF kütüphanesi gerektirir (iText, PDFSharp).' yorumu ile NotImplementedException fırlatır. Tesseract PDF'leri şifre çözemez.' Yani parola koruması, kendi lisanslama değerlendirmeleri ile dördüncü bir bağımlılık anlamına gelir.

IronOCR Yaklaşımı

IronOCR, taranmış PDF'ler, dijital metin PDF'leri, karışık içerikli PDF'ler ve parola korumalı PDF'ler dahil olmak üzere PDF'leri doğal olarak okur:

// dotnet add package IronOcr
using IronOcr;

// Scanned PDF — direct load, no rendering library required
var result = new IronTesseract().Read("scanned-contract.pdf");
Console.WriteLine(result.Text);

// Password-protected PDF — one additional parameter
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var protectedResult = new IronTesseract().Read(input);

// Specific page range from a 200-page document
using var rangeInput = new OcrInput();
rangeInput.LoadPdfPages("large-report.pdf", 1, 10);
var rangeResult = new IronTesseract().Read(rangeInput);

// Create searchable PDF with embedded text layer
var searchable = new IronTesseract().Read("scanned-invoice.pdf");
searchable.SaveAsSearchablePdf("searchable-invoice.pdf");

PDF oluşturma kütüphanesi yok. Geçici dosya yok. AGPL lisans değerlendirmeleri yok. PDF giriş nasıl yapılır kılavuzu, tüm PDF giriş varyasyonlarını kapsar. aranabilir PDF nasıl yapılır metin katmanı çıktısını açıklar. Belge işleme boru hatları oluşturan ekipler için, PDF OCR kullanım sayfası, üretim mimarisi kalıplarını sağlar.

Ön işleme yöntemleri PDF girdisinde aynen çalışır, taranmış PDF'lerde hiçbir ara dönüştürme adımı olmadan aynı input.Deskew(), input.DeNoise(), input.EnhanceResolution() çağrılarına izin verir.

Tessdata Yönetimi

Her Tesseract dağıtımı, bir tessdata klasör sorunu içerir. Klasörün var olması, doğru .traineddata dosyaları ile doldurulması ve TesseractEngine başlatma sırasında belirtilen yoldan erişilebilir olması gerekir. Bu, ölçekle birlikte büyüyen bir dağıtım karmaşıklığı yaratır.

Tesseract Yaklaşımı

multi-language-tesseract.cs dosyası, dil dosyalarının boyutlarını ve yönetim sürecini belgeliyor:

// Must exist before initialization:
// ./tessdata/eng.traineddata   (~15 MB)
// ./tessdata/fra.traineddata   (~15 MB)
// ./tessdata/deu.traineddata   (~15 MB)
// ./tessdata/chi_sim.traineddata  (~45 MB)
// ./tessdata/jpn.traineddata   (~40 MB)
// 10 languages = 200-300 MB to download and manage

public string SafeMultiLanguageOcr(string imagePath, string[] languages)
{
    // Check presence before attempting — runtime failures are worse
    foreach (var lang in languages)
    {
        if (!File.Exists(Path.Combine(TessDataPath, $"{lang}.traineddata")))
        {
            throw new FileNotFoundException(
                $"Missing {lang}.traineddata in {TessDataPath}. " +
                "Download from https://github.com/tesseract-ocr/tessdata");
        }
    }

    var langString = string.Join("+", languages);  // e.g., "eng+fra+deu"
    using var engine = new TesseractEngine(TessDataPath, langString, EngineMode.Default);
    using var img = Pix.LoadFromFile(imagePath);
    using var page = engine.Process(img);
    return page.GetText();
}

Koruyucu dosya varlık kontrolü paranoya değildir — eksik bir .traineddata dosyası, eksik dosyanın hangisi olduğunu her zaman net olarak belirtmeyen bir mesajla TesseractException: Failed to initialise tesseract engine fırlatır. basic-text-extraction-tesseract.cs kaynağı, yaygın çalışma zamanı istisnalarını belgeliyor: Eksik Leptonica ikili dosyaları için System.DllNotFoundException, eksik tessdata için TesseractException, 32/64-bit uyumsuzlukları için BadImageFormatException.

Docker dağıtımlarında, tessdata dosyaları konteyner görüntüsüne kopyalanmalıdır. Üç dil için her biri 15 MB artı best modelleri her bir 50-100 MB olacak şekilde, konteyner görüntüleri birkaç yüz megabayt şişer. CI/CD boru hatları bu indirmeleri ya önceden önbelleğe almalı ya da önbellek soğukken yavaş derleme sürelerini kabul etmelidir.

IronOCR Yaklaşımı

IronOCR'de dil desteği bir NuGet paketi referansıdır:

// Install once: dotnet add package IronOcr.Languages.French
// Install once: dotnet add package IronOcr.Languages.German
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
ocr.AddSecondaryLanguage(OcrLanguage.German);

var result = ocr.Read("multilingual-document.jpg");

Dil verileri NuGet paketine yerleştirilmiştir. Oluşturulacak klasör yok, yapılandırılacak yol yok, GitHub'dan indirilecek ve doğrulanacak dosya yok. Docker'a bir dil eklemek, .csproj'a bir PackageReference satırı eklemek anlamına gelir. Çoklu diller nasıl yapılır kılavuzu 125'ten fazla dil kataloğunu kapsar ve çok dilli blog yazısı, üretim çok dilli boru hatlarını CJK karakter setleri dahil gösterir.

API Eşleme Başvurusu

Tesseract (charlesw)APIIronOCR Karşılığı
new TesseractEngine(tessDataPath, "eng", EngineMode.Default)new IronTesseract()
Pix.LoadFromFile(path)input.LoadImage(path) veya ocr.Read(path)
Pix.LoadFromMemory(bytes)input.LoadImage(bytes)
engine.Process(img)ocr.Read(input)
page.GetText()result.Text
page.GetMeanConfidence()result.Confidence
page.GetHOCRText(0)result.SaveAsHocrFile(path)
engine.Process(img, tessRect)input.LoadImage(path, new CropRectangle(...))
iter.GetText(PageIteratorLevel.Word)result.Words[i].Text
iter.GetConfidence(PageIteratorLevel.Word)result.Words[i].Confidence
iter.TryGetBoundingBox(PageIteratorLevel.Word, out bounds)result.Words[i].X, .Y, .Width, .Height
"eng+fra+deu" dil dizesiocr.AddSecondaryLanguage(OcrLanguage.French)
Uygun değil — PdfiumViewer veya benzeri gerektiririnput.LoadPdf(path)
Uygun değil — PDF kütüphanesi gerektiririnput.LoadPdf(path, Password: "secret")
Uygun değil — desteklenmiyorresult.SaveAsSearchablePdf(outputPath)
Manuel önişleme boru hattıinput.Deskew(), input.DeNoise(), input.Binarize()
Her iş parçacığı başına manuel çoklu iş parçacığı motoruİş parçacığı güvenli tek IronTesseract örneği

Takımlar Tesseract'tan IronOCR'a Geçmeyi Düşündüklerinde

Önişleme Dönüm Noktası Geldiğinde

Her Tesseract projesi, temiz test görüntüleri ile başlar. Örnek faturalar, net taranmış belgeler, ilk okumada çalışan 300 DPI'da PNG dosyaları. Önişleme sorusu ertelenir. Sonra ilk üretim partisi gelir: 150 DPI'da fakslanmış satın alma siparişleri, 3 derece eğimle taranmış sözleşmeler, floresan ışık altında çekilmiş fişlerin fotoğrafları. Doğruluk %60-70 seviyelerine düşer. Takım şimdi ertelenmiş olan önişleme boru hattını uygulamak zorunda kalır, gri tonlamaya dönüştürme ve kontrast iyileştirmenin yönetilebilir olduğunu, ancak uyumun bir Hough dönüşümü gerektirdiğini ve gürültüsüzleştirme için bir medyan filtre gerektiğini ve bunların hiçbirinin iki saatlik iş olmadığını keşfeder. Bu kilometre taşında olan ekipler — ön işleme borcu bir sprint birikimi öğesi haline geldiğinde — IronOCR'u sık sık değerlendirir çünkü lisans maliyeti, onlar için kiralanmadıkları görüntü işleme işinin iki geliştiricinin haftasına göre daha ucuzdur.

PDF Gereksinimi Belirdiğinde

Belge işleme uygulamaları neredeyse her zaman sonunda PDF desteğine ihtiyaç duyar. İlk yanıt genellikle 'PdfiumViewer ekle' olur — bu, iyi belgelenmiştir ve birçok durumda iyi çalışır. Sorunlar üretimde ortaya çıkar: yerel pdfium.dll uygulama dizininde doğru bit boyutunda mevcut olmalı, konteyner görüntüleri Dockerfile'larda açık COPY adımları gerektirir,Linuxdağıtımları ilgili .so dosyasını gerektirir ve şifre korumalı PDF'ler için kendi lisansına sahip ayrı bir şifre çözme kütüphanesi gereklidir. Tesseract yerel kütüphaneleri, Leptonica ve pdfium — dört ortamda (Windows, Linux, Docker, CI) — üç ayrı bağımlılık zincirini yöneten ekipler tek bir paket alternatifi değerlendirmenin değerli hale geldiği bir bakım eşiğine ulaşır.

Ölçekte Paralel İşleme

500 faturayı işleyen bir toplu OCR işi paralellikten yararlanır. charlesw sarmalayıcı ile güvenli paralel işleme deseni, her iş parçacığı için bir motor örneği oluşturur ve her biri 40-100 MB dil modeli verisi yükler. Sekiz iş parçacığında, belgeler yüklenmeden önce bu, 320-800 MB motor belleğidir. OCR hizmetlerini profilleyen ekipler ve bellek baskısının belge içeriği yerine motor başlatma sırasında yoğunlaştığını bulanlar, IronOCR'nin iş parçacığı güvenli tek örnek modeli doğrudan kök nedeni çözdüğünü görürler. çok iş parçacıklı örnek deseni gösterir.

Dağıtım Ortamları Çoğalıyor

Windows'ta başlayan bir proje, bulut dağıtımı için birLinuxkonteyner ekler. Dockerfile artık yerel kütüphane kurulum adımlarına ihtiyaç duyar, tessdata dosyaları konteyner içine kopyalanmalı ve tessdata yol ortam değişkeni doğru ayarlanmalıdır. Sonra birmacOSgeliştirici ekibe katılır. Sonra biri AWS Lambda'ya dağıtım yapmak ister. Her platform sessizce başarısız olabilen başka bir yapılandırma yüzeyi ekler - üretim konteynerında çalışma zamanı eksik olan yerel bir kütüphane, biraz daha yüksek bir NuGet paketi maliyetinden daha kötü bir sonuçtur. IronOCR Dockerdağıtım kılavuzu karşıtlığı gösterir: sistem paketleri yok, tessdata kopyalama adımı yok, ortam değişkeni yok.

Tesseract Versiyon Paritesi Önemlidir

Tesseract 5.x, belirli belge türlerinde ölçülebilir olan LSTM doğruluğunda iyileştirmeler getirmiştir. charlesw sarmalayıcı Tesseract 4.1.1'i hedefler. OCR doğruluğunun zor belgelerde bir ürün kalitesi metriği olduğu ekipler için, versiyon farkı gerçek bir değerlendirme konusudur — özellikle alternatif, mevcut motor sürümünü takip eden ticari olarak sürdürülen bir paket olduğunda.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

Tessdata Klasörünün Kaldırılması

IronOCR'ye geçtikten sonraki ilk temizlik adımı, tessdata klasörünü silmek ve proje dosyasından ilgili <Content Include="tessdata\**"> öğelerini kaldırmaktır. Sabit kodlanmış yol doğrulama kodu — Directory.Exists(TessDataPath) güvencesi basic-text-extraction-tesseract.cs 'da mevcut — da ortadan kalkar. using Tesseract; ad alanı referansları ve TesseractEngine, Pix ve Page tip referanslarının tümü, using IronOcr;, IronTesseract, OcrInput ve OcrResult ile değiştirilmelidir.

PDF Kütüphanesinin Kaldırılması

Yalnızca Tesseract PDF işleme desteği için eklenen herhangi bir PDF işleme kütüphanesi — PdfiumViewer, PDFtoImage, Docnet.Core — kaldırılabilir. Bu paketlerin gerektirdiği yerel ikili bağımlılıklar (pdfium.dll, GhostScript ikili dosyaları) da ortadan kalkar. Dockerfile COPY ve apt-get bu bağımlılıklar için satırlara artık ihtiyaç yok. IronOCR PDF giriş kılavuzu, bu kütüphanelerin ele aldığı her PDF giriş varyasyonunu, sayfa aralığı seçimini ve şifreyle korunmuş belgeler dahil ele alır. Tüm render-sonrası-OCR bloğu — tipik olarak üç kütüphaneyi kapsayan 50-80 satır — input.LoadPdf(path) ardından tek bir Read() çağrısına kadar küçülür.

Önişleme Kodunun Değiştirilmesi

Mevcut ön işleme yöntemleri — ConvertToGrayscale, EnhanceContrast, Binarize, RemoveNoise, Deskew, ScaleToDpi — doğrudan IronOCR filtre yöntemleriyle eşleşir. Geçici dosya kaydet-ve-yükle düzeni tamamen ortadan kalkar. Renk özgül dönüşümler için görüntü renk düzeltme kılavuzuna ve çözünürlük yönetimi için DPI ayarları kılavuzuna başvurun.

İş Parçacığı Modeli Değişikliği

Kod, her iş parçacığı için bir TesseractEngine oluşturduğu Parallel.ForEach döngüsünde — bir IronTesseract oluşturup tüm iş parçacıkları arasında paylaşmaya dönüştürülür. Bu bir doğruluk değişikliği, yalnızca bir yeniden düzenleme değil: eski düzen, iş parçacığı güvenli olmayan bir API etrafında savunmacı programlama idi; yeni düzen, iş parçacığı güvenli bir API'nin amaçlanan kullanımıdır. Her iş parçacığı başına motor başlatma yükü — iş parçacığı başına 40-100 MB dil modeli verisi — değişiklikle birlikte ortadan kalkar çünkü IronOCR, motor örneği başına tam model durumu yüklemek yerine paylaşılan bir iç havuz tutar.

Ek IronOCR Yetenekleri

Önişlemeyi ve PDF desteğini aşan IronOCR, çapraz karşılaştırmayı çok aşan yetenekler içerir:

  • Bölge tabanlı OCR: Tam görüntüyü işlemeye gerek kalmadan bir tanımlanmış kırpma dikdörtgeninden metin çıkarın. bölge OCR kılavuzu ve kırpma örneği, fatura başlığı çıkarımını ve form alanı izolasyonunu kapsar.
  • Güven bazlı kalite yönlendirme: result.Confidence, belgeleme düzeyinde bir doğruluk tahmini sunar ve düşük güven sonuçlarının iki kez OCR çalıştırmak zorunda kalmadan insan inceleme kuyruğuna yönlendirilmesini sağlar. güven puanları kılavuzunu inceleyin.
  • Async OCR: Bir CPU-bağımlı işlemde istek iş parçacığını engellemenin kabul edilemez olduğu ASP.NET Core uygulamaları için async OCR kılavuzu kapsar.
  • Özel belge türleri: Pasaport okuma, MICR/çek okuma, ve plaka okuma, özel eğitim modelleri gerektirmeden hedeflenen özellikler olarak mevcuttur.
  • Hız yapılandırması: hız optimizasyon kılavuzu ve hız ayarı örneği yüksek yüksek-throughput toplu işlem durumunda belgeler arası gecikmenin önemli olduğu yerlerde yapılandırma seçeneklerini belgelemektedir.

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

IronOCR, .NET 6, .NET 7, .NET 8 ve .NET 9'u hedefler, ve 2026 sürümünde .NET 10 için aktif destek verir. Kütüphane ayrıca modern .NET'e henüz geçiş yapmamış projeler için .NET Standard 2.0'ı destekler. charlesw Tesseract sarımı, .NET Standard 2.0'ı hedefler ve 2019'dan Tesseract motor sürümü 4.1.1'e sabitlenmiştir, bu paket aracılığıyla Tesseract 5.x desteği için herhangi bir duyurulmuş yol haritası yoktur. Yeni başlayan projeler ve çok yıllı bakım pencereleri planlayan ekipler için, motor sürümü farkı ve sarımın yavaşlayan bakım temposu, sıfır maliyetli lisansın yanında değerlendirmeye değer faktörlerdir.

Sonuç

charlesw NuGet sarımı aracılığıyla Tesseract, sahici bir OCR motorudur, oyuncak değildir. 8 milyon indirme sayısı, gerçek uygulamalarda gerçek kullanımı yansıtır ve temiz, iyi biçimlendirilmiş görüntülerde popülaritesini haklı çıkaran doğruluk seviyelerine ulaşır. Dürüst karşılaştırma, OCR kalitesi ile ilgili değil — üretim koşullarında bu kalitenin sağlanması için gereken mühendislik çalışmasının yüzeyi ile ilgilidir.

Önişleme boşluğu, merkezi bir değiş tokuştur. Gerçek dünyadaki belgelerde iyi doğruluğu kötü doğruluktan ayıran yaklaşık 180 satır görüntü manipülasyonu kodu küçümsenecek bir engel değildir. Bu, görüntü işleme bilgisi, ek bağımlılıklar ve yeni belge türleri çıktıkça devam eden bakım gerektiren bir mühendislik görevidir. PDF boşluğu başka bir katman ekler: ikinci bir kütüphane, ikinci bir yerel ikili seti, başka bir dağıtım yüzeyi ve GhostScript veya iText ile potansiyel lisans karmaşıklıkları. Bir prototipi bir üretim sisteminden ayıran 20-40 saatlik kurulum tahmininin nedeni birlikte, bu iki boşluktur.

IronOCR, her iki boşluğu doğrudan ele alır: önişleme, tek bir satır yöntem çağrısıdır, PDF yerel bir giriş formatıdır ve tüm çözüm tek bir NuGet paketi olarak dağıtılır. $999 süresiz lisansı, iki hafta boyunca görüntü işleme kodu ve bağımlılık zinciri yönetimi üzerine harcama yapmamanın maliyetidir. Geliştirici zamanının lisans fiyatından daha pahalıya mal olduğu ekipler için, matematik açıktır. Açık kaynak lisans gereklilikleri veya sıfır bütçeli ekipler için, Tesseract, onunla birlikte gelen mühendislik yatırımı hakkında açık bir görüşe sahip olarak ilerleme yoludur.

Karar, belge türlerine ve operasyonel bağlama temiz bir şekilde haritalanır: tek ortam dağıtımında temiz, kontrol edilmiş görüntüler Tesseract'ın ücretsiz lisansını destekler. Gerçek dünya taramaları, PDF iş akışları, çoklu ortam dağıtımı ve ölçekte paralel işleme, hesaplamayı IronOCR'yi yönlendiren sürtüşmeyi her biri ekler. Çoğu üretim belge işleme sistemleri en az iki bu durumla karşılaşır.

Lütfen dikkate alın: Ghostscript, PDFium, PDFSharp, Tesseract ve iText, ilgili sahiplerinin tescilli markalarıdır. Bu site, Artifex Software, Chromium Project, Google, empira Software GmbH veya iText Group ile bağlantılı, onaylanmış veya desteklenmiş değildir. Tüm ürün adları, logolar ve markalar, ilgili sahiplerinin malıdır. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.
Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

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

Your trial license will be sent to your email address

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

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