Altbilgi içeriğine atla
DIğER BILEşENLERLE KARşıLAşTıRıN

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.mkl veya 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 OpenCvSharp Mat nesnesi 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
$vbLabelText   $csharpLabel

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 IronOcr her ş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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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();
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

Ş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
$vbLabelText   $csharpLabel

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 CropRectangle kullanı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.

Lütfen dikkate alınPDFium, PaddleOCR ve Tesseract, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site, Baidu, Chromium Project, Google veya PaddlePaddle ile ilişkili, onaylanmış veya sponsorlu değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. 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.

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.

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ı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara