IRONSOFTWAREHOME
VIDEOLAR

Patagames Tesseract.NET SDK'dan IronOCR'ye geçiş yapma

Curtis Chau
Curtis Chau
Updated: 1 Ağustos 2026

Bu rehber, .NET geliştiricilerini IronOCR'a Patagames Tesseract.NET SDK'dan tam bir taşıma sürecine götürür. Mekanik API çevirisini, çoğu taşınmayı gereken çapraz platform dağıtım kilidini ve bir Windows-yanlısı ticari ambalajdan Windows, Linux, macOS, Docker, Azure ve AWS'de değişiklik yapmadan çalışan bir kütüphaneye geçişi için gerekli pratik kod değişikliklerini kapsar.

Patagames Tesseract.NET SDK'dan Neden Geçiyorsunuz

Patagames'i değiştirmeyi değerlendiren takımların çoğu, OCR doğruluğundan memnun değil. Bir dağıtım duvarı - bir Linux konteyneri hedefi, bir bulut taşıma projesi veya Ubuntu üzerinde bir CI boru hattı - ile karşılaşıyor ve Windows-yalnızca yerel ikili dosyanın bu platformda ileriye dönük bir yolunun olmadığını keşfediyorlar. Tek bir kısıtlama taşınma değerlendirmesinin geri kalanını yönlendiriyor.

Yalnızca Windows Dağıtımı Modern .NET Yığınını Engelliyor. Patagames, Tesseract motor sarmalayıcısı için Windows yerel ikili dosyaları sunar. Linux x64, macOS veya ARM çalışma zamanı paketleri yoktur. Windows DLL'sini çalışma zamanında yükleyen OcrApi sınıfı; başka herhangi bir işletim sisteminde uygulama başlatılamaz. Yeni çapraz platform geliştirmesi için destek verilmeyen olarak Microsoft tarafından resmen işaretlenen System.Drawing.Bitmap bağımlılığını ekleyin ve kütüphane her bulut sağlayıcısı ve konteyner düzenleyici varsayılan dağıtım modeli ile uyumsuzdur.

Ücretsiz Motor İçin Ticari Oranlar Ödemek, Çapraz Platform Erişimi Olmadan. Patagames'in destekleyen Tesseract motoru açık kaynak ve ücretsizdir. Patagames'in tarihsel olarak sunduğu ana konfor argümanını ortadan kaldıran, bugün önceden derlenmiş Windows ikili dosyalarını gönderilen tesseractocr gibi ücretsiz topluluk sargıları da bulunmaktadır. Patagames için bir ticari lisans, ham Tesseract'a kıyasla biraz daha temiz bir API yüzeyi satın alır, ancak ön işleme, PDF desteği, aranabilir PDF çıktısı veya çapraz platform dağıtımı eklemez — 2026'da eksiksiz bir OCR kütüphanesini tanımlayan dört yetenek.

Şeffaf Olmayan Fiyatlandırma, Bütçe Planlamasını İmkansız Hale Getirir. Patagames lisans fiyatlarını yayınlamaz. Kütüphaneyi değerlendirmek, herhangi bir maliyet karşılaştırması yapmadan önce bir satış temasını gerektirir.IronOCR fiyatlandırması, bir yıllık güncellemeler dahil olacak şekilde kalıcı tek geliştirici Lite lisansı için $999'den başlamaktadır. Takımlar, bir satış işlemi olmadan maliyet ile kapasite arasında değerlendirme yapabilirler. IronOCR lisanslama sayfasına tam kademe detayları için bakın.

Ham Tesseract Değişkenleri API Üzerinden Sızar. Patagames'te sayfa segmentasyon modunu ayarlamak, hiçbir IntelliSense, derleme zamanı kontrolü ve keşif özelliği olmadan ham dize tabanlı bir Tesseract değişken ataması olan api.SetVariable("tessedit_pageseg_mode", "3") çağrısını gerektirir. Değişken adını yanlış yazın ve arama sessizce hiçbir şey yapmaz. IronOCR, her Tesseract konfigürasyon seçeneğini IronTesseract.Configuration üzerindeki güçlü tip özelliklerde paketler.

Düz Bir Dize Harici Yapılandırılmış Çıkış Yok. Patagames GetTextFromImage sadece bir dize döndürüyor. Kelime sınırlarına, satır gruplamalarına, paragraf yapısına veya kelime başına güven puanlarına erişim yoktur. Belirli alanları formlardan çıkarmak veya kelime kelime bazında OCR doğruluğunu doğrulamak için uygulamaların Patagames API'siyle bir yapı kuracak temeli yoktur.

CI/CD Boru Hatları Linux Adımında Kırılır. Modern .NET geliştirme ekipleri CI'yi Linux'ta çalıştırır — GitHub Actions, GitLab CI ve Azure DevOps hepsi Linux tabanlı koşucuları varsayılan olarak kullanır. Tesseract.Net.SDK'yu referans alan bir proje, ya yerel ikili referansını inşa edemez ya da entegrasyon testleri sırasında çalışma zamanında başarısız olur. Her test çalışması bir Windows-spesifik CI koşucusu veya OCR katmanını tamamen taklit eden bir geçici çözüm gerektirir.

Temel Sorun

Patagames yalnızca Windows'u hedefler. Dağıtım hedefiniz değişir değişmez, kütüphane devamen edemez:

// Patagames: Windows DLL loads; fails on Linux container or macOS developer machine
using var api = OcrApi.Create();
api.Init(@"./tessdata", "eng"); // tessdata path — must be manually managed in every environment
using var bitmap = new Bitmap(imagePath); // System.Drawing — unsupported on non-Windows targets
return api.GetTextFromImage(bitmap);
C#
// IronOCR: same code runs on Windows, Linux, macOS, Docker, Azure, AWS
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
C#

Tessdata dizini yok. Yerel DLL yolu yok. Platform koşulları yok. nuGet bağımlılık grafiği, her hedef için doğru çalışma zamanını otomatik olarak çözer.

IronOCR vs Patagames Tesseract.NET SDK: Özellik Karşılaştırması

Aşağıdaki tablo, Patagames'i üretim ortamında çalıştıran ekipler için önemli olan yetenekleri kapsamaktadır.

ÖzellikPatagames Tesseract.NET SDKIronOCR
Windows desteğiEvetEvet
Linux desteğiHayırEvet
macOS desteğiHayırEvet
Docker dağıtımıHayırEvet
Azure Uygulama HizmetiHayırEvet
AWS LambdaHayırEvet
NuGet paketiTesseract.Net.SDKIronOcr
Lisans modeliTicari (fiyat için iletişim)Kalıcı ($999–$2.999, açık)
OCR motoruTesseract (açık kaynak)Optimize Tesseract 5 (paketli)
Tessdata Yönetimi.traineddata dosyalarla Manuel dizinNuGet dil paketleri
Otomatik ön işlemeNoneDeskew, DeNoise, Contrast, Binarize, Sharpen, Scale, Dilate, Erode
Derin arka plan gürültüsü gidermeNoneEvet (DeepCleanBackgroundNoise())
Yerel PDF girişiHayır (dış renderer gerekiyor)Evet
Çok sayfalı TIFF girişiSınırlıEvet (input.LoadImageFrames())
Aranabilir PDF çıktısıHayırEvet (result.SaveAsSearchablePdf())
hOCR ihracatHayırEvet
Desteklenen dillerTesseract tessdata dosyaları125+ NuGet paketleri aracılığıyla
Çok dillilik aynı andaEvet (dize birleştirme)Evet (güçlü tip OcrLanguage enum)
Bölge tabanlı OCRHayırEvet (CropRectangle)
Barkod okumaHayırEvet
Yapısal çıktıSadece düz dizeSayfalar, Paragraflar, Satırlar, Kelimeler, Koordinatlı Karakterler
Kelime başına güven puanlarıHayırEvet
Sayfa segmentasyonu yapılandırmasıHam SetVariable dize çağrısıGüçlü tip Configuration.PageSegmentationMode
System.Drawing bağımlılığıGereklidirOpsiyonel
Thread güvenliğiStandart Tesseract limitleriTam (her iş parçacığı için IronTesseract oluştur)
Ticari destekEvetEvet
NuGet indirmeleriSınırlı5,3M+

Hızlı Başlangıç: Patagames Tesseract.NET SDK'dan IronOCR'a Taşıma

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

Patagames Tesseract.NET SDK'sını çıkarın:

dotnet remove package Tesseract.Net.SDK
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

Zümre İngilizce dil desteği için ilgili dil paketini kurun:

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

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

Patagames ad alanlarınıIronOCR ad alanıyla değiştirin:

// Before (Patagames)
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

// After (IronOCR)
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

Uygulama başlangıcında lisans başlatmasını ekleyin (ilk IronTesseract çağrısından önce):

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

Satın alınmadan geçiş testi başlatmak için ücretsiz bir deneme lisansı ironsoftware.com/C#/ocr/ adresinde mevcuttur.

Kod Göç Örnekleri

Toplu Klasör İşleme

  1. Faza tek resim çıkarımı gösterildi. Üretim Patagames dağıtımları genellikle bir döngü içinde bir OcrApi başlatır, her yinelemede api.Init() çağırır - bu da tessdata'yı yeniden yükler ve her dosya için Tesseract motorunu yeniden başlatır. Bu desen, yüzlerce belge boyunca başlatma maliyetini birleştirir.

Patagames Yaklaşımı:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.IO;

public class PatagamesBatchProcessor
{
    private const string TessDataPath = @"./tessdata";

    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            // OcrApi re-initialized per file — tessdata loaded each time
            using var api = OcrApi.Create();
            api.Init(TessDataPath, "eng");

            using var bitmap = new Bitmap(file);
            var text = api.GetTextFromImage(bitmap);

            results[Path.GetFileName(file)] = text;
        }

        return results;
    }
}
C#

IronOCR Yaklaşımı:

// NuGet: IronOcr
using IronOcr;
using System.IO;

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

public class IronOcrBatchProcessor
{
    public Dictionary<string, string> ProcessFolder(string folderPath)
    {
        var results = new Dictionary<string, string>();
        // Single engine instance — initialized once, reused across all files
        var ocr = new IronTesseract();

        foreach (var file in Directory.GetFiles(folderPath, "*.jpg"))
        {
            var result = ocr.Read(file);
            results[Path.GetFileName(file)] = result.Text;
        }

        return results;
    }
}
C#

IronOCR'un IronTesseract örneği, çağrılar arasında motor durumunu tutar. Bir partinin tamamı için bir örneği yeniden kullanmak dosya başına başlatım yükünü ortadan kaldırır ve tessdata yol bağımlılığını tamamen kaldırır. Birden fazla CPU çekirdeği üzerinde paralel toplu işleme için, tek bir örnek paylaşmak yerine her iş parçacığı için bir IronTesseract oluşturun — çok iş parçacıklı örnek. Ç

Sayfa Segmentasyonu Modu Taşıması

Patagames, sayfa segmentasyon modunu ham bir SetVariable çağrısı aracılığıyla, bir dize anahtarı ve dizeye dönüştürülmüş bir tamsayı değeri ile ifşa eder. IntelliSense yok, enum geçerliliği yok, çağrı noktasında belge ipucu yok. Tek basamaklı bir sayı, Tesseract'ın girişi tek bir metin bloğu, bir sütun, bir kelime veya tek bir karakter olarak ele alıp almayacağını kontrol eder — ve değişken adı yanlış yazıldığında geri bildirim yok.

Patagames Yaklaşımı:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using Patagames.Ocr.Enums;
using System.Drawing;

public string OcrSingleLineField(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    // Raw variable string — no IntelliSense, no validation
    // PageSegmentationMode.SingleLine == 7
    api.SetVariable("tessedit_pageseg_mode", "7");

    // Additional variable to suppress dictionary output
    api.SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz -.:/");

    using var bitmap = new Bitmap(imagePath);
    return api.GetTextFromImage(bitmap);
}
C#

IronOCR Yaklaşımı:

// NuGet: IronOcr
using IronOcr;

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

public string OcrSingleLineField(string imagePath)
{
    var ocr = new IronTesseract();

    // Strongly typed enum — discoverable through IntelliSense
    ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine;

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

Patagames'in SetVariable üzerinden ifşa ettiği her Tesseract konfigürasyon seçeneği, IronTesseract.Configuration içinde doğrudan güçlü bir tip karşılığına sahiptir. Taşıma, dizgisel sabitlerin adlandırılmış enum değerlere mekanik bir ikamesidir. IronTesseract API referansı yapılandırma yüzeyinin tamamını kapsar. Belirli belgeleri okuma rehberi, farklı belge türlerinde her sayfa segmentasyonu modunun ne zaman uygulanacağını kapsar.

Sonuç Düzenleyici Deseni Değiştirme

Patagames, GetTextFromImage'den düz bir dize döndürür. Patagames çıktısından bireysel kelimeleri, sınırlayıcı kutularını veya güven puanlarını çıkarma, döndürülen dizi üzerinde bir ayrıştırıcı yazmayı veya Tesseract sonuç iteratör API'sine doğrudan ara erişimi gerektirir. Her iki yaklaşım da güvenilir veya sürdürülebilir değildir. IronOCR, belge hiyerarşisinin her seviyesine yerli erişim sağlayan tam yapılı bir OcrResult sunar.

Patagames Yaklaşımı:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;

public void ExtractWordsWithPositions(string imagePath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    using var bitmap = new Bitmap(imagePath);
    //Sadece düz dize— no word positions, no confidence, no line grouping
    var text = api.GetTextFromImage(bitmap);

    // Only option: split on whitespace and hope line breaks survive
    var words = text.Split(new[] { ' ', '\n', '\r' },
        StringSplitOptions.RemoveEmptyEntries);

    foreach (var word in words)
    {
        //HayırX, Y, Width, Height — position information is lost
        Console.WriteLine(word);
    }
}
C#

IronOCR Yaklaşımı:

// NuGet: IronOcr
using IronOcr;

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

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

    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Width}x{page.Height}px");

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

        foreach (var word in page.Words)
        {
            // Bounding box, confidence, and text for every word
            Console.WriteLine($"  Word: '{word.Text}' at ({word.X},{word.Y}) " +
                              $"size {word.Width}x{word.Height} " +
                              $"confidence {word.Confidence:F1}%");
        }
    }

    Console.WriteLine($"Overall confidence: {result.Confidence:F1}%");
}
C#

