Paddle OCR vs Tesseract: Ayrıntılı OCR Karşılaştırması
PaddleOCR, Çince karakter tanımada son derece başarılıdır – ancak bir .NET uygulamasında tek bir görüntüyü işlemek için beş NuGet paketi, yaklaşık 100MB'lik bir asenkron model indirme, Çin'deki Baidu sunucularına bağlanmayı gerektirir, her görüntü yükleme için bir OpenCvSharp bağımlılığı ve ilk çalışmada 3-5 saniyelik soğuk başlatma süresi gerekiyor. .NET projesinden bir Python-priori derin öğrenme sistemi kullanmanın vergisi budur. Çince yazı üzerinde hassasiyetin zorunlu olduğu ve GPU altyapısının zaten mevcut olduğu yoğun CJK iş yükleri için, bu vergi ödenecek değerlidir. Diğer her şey için, proje asla ihtiyaç duyulmayan bir genel giderdir.
PaddleOCR'yi Anlama
PaddleOCR, Baidu tarafından Baidu'nun kendi derin öğrenme çerçevesi PaddlePaddle üzerine inşa edilen açık kaynaklı bir OCR sistemidir. Proje, Python geliştiricileri için baştan sona tasarlandı ve .NET topluluğu, GitHub'da Zhou Jie (sdcb) tarafından sürdürülen bir topluluk sarmalayıcısı Sdcb.PaddleOCR aracılığıyla buna erişiyor.
Tanıma boru hattı, sıralı bir şekilde üç sinir ağını zincirler: metin bölge sınır kutularını tanımlayan fark edilebilir ikicme kullanarak bir metin algılama modeli, metin yönünü belirleyen bir yön sınıflandırıcısı ve tespit edilen bölge piksellerini diziye dönüştüren evrimli sinirsel ağ kullanan bir tanıma modeli. Bu ağların her biri, herhangi bir çıkarım başlamadan önce diskte bulunması gereken ayrı bir model dosyasıdır.
Ana mimari özellikler:
- Çok paketli kurulum: Çekirdek paket (
Sdcb.PaddleOCR), platform çalıştırma ortamı (Sdcb.PaddleInference.runtime.win64.mklveya CUDA eşdeğeri), model indirme yardımı (Sdcb.PaddleOCR.Models.Online) ve görüntü yükleme için OpenCvSharp — minimum dört paket, OpenCvSharp çalıştırma ortamını ayırırsanız beş - Zorunlu model indirme: Modeller paketlenmemiştir. İlk kullanım
OnlineFullModels.ChineseV4.DownloadAsync()çağrısını yapar, bu da Baidu kontrolündeki sunuculardan (bj.bcebos.com) indirir ve dağıtım nesnelerine ~100MB ekler - Her görüntü için OpenCV bağımlılığı: Bir dosya yolundan doğrudan çıkarıma gidecek bir yol yoktur. Görüntüler,
ocr.Run(mat)'e geçirilmeden önce bir OpenCvSharpMatnesnesi olarak yüklenmelidir - GPU hızlandırma için CUDA/cuDNN kurulumu gerekli: Reklamı yapılan performans rakamlarına ulaşmak için NVIDIA sürücüleri, CUDA Araç Seti 11.8, cuDNN 8.6+ ve ayrı bir GPU çalışma zamanı NuGet paketi — ortam başına kurulum süresi 2-8 saat
- Python-priori sürüm sıklığı: Yeni PaddleOCR model versiyonları ilk python'da yer alır; .NET wrapper güncellemeleri haftalar veya aylar sonra takip eder
- 14 desteklenen dil: Çinçe Basitleştirilmiş, Çinçe Geleneksel, İngilizce, Fransızca, Almanca, Korece, Japonca, İtalyanca, İspanyolca, Portekizce, Rusça, Arapça, Hintçe ve Tamil — bir sert tavan
NuGet paketi yaklaşık 200.000 indirme sayısına sahiptir. Daha küçük ayak izi, daha az Stack Overflow yanıtı, daha az test edilmiş üretim raporları ve deneyim yoluyla soruları yanıtlayabilecek daha ince bir geliştirici havuzu anlamına gelir.
Pratikte Üç-Model Boru Hattı
PaddleOCR her bir çıkarım çağrısı üç sinir ağını ardı ardına çalıştırır. Aşağıdaki kod, herhangi bir metin dönmeden önce bir geliştiricinin karşılaştığı tam kurulum yolunu gösteriyor:
// Five packages required before this compiles:
// dotnet add package Sdcb.PaddleOCR
// dotnet add package Sdcb.PaddleOCR.Models.Online
// dotnet add package Sdcb.PaddleInference.runtime.win64.mkl
// dotnet add package OpenCvSharp4
// dotnet add package OpenCvSharp4.runtime.win
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
// Async download from Baidu servers — blocks first run for 10-30 seconds
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// PaddleOcrAll bundles detection, classification, and recognition
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
// OpenCV required — no file path shortcut
using Mat mat = Cv2.ImRead("document.png");
if (mat.Empty())
{
throw new FileNotFoundException("Could not load image");
}
// Three neural networks fire in sequence
PaddleOcrResult result = ocr.Run(mat);
Console.WriteLine(result.Text);
// Five packages required before this compiles:
// dotnet add package Sdcb.PaddleOCR
// dotnet add package Sdcb.PaddleOCR.Models.Online
// dotnet add package Sdcb.PaddleInference.runtime.win64.mkl
// dotnet add package OpenCvSharp4
// dotnet add package OpenCvSharp4.runtime.win
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
// Async download from Baidu servers — blocks first run for 10-30 seconds
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// PaddleOcrAll bundles detection, classification, and recognition
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
// OpenCV required — no file path shortcut
using Mat mat = Cv2.ImRead("document.png");
if (mat.Empty())
{
throw new FileNotFoundException("Could not load image");
}
// Three neural networks fire in sequence
PaddleOcrResult result = ocr.Run(mat);
Console.WriteLine(result.Text);
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models.Online
Imports OpenCvSharp
' Five packages required before this compiles:
' dotnet add package Sdcb.PaddleOCR
' dotnet add package Sdcb.PaddleOCR.Models.Online
' dotnet add package Sdcb.PaddleInference.runtime.win64.mkl
' dotnet add package OpenCvSharp4
' dotnet add package OpenCvSharp4.runtime.win
' Async download from Baidu servers — blocks first run for 10-30 seconds
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
' PaddleOcrAll bundles detection, classification, and recognition
Using ocr As New PaddleOcrAll(models) With {
.AllowRotateDetection = True,
.Enable180Classification = True
}
' OpenCV required — no file path shortcut
Using mat As Mat = Cv2.ImRead("document.png")
If mat.Empty() Then
Throw New FileNotFoundException("Could not load image")
End If
' Three neural networks fire in sequence
Dim result As PaddleOcrResult = ocr.Run(mat)
Console.WriteLine(result.Text)
End Using
End Using
result.Regions dizisi, her biri bir Text dizgesi, bir Score güven değeri ve bir Rect sınırlayıcı kutu ile birlikte bireysel metin alanı nesneleri içerir. Güvene göre filtrelemek için: result.Regions.Where(r => r.Score > 0.8). Bölge sıralaması mekansaldır, okuma sırası garanti edilmez, bu yüzden region.Rect.Center.Y sonra region.Rect.Center.X sıralamak yaygın bir modeldir.
IronOCR'u Anlamak
IronOCR, ham Tesseract'ın gerektirdiği yapılandırma ve ön işleme çalışmalarını ortadan kaldırmak için optimize edilmiş bir Tesseract 5 LSTM motoruna sahip, .NET için ticari bir OCR kütüphanesidir. Tek bir NuGet paketi tam çalışma zamanını, dil modellerini, yerel ikili dosyalarını ve ön işleme boru hattını yükler.
Anahtar özellikler:
- Tek paket dağıtımı:
dotnet add package IronOcrher şeyi kurar. Ek runtime paketleri, model indirmeler, yerel kütüphane yapılandırması yok - Otomatik ön işleme: Eğim düzeltme, Gürültü Azaltma, Kontrast, Üçleme ve Çözünürlük Artırma zayıf kalitedeki girdiler için otomatik olarak uygulanır; Gerektiğinde açık kontrol mevcuttur
- Yerli PDF desteği: Taralı PDF'ler, üçüncü parti dönüşüm adımı olmadan
input.LoadPdf()ile doğrudan yüklenir - NuGet üzerinden125+dil: Her dil paketi, standart bir NuGet bağımlılığıdır —
dotnet add package IronOcr.Languages.ChineseSimplified— model dizini yönetimi yok - İplik güvenliği, CPU için optimize edilmiştir: Yerleşik paralelleştirme CUDA veya GPU donanım gereksinimi olmadan
- SLA ile ticari destek: ABD tabanlı Iron Software ticari destek sağlar; Ürün, topluluk yan projelerinden biri değildir
- Süresiz lisanslama: $999 Lite / $1,499 Plus / $2,999 Professional — bir kez ödeyin, sayfa başına ücret olmadan süresiz çalıştırın
Özellik Karşılaştırması
| Özellik | PaddleOCR (Sdcb) | IronOCR |
|---|---|---|
| NuGet paketleri gerekli | 4-5 | 1 |
| Model indirmesi gerekli | Evet (~100MB, Baidu sunucuları) | Hayır (paketlenmiş) |
| Kurulum süresi | 30-60 dakika | 5 dakika |
| CJK doğruluğu | Mükemmel (%95+) | İyi (%85-90) |
| İngilizce/Latin doğruluğu | İyi (%92-95) | Mükemmel (%97-99) |
| GPU desteği | Evet (karmaşık CUDA kurulumu) | CPU için optimize edilmiş |
| Yerel PDF desteği | Hayır | Evet |
| Desteklenen diller | 14 | 125+ |
| Lisans | Apache 2.0 (ücretsiz) | Ticari ($999+) |
| Şirketin kökeni | Çin (Baidu) | ABD (Iron Software) |
Ayrıntılı Özellik Karşılaştırması
| Kategori / Özellik | PaddleOCR (Sdcb) | IronOCR |
|---|---|---|
| Kurulum | ||
| NuGet paketleri | 4-5 | 1 |
| Yükleme sırasında model indirme | Gereklidir | Dahil |
| İlk çalıştırma soğuk başlangıç | 3-5 saniye | 1 saniyeden az |
| Kurulum süresi | 30-60 dakika | 5 dakikadan az |
| OpenCV bağımlılığı | Gereklidir | None |
| Dil desteği | ||
| Desteklenen diller | 14 | 125+ |
| Dil yükleme yöntemi | Model indirme | NuGet paketi |
| Çoklu dil aynı anda | Ardışık model değişimi | Evet (AddSecondaryLanguage) |
| CJK doğruluğu | Mükemmel | İyi |
| Latin/İngilizce doğruluğu | İyi | Mükemmel |
| Girdi işleme | ||
| Görüntü dosya girişi | OpenCvSharp Mat aracılığıyla | Doğrudan dosya yolu |
| Yerel PDF girişi | Hayır | Evet |
| Şifre korumalı PDF | Hayır | Evet |
| Akış girişi | Dolaylı | Evet |
| Bayt dizisi girişi | Dolaylı | Evet |
| Ön işlem | ||
| Otomatik ön işlem | Hayır | Evet |
| Hizalama | Yönerge | Yerleşik |
| Gürültü azaltma | Yönerge | Yerleşik |
| Kontrast artırma | Yönerge | Yerleşik |
| Çözünürlük ölçekleme | Yönerge | EnhanceResolution(300) |
| Çıktı | ||
| Tam metin dizisi | Evet | Evet |
| Bölge/kelime sonuçları | result.Regions |
result.Words, result.Lines |
| Güven skoru | Bölge başına (region.Score) |
Kelime başına (word.Confidence) |
| Sınır kutuları | region.Rect |
word.X, word.Y, word.Width, word.Height |
| Aranabilir PDF çıktısı | Hayır | Evet |
| hOCR içeri aktarma | Hayır | Evet |
| Performans | ||
| Görüntü başına CPU | 300-500ms | 150-300ms |
| Görüntü başına GPU | 50-100ms (CUDA gerektirir) | N/A (CPU optimize edilmiş) |
| Bellek kullanımı | 500MB-1GB | 100-200MB |
| Dağıtım boyutu | 300-500MB | ~80MB |
| Dağıtım | ||
| Docker taban görüntü boyutu | ~1.5GB (CUDA tabanlı) | ~400MB |
| Çapraz platform | Windows/Linux (kısmi) | Windows, Linux, macOS |
| İzole dağıtım | Evet (önceden indirilmiş modeller) | Evet (indirmeye gerek yok) |
| Destek ve lisanslama | ||
| Lisans türü | Apache 2.0 (ücretsiz) | Süresiz ticari |
| Ticari destek | Topluluk/GitHub | Evet, SLA ile |
| Firma / bakımcı | Baidu / topluluk sarıcı | Iron Software (ABD) |
| NuGet indirmeleri | ~200K | ~5.3M |
CJK Doğruluğu ve Kurulum Maliyeti
CJK doğruluğu PaddleOCR'nin gerçek gücüdür. Basitleştirilmiş Çince belgeler için, derin öğrenme CRNN mimarisi, sıkı Çince karakter ızgaralarında, karışık Çince/İngilizce düzenlerinde ve dikey metin bloklarında Tesseract tabanlı motorların önünde tutarlılıkla %95+'lik doğruluk rakamları ortaya koyar. Bir projenin birincil iş yükü Çince fatura işleme, Mandarin sözleşmeleri veya Japon ürün kataloglarıysa, bu doğruluk avantajı gerçektir.
PaddleOCR Yaklaşımı
Çinli model hattı, Baidu tarafından geniş ölçekli Çin belgeleri veri setleri üzerinde eğitilmiş tespit ve tanıma ağları nedeniyle iyi performans gösterir, ki Baidu'nun temel işi, geniş çapta Çin web içeriği işlemeyi içerir.
// Chinese model: highest accuracy for CJK documents
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead("chinese-invoice.png");
PaddleOcrResult result = ocr.Run(mat);
// Filter low-confidence regions for cleaner output
var highConfidence = result.Regions
.Where(r => r.Score >= 0.8)
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X);
foreach (var region in highConfidence)
{
Console.WriteLine($"{region.Text} ({region.Score:P0})");
}
// Chinese model: highest accuracy for CJK documents
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models)
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead("chinese-invoice.png");
PaddleOcrResult result = ocr.Run(mat);
// Filter low-confidence regions for cleaner output
var highConfidence = result.Regions
.Where(r => r.Score >= 0.8)
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X);
foreach (var region in highConfidence)
{
Console.WriteLine($"{region.Text} ({region.Score:P0})");
}
Imports System
Imports System.Linq
Imports OpenCvSharp
' Chinese model: highest accuracy for CJK documents
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
Using ocr As New PaddleOcrAll(models) With {
.AllowRotateDetection = True,
.Enable180Classification = True
}
Using mat As Mat = Cv2.ImRead("chinese-invoice.png")
Dim result As PaddleOcrResult = ocr.Run(mat)
' Filter low-confidence regions for cleaner output
Dim highConfidence = result.Regions _
.Where(Function(r) r.Score >= 0.8) _
.OrderBy(Function(r) r.Rect.Center.Y) _
.ThenBy(Function(r) r.Rect.Center.X)
For Each region In highConfidence
Console.WriteLine($"{region.Text} ({region.Score:P0})")
Next
End Using
End Using
Güven filtresi kalıbı (r.Score >= 0.8) önemlidir çünkü derin öğrenme tespit adımı bazen metin dışı alanları metin olarak işaretleyecektir. Filtreleme olmadan, gürültü bölgeleri çıktıda görünür. Önce Rect.Center.Y ardından Rect.Center.X sıralamak, okuma sırasını yaklaşık olarak belirler ancak karmaşık çok sütunlu düzenlerde garanti etmez.
IronOCR Yaklaşımı
IronOCR'nin Basitleştirilmiş Çince desteği bir NuGet paketi olarak kurulabilir ve model yönetimi gerektirmez. Çince belgelerde doğruluk oranı %85-90 aralığında seyreder — aynı malzemede PaddleOCR'nin %95+'sinden düşük, ancak özellikle belgeler tutarlı formata sahip olduğunda birçok üretim kullanım durumu için yeterlidir.
// dotnet add package IronOcr.Languages.ChineseSimplified
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
using var input = new OcrInput();
input.LoadImage("chinese-invoice.png");
// Preprocessing handles rotation, noise, and contrast automatically
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
// Word-level results with coordinates
foreach (var word in result.Words)
{
Console.WriteLine($"{word.Text} at ({word.X},{word.Y}) — {word.Confidence}%");
}
// dotnet add package IronOcr.Languages.ChineseSimplified
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
using var input = new OcrInput();
input.LoadImage("chinese-invoice.png");
// Preprocessing handles rotation, noise, and contrast automatically
input.Deskew();
input.DeNoise();
var result = ocr.Read(input);
// Word-level results with coordinates
foreach (var word in result.Words)
{
Console.WriteLine($"{word.Text} at ({word.X},{word.Y}) — {word.Confidence}%");
}
Imports IronOcr
' dotnet add package IronOcr.Languages.ChineseSimplified
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
Using input As New OcrInput()
input.LoadImage("chinese-invoice.png")
' Preprocessing handles rotation, noise, and contrast automatically
input.Deskew()
input.DeNoise()
Dim result = ocr.Read(input)
' Word-level results with coordinates
For Each word In result.Words
Console.WriteLine($"{word.Text} at ({word.X},{word.Y}) — {word.Confidence}%")
Next
End Using
Birkaç dili aynı anda kullanmaları gereken ekipler için — örneğin karışık Çince/İngilizce belgeler — IronOCR, kombinasyonu AddSecondaryLanguage ile ele alır. PaddleOCR, diller arasında model setlerini değiştirmeyi gerektirir, bu da ayrı indirme çağrıları ve ayrı motor örnekleri anlamına gelir.
Taviz belirli: PaddleOCR, saf CJK doğruluğunda kazanır. IronOCR, İngilizce/Latince doğruluğunda (97-99% vs. 92-95%), düşük kaliteli taramalar için ön işleme ve model dosyalarını yönetmenin operasyonel basitliğinde kazanır. Karışık dillerde belge işleyen veya ağırlıklı olarak Avrupa dillerindeki belgeleri işleyen ekipler, IronOCR'nin doğruluk profilini toplamda daha kullanışlı bulacaktır. IronOCR eğitim merkezi'ne çok dilli ve ön işleme örnekleri için bakın.
Model İndirme ve Yönetimi
PaddleOCR ve IronOCR arasındaki model yönetimi farkı, günlük operasyonun en belirgin farkını temsil eder. İlk kurulum, CI/CD hatları, Docker görüntüleri ve izole dağıtımları etkiler.
PaddleOCR Yaklaşımı
PaddleOCR, gidip indirmek için NuGet paketinden bağımsız modeller gönderir. Tam hat OCR çalışması için üç model dizini gereklidir ve bunları elde etmenin her bir yaklaşımı farklı bir denge içerir:
// Option A: Online download — simplest, but requires Baidu server access
// This runs on application startup; first run blocks for 10-30 seconds
FullOcrModel onlineModels = await OnlineFullModels.ChineseV4.DownloadAsync();
// Option B: Pre-downloaded local models — for air-gapped or compliance environments
// Developer must manually download and maintain three directories:
// models/ch_PP-OCRv4_det_infer/
// models/ch_ppocr_mobile_v2.0_cls_infer/
// models/ch_PP-OCRv4_rec_infer/
FullOcrModel localModels = new FullOcrModel(
LocalDetectionModel.FromDirectory("models/ch_PP-OCRv4_det_infer"),
LocalClassificationModel.FromDirectory("models/ch_ppocr_mobile_v2.0_cls_infer"),
LocalRecognitionModel.FromDirectory("models/ch_PP-OCRv4_rec_infer")
);
// Option C: Embedded model package — adds 100MB to NuGet restore, simplest deployment
// dotnet add package Sdcb.PaddleOCR.Models.LocalV4
// Japanese and Korean require separate model downloads:
FullOcrModel japaneseModels = await OnlineFullModels.JapanV4.DownloadAsync();
FullOcrModel koreanModels = await OnlineFullModels.KoreanV4.DownloadAsync();
// Option A: Online download — simplest, but requires Baidu server access
// This runs on application startup; first run blocks for 10-30 seconds
FullOcrModel onlineModels = await OnlineFullModels.ChineseV4.DownloadAsync();
// Option B: Pre-downloaded local models — for air-gapped or compliance environments
// Developer must manually download and maintain three directories:
// models/ch_PP-OCRv4_det_infer/
// models/ch_ppocr_mobile_v2.0_cls_infer/
// models/ch_PP-OCRv4_rec_infer/
FullOcrModel localModels = new FullOcrModel(
LocalDetectionModel.FromDirectory("models/ch_PP-OCRv4_det_infer"),
LocalClassificationModel.FromDirectory("models/ch_ppocr_mobile_v2.0_cls_infer"),
LocalRecognitionModel.FromDirectory("models/ch_PP-OCRv4_rec_infer")
);
// Option C: Embedded model package — adds 100MB to NuGet restore, simplest deployment
// dotnet add package Sdcb.PaddleOCR.Models.LocalV4
// Japanese and Korean require separate model downloads:
FullOcrModel japaneseModels = await OnlineFullModels.JapanV4.DownloadAsync();
FullOcrModel koreanModels = await OnlineFullModels.KoreanV4.DownloadAsync();
Model sürümü, sarıcı sürümü ile uyuşmalıdır. Sdcb.PaddleOCR güncellendiğinde, önceki sürümden önceden indirilen modellerin yeniden indirilmesi gerekebilir. NuGet restore adımını önbelleğe alan CI/CD hatları, model dosyası önbelleğe almayı ayrıca yönetmeli veya konteyner yapı aşamasında model indirmeleri tetiklemelidir. Docker görüntüsü karşılaştırması sonucu gösterir: bir PaddleOCR konteyneri yaklaşık olarak 1.5GB'dir; bir IronOCR konteyneri yaklaşık olarak 400MB.
IronOCR Yaklaşımı
IronOCR dil modelleri standart NuGet paketleridir. İndirme çağrıları yok, model dizini yönetimi yok, sürüm eşitleme yok. NuGet paketi,IronOCR için İngilizce modeli içerir; Ek dil paketleri diğer bağımlılıklar gibi kurulur.
// dotnet add package IronOcr
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.Japanese
using IronOcr;
//Hayırasync initialization, no model path, no version matching
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.Japanese);
using var input = new OcrInput();
input.LoadImage("mixed-cjk-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
// dotnet add package IronOcr
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.Japanese
using IronOcr;
//Hayırasync initialization, no model path, no version matching
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.Japanese);
using var input = new OcrInput();
input.LoadImage("mixed-cjk-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
' Hayırasync initialization, no model path, no version matching
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.Japanese)
Using input As New OcrInput()
input.LoadImage("mixed-cjk-document.png")
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Dil paketleri, dotnet restore'in bir parçası olarak geri yüklenir. models/ dizinlerini kopyalayan, apt-get install libopencv-dev çalıştıran ve CUDA tabanlı görüntüyü ekleyen Docker yapı adımı,IronOCR konteynerinde basitçe mevcut değildir. Docker dağıtımı veya Azure dağıtımı kullanan ekipler için, konteyner inşa karmaşıklığındaki fark önemli.
GPU ve CUDA Bağımlılığı
PaddleOCR'nin GPU performans rakamları — CPU'da 300-500ms'ye karşı görüntü başına 50-100ms — gerçektir. Derin öğrenme modelleri, Tesseract tabanlı motorlarda olmayan bir şekilde GPU paralelliğinden önemli ölçüde faydalanır. Günlük on binlerce görüntü işleyen bir iş yükü için, bu 5-10 kat geçiş artışı altyapı konuşmasını değiştirir.
PaddleOCR Yaklaşımı
GPU çıkarımları NuGet dışında tamamen ayrı bir yazılım yığını gerektirir. Ortam ön koşulları hassastır ve sürüm kilitlidir:
// Prerequisites (must be installed before this compiles correctly):
// 1. NVIDIA GPU with CUDA capability 3.5+
// 2. NVIDIA Driver 452.39+ (Windows) / 450.80.02+ (Linux)
// 3. CUDA Toolkit 11.8 — exact version, not 12.x
// 4. cuDNN 8.6.0+ for CUDA 11.x
// 5. dotnet add package Sdcb.PaddleInference.runtime.win64.cuda118
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using Sdcb.PaddleInference;
using OpenCvSharp;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// GPU device 0, 1000MB GPU memory pool
using PaddleOcrAll ocr = new PaddleOcrAll(models, PaddleDevice.Gpu(deviceId: 0))
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead(imagePath);
PaddleOcrResult result = ocr.Run(mat);
// Prerequisites (must be installed before this compiles correctly):
// 1. NVIDIA GPU with CUDA capability 3.5+
// 2. NVIDIA Driver 452.39+ (Windows) / 450.80.02+ (Linux)
// 3. CUDA Toolkit 11.8 — exact version, not 12.x
// 4. cuDNN 8.6.0+ for CUDA 11.x
// 5. dotnet add package Sdcb.PaddleInference.runtime.win64.cuda118
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using Sdcb.PaddleInference;
using OpenCvSharp;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
// GPU device 0, 1000MB GPU memory pool
using PaddleOcrAll ocr = new PaddleOcrAll(models, PaddleDevice.Gpu(deviceId: 0))
{
AllowRotateDetection = true,
Enable180Classification = true
};
using Mat mat = Cv2.ImRead(imagePath);
PaddleOcrResult result = ocr.Run(mat);
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models.Online
Imports Sdcb.PaddleInference
Imports OpenCvSharp
' Prerequisites (must be installed before this compiles correctly):
' 1. NVIDIA GPU with CUDA capability 3.5+
' 2. NVIDIA Driver 452.39+ (Windows) / 450.80.02+ (Linux)
' 3. CUDA Toolkit 11.8 — exact version, not 12.x
' 4. cuDNN 8.6.0+ for CUDA 11.x
' 5. dotnet add package Sdcb.PaddleInference.runtime.win64.cuda118
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
' GPU device 0, 1000MB GPU memory pool
Using ocr As New PaddleOcrAll(models, PaddleDevice.Gpu(deviceId:=0)) With {
.AllowRotateDetection = True,
.Enable180Classification = True
}
Using mat As Mat = Cv2.ImRead(imagePath)
Dim result As PaddleOcrResult = ocr.Run(mat)
End Using
End Using
CUDA_PATH ayarlanmadıysa, eşleşen cuDNN DLL beklenen yolda yoksa veya çalışma zamanı paketi sürümü yüklü CUDA araç takımı ile uyuşmuyorsa, çağrı doğal kitaplık yükleme istisnası atar. Bu arızayı teşhis etmek, sürücü sürümlerini, PATH girdilerini ve DLL varlığını çeşitli dizinlerde kontrol etmeyi gerektirir. Docker'da, GPU desteği nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04 tabanlı görüntü artı nvidia-container-toolkit ana makinede gerektirir, bu da hem görüntü oluşturma hem de konteyner çalışma zamanı yapılandırmasına karmaşıklık katar.
Sadece CPU dağıtımları için, PaddleOCR, MKL hızlandırmalı çalışma zamanı varsayılanı: soğuk başlangıç model yüklemesi 3-5 saniye ile görüntü başına yaklaşık 300-500ms'dir.
IronOCR Yaklaşımı
IronOCR, CPU çıkarımı için tasarlanmıştır. Standart donanımda, GPU bağımlılığı, CUDA yığını veya sürücü sürümü endişesi olmadan görüntü başına150-300mssağlar. Motor ayrıca bir saniyenin altında başlar çünkü modeller başlatma sırasında diskten yükleneceği yerine paketlendikleri için.
using IronOcr;
//HayırGPU setup, no CUDA, no driver checks
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
// Preprocessing built-in — improves accuracy on poor scans without extra code
using var input = new OcrInput();
input.LoadImage("document.png");
input.Deskew();
input.DeNoise();
input.EnhanceResolution(300);
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;
//HayırGPU setup, no CUDA, no driver checks
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var ocr = new IronTesseract();
// Preprocessing built-in — improves accuracy on poor scans without extra code
using var input = new OcrInput();
input.LoadImage("document.png");
input.Deskew();
input.DeNoise();
input.EnhanceResolution(300);
var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' HayırGPU setup, no CUDA, no driver checks
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim ocr As New IronTesseract()
' Preprocessing built-in — improves accuracy on poor scans without extra code
Using input As New OcrInput()
input.LoadImage("document.png")
input.Deskew()
input.DeNoise()
input.EnhanceResolution(300)
Dim result = ocr.Read(input)
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
GPU donanımı olmadan ölçekli geçiş için, IronOCR'ın iş parçacığı güvenli tasarımı, ayrı IronTesseract örnekleri ile bir dizi görüntü üzerinde Parallel.ForEach sağlar — her bir işlem kilitlenmeden bağımsız olarak işler. çoklu iş parçacığı örneği modelini gösterir. 4 çekirdekli bir CPU'da görüntü başına 150-300ms'lik bir hızda, 100 görüntüden oluşan bir toplu iş, paralellik kullanılarak 20-40 saniyede tamamlanır — çoğu web API ve belge hattı senaryosu için GPU yatırımını gereksiz hale getiren CPU geçişi.
görüntü kalite düzeltme kılavuzu, otomatik ön işlemenin ayar gerektirdiği durumlar için ön işleme yapılandırmasını ayrıntılı olarak ele alır.
PDF İşleme
PaddleOCR'nin yerel PDF desteği yok. PaddleOCR aracılığıyla işlenen her PDF, sayfaları önce görüntülere dönüştürmek için harici bir kütüphane gerektirir, dönüşüm ve çıkarım arasında geçici dosya yönetimi ve temizlik mantığıyla işlenmesi gerekir.
PaddleOCR Yaklaşımı
// Requires additional package: PdfiumViewer or similar
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
using PdfiumViewer;
using System.Drawing.Imaging;
using System.Text;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models);
var results = new StringBuilder();
//YönergePDF-to-image conversion, page by page
using PdfDocument pdf = PdfDocument.Load("document.pdf");
for (int i = 0; i < pdf.PageCount; i++)
{
// Render page to bitmap — 200 DPI
using var pageImage = pdf.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
// Save to temp file — OpenCvSharp cannot read from memory easily
string tempPath = Path.GetTempFileName() + ".png";
pageImage.Save(tempPath, ImageFormat.Png);
try
{
using Mat mat = Cv2.ImRead(tempPath);
var result = ocr.Run(mat);
results.AppendLine($"--- Page {i + 1} ---");
results.AppendLine(result.Text);
}
finally
{
File.Delete(tempPath); // Must clean up temp files
}
}
return results.ToString();
// Requires additional package: PdfiumViewer or similar
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models.Online;
using OpenCvSharp;
using PdfiumViewer;
using System.Drawing.Imaging;
using System.Text;
FullOcrModel models = await OnlineFullModels.ChineseV4.DownloadAsync();
using PaddleOcrAll ocr = new PaddleOcrAll(models);
var results = new StringBuilder();
//YönergePDF-to-image conversion, page by page
using PdfDocument pdf = PdfDocument.Load("document.pdf");
for (int i = 0; i < pdf.PageCount; i++)
{
// Render page to bitmap — 200 DPI
using var pageImage = pdf.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi);
// Save to temp file — OpenCvSharp cannot read from memory easily
string tempPath = Path.GetTempFileName() + ".png";
pageImage.Save(tempPath, ImageFormat.Png);
try
{
using Mat mat = Cv2.ImRead(tempPath);
var result = ocr.Run(mat);
results.AppendLine($"--- Page {i + 1} ---");
results.AppendLine(result.Text);
}
finally
{
File.Delete(tempPath); // Must clean up temp files
}
}
return results.ToString();
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models.Online
Imports OpenCvSharp
Imports PdfiumViewer
Imports System.Drawing.Imaging
Imports System.Text
Public Class PdfOcrProcessor
Public Shared Async Function ProcessPdfAsync() As Task(Of String)
Dim models As FullOcrModel = Await OnlineFullModels.ChineseV4.DownloadAsync()
Using ocr As New PaddleOcrAll(models)
Dim results As New StringBuilder()
' YönergePDF-to-image conversion, page by page
Using pdf As PdfDocument = PdfDocument.Load("document.pdf")
For i As Integer = 0 To pdf.PageCount - 1
' Render page to bitmap — 200 DPI
Using pageImage = pdf.Render(i, 200, 200, PdfRenderFlags.CorrectFromDpi)
' Save to temp file — OpenCvSharp cannot read from memory easily
Dim tempPath As String = Path.GetTempFileName() & ".png"
pageImage.Save(tempPath, ImageFormat.Png)
Try
Using mat As Mat = Cv2.ImRead(tempPath)
Dim result = ocr.Run(mat)
results.AppendLine($"--- Page {i + 1} ---")
results.AppendLine(result.Text)
End Using
Finally
File.Delete(tempPath) ' Must clean up temp files
End Try
End Using
Next
End Using
Return results.ToString()
End Using
End Function
End Class
Bu, tek bir PDF için 30+'dan fazla satırdır. Başka bir NuGet bağımlılığı (PdfiumViewer) eklenmesi, seçilen DPI'da manuel sayfa işlemesi, geçici dosya oluşturma ve silme ve sonuçların tekrar ve tekrar toplanması — tümü PaddleOCR'nin kendisinden önce başlatılır. Çok düşük DPI seçimi doğruluğu düşürür; çok yüksek olanı işlem süresini artırır. Geliştirici bu karara sahiptir.
IronOCR Yaklaşımı
IronOCR, PDF'leri yerel olarak okur. Dönüşüm kütüphanesi yok, geçici dosyalar yok, çağrı yerinde sayfa başına döngü yok:
using IronOcr;
var ocr = new IronTesseract();
// Yerel PDF girişi — no external library needed
using var input = new OcrInput();
input.LoadPdf("document.pdf");
var result = ocr.Read(input);
// Per-page access available if needed
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} chars");
}
// Produce a searchable PDF in one additional line
result.SaveAsSearchablePdf("searchable-output.pdf");
using IronOcr;
var ocr = new IronTesseract();
// Yerel PDF girişi — no external library needed
using var input = new OcrInput();
input.LoadPdf("document.pdf");
var result = ocr.Read(input);
// Per-page access available if needed
foreach (var page in result.Pages)
{
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} chars");
}
// Produce a searchable PDF in one additional line
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
Dim ocr As New IronTesseract()
' Yerel PDF girişi — no external library needed
Using input As New OcrInput()
input.LoadPdf("document.pdf")
Dim result = ocr.Read(input)
' Per-page access available if needed
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} chars")
Next
' Produce a searchable PDF in one additional line
result.SaveAsSearchablePdf("searchable-output.pdf")
End Using
Şifre korumalı PDF'ler, aynı LoadPdf yolu ile bir Password parametresi kullanır. PDF giriş kılavuzu ve arama yapılabilir PDF kılavuzu çok sayfalı ve çıktı seçeneklerini ayrıntılı olarak kapsar. PDF olarak gelen her dosyanın geldiği taranmış belge arşivlerini dijitalleştiren kuruluşlar için bu fark, bir entegrasyon kodu katmanını önemli ölçüde ortadan kaldırır.
API Eşleme Başvurusu
| PaddleOCR (Sdcb) | IronOCR Karşılığı | Notlar |
|---|---|---|
Sdcb.PaddleOCR |
IronOcr |
Namespace |
PaddleOcrAll |
IronTesseract |
Ana OCR orkestrasyon sınıfı |
FullOcrModel |
Yok | Eşdeğeri yok — modeller paketlenmiş |
OnlineFullModels.ChineseV4.DownloadAsync() |
dotnet add package IronOcr.Languages.ChineseSimplified |
Model edinme |
LocalDetectionModel.FromDirectory(path) |
Yok | Model yolu yönetimi yok |
LocalClassificationModel.FromDirectory(path) |
Yok | Model yolu yönetimi yok |
LocalRecognitionModel.FromDirectory(path) |
Yok | Model yolu yönetimi yok |
new PaddleOcrAll(models) |
new IronTesseract() |
Motor örnekleme |
new PaddleOcrAll(models, PaddleDevice.Gpu(0)) |
N/A (CPU optimize edilmiş) | GPU cihaz seçimi |
Cv2.ImRead(imagePath) (OpenCvSharp) |
new OcrInput(imagePath) veya input.LoadImage(path) |
Görüntü yükleme |
ocr.Run(mat) |
ocr.Read(input) |
OCR'yi yürüt |
result.Text |
result.Text |
Tam belge metni |
result.Regions |
result.Words / result.Lines |
Yapılı metin bölgeleri |
region.Text |
word.Text |
Bir bölgeden metin |
region.Score |
word.Confidence |
Güven değeri (0-1 vs 0-100) |
region.Rect.Center.X / .Center.Y |
word.X / word.Y |
Sınır kutusu pozisyonu |
region.Rect.Size.Width / .Height |
word.Width / word.Height |
Sınır kutusu boyutları |
AllowRotateDetection = true |
input.Deskew() |
Dönüş imajı |
Enable180Classification = true |
Otomatik | Ters çevrilmiş metin tespiti |
| Yok | input.DeNoise() |
Gürültü giderme |
| Yok | input.Contrast() |
Kontrast artırma |
| Yok | input.EnhanceResolution(300) |
DPI ölçeklendirme |
| Yok | input.LoadPdf(path) |
Yerel PDF girişi |
| Yok | result.SaveAsSearchablePdf(path) |
Aranabilir PDF çıktısı |
| Yok | ocr.AddSecondaryLanguage(lang) |
Birden çok dil aynı anda |
Takımlar PaddleOCR'den IronOCR'ye Geçmeyi Düşündüğünde
Dil Gereklilikleri 14'ün Ötesine Geçtiğinde
Bir proje Çin faturalarını işlemeye başlar — PaddleOCR bunu iyi çalıştırır. Sonra müşteri tabanı genişler ve belgeler Lehçe, Felemenkçe, Yunanca, Vietnamca ve Türkçe olarak gelir. PaddleOCR'nin desteklenen 14 dili, bunlardan hiçbirini kapsamaz. Taşınma zorunlu hale gelir çünkü araç kullanım durumuyla büyüyemez. IronOCR'da Lehçe desteğini eklemek bir NuGet paket eklemesi ve tek satır konfigürasyon değişikliğidir. Bir projeyi "başlangıçta Çince ağırlıklı ama sonunda çok bölgesel" olarak çalışan ekipler, bir yeniden yazım olmadan dil kapsamını genişletebilen bir araçla başlamaya karar vermelidir.
Kurulum Maliyeti Sorun Bütçesini Aştığında
PaddleOCR belgeleri, ilk kurulum için CPU'da 30-60 dakika ve GPU'da 2-8 saat tahmin eder. Saatte 100$ olan geliştirici zamanı, ilk GPU konfigürasyonu denemesinin ilk üretim görüntüsü işlenmeden önce 200-800$ maliyetine neden olur.IronOCR kurulumu tek bir kurulum komutu ve dört satırlık bir kod örneği — beş dakikadan az. Dahili araçlar, prototipler veya OCR'nin ana üründen ziyade ikincil bir özellik olduğu projeler için bu zaman farkı, OCR özelliğinin mevcut sprintte gönderilip gönderilmeyeceğini veya öncelik dışına çıkarılacağını belirler.IronOCR ile çabaya başlamak bir CUDA ortamını yapılandırmaktan daha az zaman alır.
PDF İş Akışlarının Hakim Olduğu Durumlar
Taranmış belge arşivlerini dijitalleştiren kuruluşlar, faks-to-PDF hatlarını işleyen veya PDF formatında faturalar ve sözleşmelerden veri çıkaranlar PaddleOCR'de yapısal bir sorunla karşılaşır: her PDF, ek bir kütüphane, manuel sayfa işlemesi, geçici dosya yönetimi ve DPI seçim mantığı gerektirmeden önce PaddleOCR tarafından işlenmelidir. Bu, rastgele bir karmaşıklık değildir — kalıcı bir bakımdır. İlk PaddleOCR entegrasyonundan sonra iş yüklerinin %80+'i PDF tabanlı olduğunu keşfeden ekipler, %80+'i PDF tabanlı olduklarında taşınır genellikle PDF dönüşüm katmanı bir hata kaynağı haline geldiğinde taşınır.
Baidu Menşei Uyarıları Uyumluluk İncelemeleri
Hükümet, savunma, sağlık hizmetleri ve finansal hizmetler kuruluşlarındaki kurumsal güvenlik ekipleri giderek artan bir şekilde Çin devletiyle bağlantılı şirketlerden kaynaklanan bileşenlere inceleme kriterleri uygulamaktadır. PaddleOCR, bir Baidu projesidir; model indirmeleri varsayılan olarak Baidu Cloud Storage'a bağlanır; PaddlePaddle çerçevesi bir Baidu ürünüdür. Kod yerel olarak çalışır ve belgeler iletilmez, ancak model eserleri Baidu altyapısından kaynaklanır. FedRAMP, ITAR veya CMMC ortamları için, bu menşei uyumluluk incelemesini tetikler ve benimsemeyi engelleyebilir. IronOCR, ABD merkezli bir şirket olan Iron Software'in bir ürünüdür, içerikleri yerel olarak işler, dış bağlantı yapmaz ve üçüncü taraf bir sunucudan model indirmeleri gerektirmez.
GPU Altyapısı Hazır Olmadığında
PaddleOCR CPU'da (300-500ms/görüntü, 3-5 saniye soğuk başlangıç,500MB-1GBbellek)IronOCR CPU'dan (150-300ms/görüntü, bir saniyeden az soğuk başlangıç,100-200MBbellek) daha yavaş ve daha ağırdır. PaddleOCR'nin GPU avantajı yalnızca CUDA/cuDNN kurulumu sonrasında belirginleşir ve yalnızca yüksek hacimde operasyonel karmaşıklığı doğrular. GPU örnekleri olmayan yetkili bulut altyapısı çalıştıran takımlar — GPU olmayan EC2, Azure App Service, AWS Lambda — PaddleOCR kurulum maliyetini haklı çıkarmayan bir performans avantajı almadan öder.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
Paket ve Namespace Değişimi
Paket değişimi beş bağımlılığı kaldırır ve bir tane ekler. Sdcb.PaddleOCR, Sdcb.PaddleOCR.Models.Online, Sdcb.PaddleInference.runtime.* paketi, OpenCvSharp4 ve OpenCvSharp4.runtime.win, .csproj'den kaldırın. IronOcr ekleyin. Önceden indirilen bir model seti kullanan İngilizce olmayan tüm diller için NuGet paketleri olarak dil paketleri ekleyin.
using Sdcb.PaddleOCR ve using OpenCvSharp direktifleri using IronOcr ile değiştirilir. Mat mat = Cv2.ImRead(path) kalıbı new OcrInput(path) veya input.LoadImage(path) ile değiştirilir. ocr.Run(mat) çağrısı ocr.Read(input) olur. Görüntü giriş API'sini kullanan projeler için, OcrInput nesnesi dosya yollarını, bayt dizilerini, akışları ve System.Drawing.Bitmap kabul eder — OpenCvSharp aracı tamamen ortadan kalkar.
Sonuç Yapısı Yeniden Eşleme
PaddleOCR, result.Regions döndürüyor — PaddleOcrResultRegion nesnelerinin bir dizisi olarak, region.Score 0 ile 1 arasında bir float. IronOCR, result.Words döndürüyor — word.Confidence ise 0 ile 100 arasında bir yüzde. Güven filtresi r.Score >= 0.8, w.Confidence >= 80 ile eşlenir. Sınırlayıcı kutu erişimi, region.Rect.Center.X / region.Rect.Size.Width'den word.X / word.Width'ya değişiyor. yapılı sonuçlar rehberi sayfaları, paragrafları, satırları ve kelimeleri kapsar.
İtalik sıralama (okuma sırasını taklit etmek için Y'ye sonra X'e göre sıralama),IronOCR ile daha az sıklıkla gereklidir çünkü Tesseract düzen motoru sayfa segmentasyonu adımında okuma-sırası analizini gerçekleştirir. PaddleOCR'nin özel sıralama mantığını gerektirdiği belgelerde, IronOCR'nin varsayılan çıktı düzeninin zaten bu gereksinimi karşılayıp karşılamadığını portlama kodunu aktarmadan önce test edin.
Ön İşleme Geçişi
PaddleOCR'nin derin öğrenme tespit modeli, orta derece görüntü kalitesi bozulmasına tolerans gösterir — sinir ağı, gürültü ve eğriliği, Tesseract'ın klasik segmentasyon hattından daha güvenilir bir şekilde ele alır. IronOCR'ye geçiş yaparken, önceden sorunsuz işlenmiş belgeler için açık ön işleme ekleyin:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("low-quality-scan.png");
// These filters recover the accuracy that PaddleOCR provided automatically
// on noisy or skewed inputs
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = ocr.Read(input);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("low-quality-scan.png");
// These filters recover the accuracy that PaddleOCR provided automatically
// on noisy or skewed inputs
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = ocr.Read(input);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("low-quality-scan.png")
' These filters recover the accuracy that PaddleOCR provided automatically
' on noisy or skewed inputs
input.Deskew()
input.DeNoise()
input.Contrast()
input.Binarize()
input.EnhanceResolution(300)
Dim result = ocr.Read(input)
End Using
Standart olmayan açılarda veya arka plan gürültüsü olan taranmış belgeler için bu dört filtre çoğu doğruluk boşluğunu kapatır. görüntü yönlendirme düzeltme kılavuzu ve görüntü rengi düzeltme kılavuzu, her filtrenin yaygın tarama artefaktlar üzerindeki etkisini belgelemektedir. Son geçişi öncesinde her iki hattan temsili belgeleri çalıştırarak doğruluğun gerçek belge setinde gereksinimleri karşıladığını doğrulayın.
Dağıtım Temizliği
Taşıma sonrası, dağıtım eseri önemli ölçüde küçülür. models/ dizin ağacını silin (üç alt dizin, ~21MB model dosyası), paddle_inference.dll (~200MB), paddle2onnx.dll (~5MB), ve opencv_world*.dll dosyaları (~50MB toplam). Dockerfile'dan apt-get install libopencv-dev satırını kaldırın ve model kopyalama adımını silin. Modelleri önceden indiren veya model dizinlerini önbelleğe alan herhangi bir CI/CD adımını kaldırın. Docker görüntüsü yaklaşık 1.5GB'dan 400MB'a düşer.
Ek IronOCR Yetenekleri
Yukarıda kaplanan karşılaştırma noktalarının ötesinde, IronOCR, OCR'nin ötesine geçen özellikler sağlar:
- OCR sırasında Barkod okuma:
ocr.Configuration.ReadBarCodes = true'yı ayarlayın ve aynı belgedeki barkodlar, bir geçişte metin ile birlikte çözümlenir — ayrı bir barkod kütüphanesi gerekmez - Bölge tabanlı OCR: Tam sayfayı işlemden geçirmeden belirli belge alanlarını (fatura numarası alanı, başlık satırı, imza bloğu) hedeflemek için
CropRectanglekullanın - Asenkron OCR: ASP.NET denetleyicilerinde ve arka plan hizmetlerinde engellenmeyen entegrasyon için tam asenkron/yayın destek.
- Güven puanlama: Belge seviyesi ve kelime seviyesi güven, kalite kapılarını sağlar — insan incelemesi için düşük güvenlik sonuçlarını reddedin veya işaretleyin
- hOCR dışa aktarma: Konumsal HTML tüketen genel belge yönetim sistemleri için hOCR çıktısı üretin
- El yazısı tanıma: Yazılı belge OCR'sının ötesine, el yazılı formlara ve notlar çıkarır
- Tablo çıkarımı: Faturalar, raporlar ve formlardan tablolu veri yapılı halde çıkarma
- İlerleme takibi: UI bağlamlarında uzun çok sayfalı toplu iş operasyonları için OCR ilerleme raporu
.NET Uyumluluğu ve Geleceğe Hazırlık
IronOCR, Windows x64, Windows x86, Linux x64 ve macOS üzerinde .NET 6, 7, 8 ve 9 hedefler. Azure App Service, AWS Lambda, Docker konteynerleri üzerinde çalışır, ve izole yerinde ortamlar — tamamı aynı NuGet paketinden. Kütüphane, her .NET sürüm döngüsüne uyumlu Iron Software'den düzenli güncellemeler alır, .NET 10 ile planlanan uyumluluk dahil. PaddleOCR'nin .NET sarıcı, topluluk tarafından sürdürülen bir projedir; yeni .NET sürümleriyle uyumluluk, tek bir bakımcının kapasitesine bağlıdır. Sarının yayın zaman çizelgesi ve yeni PaddleOCR Python model sürümlerinin .NET'e ulaşması için 3 aylık gecikmesi, topluluk mevcudiyetine bağımlılığı ve ticari yayın taahhütlerini gösterir.
Sonuç
PaddleOCR'nin CJK doğruluk avantajı gerçektir ve özeldir. Bir projenin ana iş yükü Basitleştirilmiş Çince belgelerse ve ekip derin öğrenme uzmanlığına ve mevcut GPU altyapısına sahipse, çoklu paket kurulum maliyeti ve CUDA konfigürasyon karmaşıklığı, Tesseract tabanlı motorlar tarafından şu anda eşleştirilmeyen sıkı Çince karakter tanıma üzerine konumlandırılmış olan doğruluk rakamlarıyla haklı çıkarılır.
Sorun, bu belirli senaryonun .NET OCR kullanım durumlarının azınlığını tanımlamasıdır. Çoğu ticari uygulama İngilizce ve Avrupa dillerindeki belgeleri işler, burada IronOCR'nin %97-99 doğruluğu PaddleOCR'nin %92-95'ini aşar. Çoğu geliştirme ekipleri önceden kurulmuş bir CUDA altyapısına sahip değildir. Çoğu belge hattı PDF alır ve bunlar PaddleOCR'nin ek bir kütüphane olmadan işleyemediği dosyalardır. .NET projesinde çalışan çoğu geliştirici tek bir paket yüklemenin tam kurulum adımı olmasını bekler — beş paketlik ilk olan, bir asenkron model indirme ve bir OpenCV bağımlılığı ardında değildir.
Ölçekte GPU geçişi gerektiren ekipler için, PaddleOCR CPU performansı (300-500ms),IronOCR CPU performansının (150-300ms) zaten gerisinde, yani PaddleOCR'nin performans açısından tek senaryo, CUDA altyapısının zaten operasyonel olduğu durumdur. IronOCR'nin süresiz lisans maliyeti, yalnızca GPU konfigürasyon süresi göz önüne alındığında genellikle ilk hafta içinde telafi edilir.
Açılış sorusu, %95+'lik Çince karakter doğruluğunun onu sağlayan tam yığını haklı çıkarıp çıkarmadığıdır. Çoğunluğu Çince-odaklı iş yükleri olan, GPU altyapısı ve Baidu kökenli yazılım için uyumluluk onayına sahip olan ortamlar için cevap evet. Her şey için,IronOCR beş dakika içinde çalışmaya başlar ve çoğu .NET OCR projesinin gerçekten karşılaştığı dil, ön işleme ve PDF gereksinimlerinin kapsamını karşılar.
Sıkça Sorulan Sorular
PaddleOCR nedir?
PaddleOCR, geliştiriciler ve işletmeler tarafından görüntüler ve belgelerden metin çıkarmak için kullanılan bir OCR çözümüdür. .NET uygulama geliştirmesi için IronOCR ile birlikte değerlendirilen birkaç OCR seçeneğinden biridir.
IronOCR, .NET geliştiricileri için PaddleOCR ile nasıl karşılaştırılır?
IronOCR, IronTesseract'i çekirdek motoru olarak kullanan, NuGet-native bir .NET OCR kütüphanesidir. PaddleOCR ile karşılaştırıldığında, daha basit bir dağıtım (SDK yükleyicileri olmadan), sabit fiyatlandırma ve COM interop veya bulut bağımlılıkları olmadan temiz bir C# API'si sunar.
IronOCR'nin kurulumunu yapmak PaddleOCR'ye göre daha mı kolay?
IronOCR, tek bir NuGet paketi aracılığıyla yüklenir. SDK kurulumları, kopyalamak için lisans dosyaları, kaydedilecek COM bileşenleri veya yönetilecek ayrı çalışma zamanı ikili dosyaları yoktur. Tüm OCR motoru paket içinde yer alır.
PaddleOCR ve IronOCR arasındaki doğruluk farkları nelerdir?
IronOCR, standart iş belgeleri, faturalar, makbuzlar ve taranmış formlar için yüksek tanıma doğruluğu sağlar. Çok kötü durumda olan belgeler ya da nadir yazılar için ise doğruluk, kaynak kalitesine göre değişiklik gösterebilir. IronOCR, düşük kaliteli girişlerde tanımayı geliştirmek için görüntü ön işleme filtreleri içerir.
IronOCR, PDF metin çıkarma desteği sunuyor mu?
Evet. IronOCR, tek bir çağrıda hem yerel PDF'lerden hem de taranmış PDF görüntülerinden metin çıkarır. Çok sayfalı TIFF dosyaları, görüntüler ve akıntılar da desteklenir. Taranmış PDF'ler için, OCR sayfa bazında uygulanır ve her sayfa için sonuç nesneleri sağlanır.
PaddleOCR lisanslaması IronOCR ile nasıl karşılaştırılır?
IronOCR, sayfa veya tarama başına ücret içermeyen sabit oranlı bir süresiz lisans kullanır. Yüksek belge hacmi işleyen kuruluşlar, hacme rağmen aynı lisans maliyetini öder. Ayrıntılar ve hacim fiyatlandırması IronOCR lisans sayfasında mevcuttur.
IronOCR hangi dilleri destekliyor?
IronOCR, ayrı NuGet dil paketleri aracılığıyla 127 dili destekler. Bir dil eklemek için tek bir 'dotnet add package IronOcr.Languages.{Language}' komutu gerekir. Manuel dosya yerleştirme veya yol yapılandırması gerekmez.
.NET projesine IronOCR'yi nasıl kurarım?
NuGet üzerinden kurun: 'Install-Package IronOcr' Package Manager Console'da veya 'dotnet add package IronOcr' CLI'de. Ek dil paketleri aynı şekilde yüklenir. Yerel SDK kurucusu gerekmez.
IronOCR, PaddleOCR'den farklı olarak Docker ve konteynerleştirilmiş dağıtımlar için uygun mudur?
Evet. IronOCR, NuGet paketi aracılığıyla Docker konteynerlerinde çalışır. Lisans anahtarı, bir ortam değişkeni aracılığıyla ayarlanır. Lisans dosyaları, SDK yolları veya OCR motoru için hacimlerin bağlanmasına gerek yoktur.
IronOCR'yi, PaddleOCR ile karşılaştırarak satın almadan önce deneyebilir miyim?
Evet. IronOCR deneme modu, belgeleri işler ve çıkış üzerine bir filigran eklemeli OCR sonuçları döndürür. Lisans satın almadan önce kendi belgeleriniz üzerinde doğruluğu kontrol edebilirsiniz.
IronOCR, metin çıkarma yanında barkod okuma desteği sunar mı?
IronOCR, metin çıkarma ve OCR'ye odaklanır. Barkod okuma için Iron Software, eşlik eden bir kütüphane olan IronBarcode'u sağlar. Her ikisi de ayrı ayrı veya Iron Suite paketi olarak mevcuttur.
PaddleOCR'dan IronOCR'a geçiş yapmak kolay mı?
PaddleOCR'den IronOCR'ye geçiş genellikle başlatma dizilerinin IronTesseract ile değiştirilmesini, COM yaşam döngüsü yönetiminin kaldırılmasını ve API çağrılarının güncellenmesini içerir. Çoğu geçiş, kod karmaşıklığını önemli ölçüde azaltır.

