Patagames Tesseract.NET SDK'dan IronOCR'ye geçiş yapma
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);
// IronOCR: same code runs on Windows, Linux, macOS, Docker, Azure, AWS
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var text = new IronTesseract().Read(imagePath).Text;
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.
| Özellik | Patagames Tesseract.NET SDK | IronOCR |
|---|---|---|
| Windows desteği | Evet | Evet |
| Linux desteği | Hayır | Evet |
| macOS desteği | Hayır | Evet |
| Docker dağıtımı | Hayır | Evet |
| Azure Uygulama Hizmeti | Hayır | Evet |
| AWS Lambda | Hayır | Evet |
| NuGet paketi | Tesseract.Net.SDK | IronOcr |
| Lisans modeli | Ticari (fiyat için iletişim) | Kalıcı ($999–$2.999, açık) |
| OCR motoru | Tesseract (açık kaynak) | Optimize Tesseract 5 (paketli) |
| Tessdata Yönetimi | .traineddata dosyalarla Manuel dizin | NuGet dil paketleri |
| Otomatik ön işleme | None | Deskew, DeNoise, Contrast, Binarize, Sharpen, Scale, Dilate, Erode |
| Derin arka plan gürültüsü giderme | None | Evet (DeepCleanBackgroundNoise()) |
| Yerel PDF girişi | Hayır (dış renderer gerekiyor) | Evet |
| Çok sayfalı TIFF girişi | Sınırlı | Evet (input.LoadImageFrames()) |
| Aranabilir PDF çıktısı | Hayır | Evet (result.SaveAsSearchablePdf()) |
| hOCR ihracat | Hayır | Evet |
| Desteklenen diller | Tesseract tessdata dosyaları | 125+ NuGet paketleri aracılığıyla |
| Çok dillilik aynı anda | Evet (dize birleştirme) | Evet (güçlü tip OcrLanguage enum) |
| Bölge tabanlı OCR | Hayır | Evet (CropRectangle) |
| Barkod okuma | Hayır | Evet |
| Yapısal çıktı | Sadece düz dize | Sayfalar, Paragraflar, Satırlar, Kelimeler, Koordinatlı Karakterler |
| Kelime başına güven puanları | Hayır | Evet |
| Sayfa segmentasyonu yapılandırması | Ham SetVariable dize çağrısı | Güçlü tip Configuration.PageSegmentationMode |
| System.Drawing bağımlılığı | Gereklidir | Opsiyonel |
| Thread güvenliği | Standart Tesseract limitleri | Tam (her iş parçacığı için IronTesseract oluştur) |
| Ticari destek | Evet | Evet |
| NuGet indirmeleri | Sı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
NuGet kullanarak IronOCR'u yükleyin:
Zümre İngilizce dil desteği için ilgili dil paketini kurun:
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;
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";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
- Faza tek resim çıkarımı gösterildi. Üretim Patagames dağıtımları genellikle bir döngü içinde bir
OcrApibaşlatır, her yinelemedeapi.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;
}
}
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;
}
}
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);
}
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;
}
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);
}
}
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}%");
}
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();
}
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;
}
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();
}
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;
}
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 SDK | IronOCR 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 yok | input.LoadImageFrames(tiffPath) |
| PDF girişi yok | input.LoadPdf(pdfPath) veya ocr.Read(pdfPath) |
| Aranabilir PDF yok | result.SaveAsSearchablePdf("output.pdf") |
| Ön işleme yok | input.Deskew(), input.DeNoise(), input.Contrast(), input.Binarize() |
| Bölge OCR'si yok | input.LoadImage(path, new CropRectangle(x, y, w, h)) |
| Barkod okuma yok | ocr.Configuration.ReadBarCodes = true |
| Yalnızca düz dize sonucu | result.Pages, result.Lines, result.Words, result.Paragraphs |
| Kelime başına güven yok | result.Words[i].Confidence, result.Confidence |
PageSegmentationMode enum | TesseractPageSegmentationMode enum |
| hOCR dışa aktarma yok | Sonuç .ToHOcrString() çıkışı |
| Yalnızca Windows x64/x86 | Windows, 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:
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
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
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);
}
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"]
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");
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" .
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
- Tüm projelerden
Tesseract.Net.SDKNuGet paketi referansını kaldırın. - Sadece Patagames'i beslemek için kullanılan tüm PDF oluşturma NuGet paketlerini (PdfiumViewer, iText, vb.) kaldırın.
IronOcrNuGet paketini yükleyin.IronOcr.Languages.Englishve diğer gerekli dil paketlerini yükleyin.- Uygulama başlangıcında
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"ekleyin. using Patagames.Ocr;veusing Patagames.Ocr.Enums;yerineusing IronOcr;ile değiştirin.- Her
OcrApi.Create()+api.Init(path, lang)bloğununew IronTesseract()+ocr.Language = OcrLanguage.[Language]ile değiştirin. - Her
api.GetTextFromImage(bitmap)çağrısınıocr.Read(imagePath).Textile değiştirin (Bitmapyapıcısını kaldırın). - Her bir
api.SetVariable("tessedit_pageseg_mode", value)çağrısını tipliocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.[Value]ile değiştirin. - Patagames'e görseller iletmek için mevcut olan tüm
System.Drawing.Bitmapbaşlatmalarını kaldırın. - PDF işleme döngülerini (varsa)
input.LoadPdf(pdfPath)ile değiştirin. Image.SelectActiveFrame()kullanarak çok çerçeveli TIFF döngüleriniinput.LoadImageFrames(tiffPath)ile değiştirin.- Herhangi bir özel ön işleme kodunu (System.Drawing boyutlandırma, kontrast, eşik) eşdeğer
OcrInputfiltre çağrıları ile değiştirin. - Tüm dağıtım manifestolarından, Dockerfile'lardan ve CI kopyalama adımlarından tessdata dizinini kaldırın.
- 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,
OcrLanguageenum 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/amd64iç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.

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.