Tam OcrResult yapısı — sayfalar, paragraflar, satırlar, kelimeler ve karakterler — herhangi bir son işlem analizcisinin gerekli olmasını ortadan kaldırır. Kelime koordinatları, pozisyona göre alan çıkarmayı sağlıyor, bu da fatura işleme, form OCR ve tablo çıkarmanın temelidir. yapılandırılmış sonuçlar rehberini tüm hiyerarşi için ve güven puanı rehberini düşük güven kelimeleri filtrelemek için izleyin.

Çok Sayfalı TIFF İşleme

Patagames bir System.Drawing.Bitmap kabul eder. Çoklu çerçeveli TIFF, birden fazla gömülü görsel içerir, ancak System.Drawing.Bitmap çerçeveleri otomatik olarak numaralandırmaz — onları tek tek işlemek için Image.SelectActiveFrame() kullanmalısınız ve her çerçeve bitmapini bir döngüde GetTextFromImage'ya iletmelisiniz. Çerçeve numaralama API'si belirgin değildir ve başarısız olduğundaki hata mesajları açıklayıcı değildir.

Patagames Yaklaşımı:

// NuGet: Tesseract.Net.SDK
using Patagames.Ocr;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;

public string ProcessMultiPageTiff(string tiffPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    using var tiffImage = Image.FromFile(tiffPath);
    var frameCount = tiffImage.GetFrameCount(FrameDimension.Page);

    for (int i = 0; i < frameCount; i++)
    {
        // Manual frame selection — FrameDimension.Page required
        tiffImage.SelectActiveFrame(FrameDimension.Page, i);

        using var frameBitmap = new Bitmap(tiffImage);
        var pageText = api.GetTextFromImage(frameBitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

IronOCR Yaklaşımı:

// NuGet: IronOcr
using IronOcr;

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

public string ProcessMultiPageTiff(string tiffPath)
{
    using var input = new OcrInput();
    // LoadImageFrames handles all frames automatically
    input.LoadImageFrames(tiffPath);

    // Optional: apply preprocessing to all frames at once
    input.Deskew();
    input.DeNoise();

    var result = new IronTesseract().Read(input);

    // Per-page access if needed
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words");
    }

    return result.Text;
}
C#

OcrInput.LoadImageFrames() çerçeve numaralamayı dahili olarak işler ve boru hattına her çerçevede ön işleme uygular. System.Drawing çerçeve seçim töreni tamamen kaybolur. TIFF ve GIF girişi rehberi yalnızca belirli sayfalar gerektiğinde tek çerçeve seçimini içeren ek seçenekler sunar.

Harici Bir Renderer Olmadan PDF Girişleri

Patagames'in yerel PDF desteği yoktur. Patagames tabanlı bir PDF OCR hattı, her sayfayı Bitmap'ya dönüştürmek için harici bir PDF işleme kütüphanesi — PdfiumViewer, iText veya PDFSharp — gerektirir ve GetTextFromImage'ya iletir. Bu harici bağımlılık, paket yönetim yükü, ayrı lisans düşüncesi ve ikincil arıza noktası ekler. Render kalitesi kütüphaneler arasında da değişiklik gösterir, bu da Tesseract motorundan bağımsız olarak OCR doğruluğunu etkiler.

Patagames Yaklaşımı:

// NuGet: Tesseract.Net.SDK + PdfiumViewer (external dependency)
using Patagames.Ocr;
using PdfiumViewer; // separate NuGet package required
using System.Drawing;
using System.Text;

public string OcrPdfDocument(string pdfPath)
{
    using var api = OcrApi.Create();
    api.Init(@"./tessdata", "eng");

    var sb = new StringBuilder();

    // External renderer required — Patagames has no PDF support
    using var pdfDoc = PdfDocument.Load(pdfPath);

    for (int page = 0; page < pdfDoc.PageCount; page++)
    {
        // Render at 300 DPI for acceptable OCR accuracy
        using var img = pdfDoc.Render(page, 300, 300, false);
        using var bitmap = new Bitmap(img);

        var pageText = api.GetTextFromImage(bitmap);
        sb.AppendLine(pageText);
    }

    return sb.ToString();
}
C#

IronOCR Yaklaşımı:

// NuGet: IronOcr only — no external PDF renderer
using IronOcr;

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

public string OcrPdfDocument(string pdfPath)
{
    using var input = new OcrInput();
    input.LoadPdf(pdfPath);

    // Preprocessing applies to every page in one call
    input.Deskew();

    var ocr = new IronTesseract();
    var result = ocr.Read(input);

    // Full per-page structured access
    foreach (var page in result.Pages)
    {
        Console.WriteLine($"Page {page.PageNumber}: {page.Paragraphs.Length} paragraphs");
    }

    return result.Text;
}
C#

Bir NuGet paketi iki paketi değiştirir. Render adımı ortadan kalkar. PDF girdi kılavuzu, tek sayfalı, çok sayfalı ve parola korumalı PDF'leri kapsar. Aranabilir PDF çıktısı iş akışı için — taranmış bir PDF'den Ctrl+F aranabilir bir belge üretmek — aranabilir PDF rehberi ve aranabilir PDF örneği tam boru hattını beş satırda gösterir.

Patagames Tesseract.NET SDK API'sinden IronOCR'a Eşleme Referansı

Patagames Tesseract.NET SDKIronOCR Karşılığı
Tesseract.Net.SDK (NuGet paketi)IronOcr (NuGet paketi)
Patagames.Ocr (namespace)IronOcr (namespace)
Patagames.Ocr.Enums (namespace)IronOcr (namespace)
OcrApi.Create()new IronTesseract()
api.Init(tessDataPath, "eng")ocr.Language = OcrLanguage.English (yol yok)
api.Init(path, "eng+fra+deu")ocr.Language = OcrLanguage.English + OcrLanguage.French + OcrLanguage.German
api.GetTextFromImage(bitmap)ocr.Read(imagePath).Text
api.SetVariable("tessedit_pageseg_mode", "7")ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleLine
api.SetVariable(key, value) (herhangi bir ham değişken)ocr.Configuration.[TypedProperty]
new Bitmap(imagePath) (girdi hazırlığı)input.LoadImage(imagePath)
OcrBitmap.FromFile(path)input.LoadImage(path)
Çok çerçeveli TIFF desteği yokinput.LoadImageFrames(tiffPath)
PDF girişi yokinput.LoadPdf(pdfPath) veya ocr.Read(pdfPath)
Aranabilir PDF yokresult.SaveAsSearchablePdf("output.pdf")
Ön işleme yokinput.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize()
Bölge OCR'si yokinput.LoadImage(path, new CropRectangle(x, y, w, h))
Barkod okuma yokocr.Configuration.ReadBarCodes = true
Yalnızca düz dize sonucuresult.Pages, result.Lines, result.Words, result.Paragraphs
Kelime başına güven yokresult.Words[i].Confidence, result.Confidence
PageSegmentationMode enumTesseractPageSegmentationMode enum
hOCR dışa aktarma yokSonuç .ToHOcrString() çıkışı
Yalnızca Windows x64/x86Windows, Linux, macOS, Docker, Azure, AWS

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

Sorun 1: Yeni Ortamda Tessdata Dizini Eksik

Patagames: api.Init(@"./tessdata", "eng") çağrısı, tessdata dizini yoksa veya eng.traineddata dosyası eksikse çalışma zamanında başarısız olur. Kapsayıcılı ortamlarda, bu bir derleme zamanı uyarısı olmadan dağıtım zamanı hatasıdır. Docker'a dağıtan ekipler, bu durumu genellikle görüntü zaten yüklendikten sonra keşfederler.

Çözüm: IronOCR, tessdata dizini kavramını tamamen kaldırır. Dil verilerini NuGet paketleri olarak yükleyin:

dotnet add package IronOcr.Languages.English

Dil verileri, yapı zamanında çözülür ve otomatik olarak dotnet publish çıktısına dahil edilir. Yanlış yapılabilecek yol yok ve dil dosyaları için bir dağıtım kontrol listesi öğesi yoktur.

Sorun 2: System.Drawing.Bitmap Linux'ta Başarısız Olur

Patagames: System.Drawing.Bitmap yapıcı, sistem paketi olarak libgdiplus yüklenmedikçe Linux'ta TypeInitializationException veya PlatformNotSupportedException üretir. libgdiplus varlığında bile, davranış dağıtımlar arasında tutarsızdır. Microsoft, yeni gelişmede System.Drawing kullanmayı Windows dışı platformlarda kullanmamayı açıkça tavsiye etmektedir.

Çözüm: IronOCR, dosya yollarını, bayt dizilerini ve akışları doğrudan kabul eder. System.Drawing bağımlılığı gerekli değildir:

// Replace this pattern:
using var bitmap = new Bitmap(imagePath); // fails without libgdiplus on Linux
api.GetTextFromImage(bitmap);

// With:
var result = new IronTesseract().Read(imagePath); // no System.Drawing required
C#

görüntü girişi kılavuzunu görün; desteklenen tüm giriş türleri, bayt dizileri ve akışlar dahil.

Sorun 3: Sessiz SetVariable Hataları

Patagames: api.SetVariable("tessedit_pageseg_mode", someValue) bool döndürür ancak çoğu arayan, dönüş değerini yok sayar. Bir değişken adı yanlış yazıldığında veya desteklenmeyen bir değer geçirildiğinde, Tesseract sessizce bir varsayılan değeri uygular ve devam eder. Sonuç olarak çıkan doğruluk düşüşü, yapılandırma çağrısına geri izlemek zordur.

**Çözüm:**IronOCR yapılandırma özellikleri güçlü bir şekilde yazılmıştır. Geçersiz bir atama, sessiz bir çalışma zamanı varsayılanı yerine bir derleme hatası üretir.

// Compile-time safety — no silent failures
var ocr = new IronTesseract();
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.SingleBlock;
ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5; // also strongly typed
C#

Sorun 4: OcrApi Döngü İçinde Başlatıldı

Patagames: İşleme döngüsü içinde OcrApi başlatan ekipler, her yineleme üzerinde tessdata yükleme yüküne katlanır. Tipik desen — bir foreach içinde OcrApi.Create() ve api.Init() — iş parçacığı yalıtımı perspektifinden doğru, ancak yüzlerce belgeyi işlerken maliyetlidir.

Çözüm: Her iş parçacığı için bir IronTesseract oluşturun ve bu iş parçacığına atanan tüm belgeler için yeniden kullanın. Örnek, .Read() çağrıları arasında durumsuzdur:

// One instance, many reads — engine initialized once
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

foreach (var file in imageFiles)
{
    var text = ocr.Read(file).Text;
    ProcessText(text);
}
C#

Paralel toplu iş yükleri için, görev başına bir örnek oluşturun. Geçiş seçenekleri ve okuma hızı ön ayarları dahil olmak üzere akış hızını optimize etmek için hız optimizasyonu kılavuzuna bakın.

Sorun 5: Çalışan Hiçbir Linux Docker Temel Görüntüsü Yok

Patagames: Linux uyumlu bir Patagames ikili dosyası yoktur. Linux Docker kapsayıcısında Patagames tabanlı bir uygulama çalıştırma girişimleri başarısız olur. Tek geçici çözüm, Windows tabanlı bir konteynerdir (FROM mcr.microsoft.com/windows/servercore), bu konteyner önemli ölçüde daha büyük, çekmesi daha yavaş ve Linux düğüm havuzları kullanan çoğu Kubernetes yapılandırmasıyla uyumsuz.

Çözüm: IronOCR, standart Linux temel imajlarını destekler. Docker dağıtım kılavuzu, tam Dockerfile yapılandırmasını kapsar:

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/publish .
# IronOCR resolves the Linux native runtime from NuGet automatically
ENTRYPOINT ["dotnet", "MyApp.dll"]
Text

Windows kapsayıcı gerekmiyor. Ayrı bir ikili dağıtım gerekmiyor. Aynı Docker imajı, herhangi bir Linux tabanlı kapsayıcı ana bilgisayarında çalışır.

Sorun 6: PDF OCR İki NuGet Paketi Gerektirir

Patagames: Bir Patagames uygulamasına PDF OCR eklemek, PDF işleme için ikinci bir NuGet paketi (PdfiumViewer, iTextSharp.LGPLv2.Core veya benzeri) gerektirir. Her biri kendi lisans koşullarını, güncelleme temposunu ve olası uyumluluk sorunlarını ekler. PDF görüntüleyici sürümü ile Patagames sürümü çeliştiğinde, çözüm için her iki ekibin de işe dahil edilmesi gerekir.

Çözüm: IronOCR, PDF girdisini yerel olarak ikinci paket olmadan işler. PDF görüntüleme bağımlılığını tamamen kaldırın:

# Remove the PDF rendering shim
dotnet remove package PdfiumViewer

# IronOCR handles PDF natively
var result = new IronTesseract().Read("document.pdf");
SHELL

Patagames Tesseract.NET SDK Geçiş Kontrol Listesi

Öncesi-Geçiş

Başlamadan önce tüm Patagames referanslarını belirlemek için kod tabanını denetleyin:

# Find all files using Patagames namespaces
grep -r "Patagames.Ocr" --include="*.cs" . -l

# Find all OcrApi usage patterns
grep -r "OcrApi\|GetTextFromImage\|api\.Init\|SetVariable" --include="*.cs" .

# Find tessdata path references
grep -r "tessdata\|TessDataPath\|traineddata" --include="*.cs" .

# Find System.Drawing.Bitmap usage tied to OCR
grep -r "new Bitmap\|System\.Drawing" --include="*.cs" . -l

# Find any PDF rendering libraries used to feed Patagames
grep -r "PdfiumViewer\|iTextSharp\|PdfSharp" --include="*.csproj" .
SHELL

Belge: toplam OcrApi.Create() çağrı site sayısı, farklı api.Init() dil konfigürasyonlarının sayısı, her dağıtım ortamındaki tessdata dizininin konumu, ve System.Drawing veya ImageSharp içinde yazılmış herhangi bir Patagames çağrısını saran ön işleme kodu.

Kod Geçişi

  1. Tüm projelerden Tesseract.Net.SDK NuGet paketi referansını kaldırın.
  2. Sadece Patagames'i beslemek için kullanılan tüm PDF oluşturma NuGet paketlerini (PdfiumViewer, iText, vb.) kaldırın.
  3. IronOcr NuGet paketini yükleyin.
  4. IronOcr.Languages.English ve diğer gerekli dil paketlerini yükleyin.
  5. Uygulama başlangıcında IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" ekleyin.
  6. using Patagames.Ocr; ve using Patagames.Ocr.Enums; yerine using IronOcr; ile değiştirin.
  7. Her OcrApi.Create() + api.Init(path, lang) bloğunu new IronTesseract() + ocr.Language = OcrLanguage.[Language] ile değiştirin.
  8. Her api.GetTextFromImage(bitmap) çağrısını ocr.Read(imagePath).Text ile değiştirin (Bitmap yapıcısını kaldırın).
  9. Her bir api.SetVariable("tessedit_pageseg_mode", value) çağrısını tipli ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value] ile değiştirin.
  10. Patagames'e görseller iletmek için mevcut olan tüm System.Drawing.Bitmap başlatmalarını kaldırın.
  11. PDF işleme döngülerini (varsa) input.LoadPdf(pdfPath) ile değiştirin.
  12. Image.SelectActiveFrame() kullanarak çok çerçeveli TIFF döngülerini input.LoadImageFrames(tiffPath) ile değiştirin.
  13. Herhangi bir özel ön işleme kodunu (System.Drawing boyutlandırma, kontrast, eşik) eşdeğer OcrInput filtre çağrıları ile değiştirin.
  14. Tüm dağıtım manifestolarından, Dockerfile'lardan ve CI kopyalama adımlarından tessdata dizinini kaldırın.
  15. Linux CI koşucularında (GitHub Actions ubuntu-latest, vb.) çalıştırılacak entegrasyon testlerini güncelleyin ve platformlar arası davranışı doğrulayın.

Geçiş Sonrası

  • Tüm test paketi, platformlar arası dağıtım açılışının çalışmakta olduğunu doğrulamak için Linux (yalnızca Windows değil) üzerinde çalıştırılmalıdır.
  • OCR doğruluğunun aynı görüntü setinde Patagames temelinden eşit veya daha iyi olduğunu doğrulamanız gerekir.
  • Çok dilli belgelerin, OcrLanguage enum yaklaşımı kullanılarak doğru çıktı ürettiğini onaylayın.
  • Dış görüntü işleme kütüphanesi olmaksızın PDF girdisinin doğrudan test edildiğinden emin olun ve çıktının doğruluğunu eski işlenmiş piksel yolu karşısında karşılaştırın.
  • Çok çerçeveli TIFF işlemcisinin önceki çerçeve numaralandırma döngüsü kadar aynı sayfa sayısını ve metin içeriğini ürettiğini doğrulayın.
  • Dağıtım nesnesinden tessdata dizininin olmadığını ve herhangi bir çalışma zamanı yolu hatası olmadığını doğrulayın.
  • Hedef olarak linux/amd64 içeren bir Docker oluşturun ve konteyner içinde en az bir OCR çağrısı çalıştırın.
  • CI boru hattının (GitHub Actions, GitLab CI, Azure DevOps) varsayılan Linux koşucusu üzerinde başarıyla tamamlandığını doğrulayın.
  • Sonuçta güven puanlarının mevcut olduğunu ve herhangi bir güven tabanlı filtreleme mantığının beklendiği gibi çalıştığını kontrol edin.
  • Üretim başlangıç kodunda ilk IronTesseract örneği oluşturulmadan önce lisans anahtarı başlatmanın çalıştığını onaylayın.

IronOCR'a Geçişin Ana Faydaları

Kod Değişikliği Olmadan Platformlar Arası Dağıtım. Geçişten sonra, aynı ikili dosya Windows Server, Ubuntu Docker kapsayıcıları, macOS geliştirici makineleri, Azure App Service on Linux ve AWS Lambda üzerinde çalışır. Her işletim sistemi için ayrı dağıtım eserleri yok, platform koşulları yok, çalıştırma tanımlayıcı bayrakları yok. Önceden Windows'a özgü bir OCR kütüphanesi nedeniyle engellenen bir bulut geçişi artık standart bir kapsayıcı dağıtımı haline geliyor. Linux, Docker, Azure ve AWS dağıtım kılavuzları, her hedef için üretim yapılandırmalarını kapsar.

Tessdata Yönetimi, Operasyonlardan Kaldırılıyor. Tessdata dizini — konumu, içeriği, her ortamda varlığı — artık bir operasyonel endişe kaynağı değil. Dil verileri, yapı zamanı çözülmüş bir NuGet bağımlılığıdır. Otomatik olarak dotnet publish çıktısında görünür. Yeni bir dil eklerken güncellenmesi gereken dağıtım çalıştırma kitapları yok, tessdata dosyaları değiştiğinde geçersiz hale getirilmesi gereken Docker katmanı yok ve araştırılması gereken tessdata eksikliğiyle ilgili üretim olayları yok.

Yapılandırılmış Çıkış, Dize Ayrıştırmanın Yerini Alır. Düz dizeden GetTextFromImage alan çıkaran, içerik doğrulayan veya güven düzeyi hesaplayan uygulamalar artık doğrudan OcrResult'dan bu verilere erişebilir. Kelime koordinatları, satır sınırları, paragraf gruplamaları ve kelime başına güven puanları birinci sınıf özelliklerdir. İçerik çıkarım kutusu — fatura işleme ve form OCR'ın temeli — zayıf bir alt dize araması yerine doğrudan bir CropRectangle çağrısıdır.

Yerleşik Ön İşleme, Özel Görsel Boru Hatlarının Yerini Alır. Patagames'in yerleşik filtre eksikliği telafi etmek için yazılmış herhangi bir ön işleme kodu, OcrInput yöntem çağrıları ile değiştirilebilir. Deskewing, gürültü giderme, kontrast artırma, ikili hale getirme ve çözünürlük normalizasyonu bir satırlık işlemlerdir. 20-40 saat harcayan ve bir System.Drawing ön işleme hattını ayarlayan ekipler, beş yöntem çağrısı ile değiştirebilir ve bu bakım çabasını başka bir yere yönlendirebilir. Tüm filtre kataloğu için ön işleme özellikleri genel bakışını görün.

Yerel PDF Desteği, Bir Bağımlılık Sınıfını Kaldırır. Patagames'in PDF boşluğunu köprülemek için eklenen PDF işleme kütüphaneleri elimine edilir. Üç paketin — Tesseract.Net.SDK, bir PDF işleyici ve paylaşılan System.Drawing bağımlılığı — senkronize edilmiş güncellemelerini önceki bir üretim OCR sistemi artık tek bir köprüyü gerektirmeyen tek bir OCR paketi içerir. Şifre korumalı ve çok sayfalı belgeler dahil olmak üzere PDF girdisi birinci sınıf bir giriş türüdür. Uyum ve kayıt yönetimi kullanım durumları için, result.SaveAsSearchablePdf(), ek kütüphaneler olmadan tek bir çağrı ile metin katmanı PDF çıktısı üretir.

Şeffaf Fiyatlandırma ve Ticari Destek. IronOCR'un $999 kalıcı Lite lisansı, bir geliştirme kişisi ve bir dağıtım konumu ile bir yıl güncellemeler içermektedir. Fiyatlandırma açıktır, katman yapısı nettir ve ticari destek, kurumsal sözleşme olmaksızın mevcuttur. Windows'a özgü Tesseract sarması için Patagames fiyatlarını ödeyen ekipler, platformlar arası dağıtım, ön işleme, PDF desteği ve 125'den fazla dili taşırken, değerlendirmenin tamamlanmasından önce maliyetin bilindiği bir fiyatlandırma modeline geçerler. Tam katman detayları için IronOCR lisanslamasını ve ücretsiz deneme lisansı için IronOCR ürün sayfasını görün.

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