iOS OCR Kütüphanesi (Ücretsiz ve Ücretli Araçlar Karsilastirmasi)
PaddleSharp (Sdcb.PaddleOCR), gerçekten çalıştırdığınız OCR motorundan üç soyutlama katmanı uzakta durur: Baidu sinir ağı modellerini eğitir, RapidOCR hafif bir tahmin için bunları yeniden paketler ve PaddleSharp bunu .NET tüketimi için tekrar sarar. Her katman bir bakım bağımlılığı ekler ve zincirin sınırları, CJK dışındaki bir dile, giriş olarak PDF'ye veya CUDA olmadan bir üretim dağıtımına ihtiyacınız olduğunda kendini gösterir. Bu karşılaştırma, .NET ekiplerinin ön planda nadiren öngördüğü bir mimarinin sunduğu ve maliyetini çıkardığı yerleri incelemektedir.
PaddleSharp OCR'i Anlamak
PaddleSharp, Baidu'nun PaddleOCR derin öğrenme çerçevesinin bir .NET sarmalayıcısıdır, NuGet üzerinde Sdcb.PaddleOCR olarak yayımlanmıştır. Geleneksel OCR algoritmalarını kullanmak yerine, PaddleOCR üç aşamalı bir sinir ağı hattı uygular: bir tespit modeli görüntüde metin bölgelerini bulur, bir sınıflandırıcı modeli metin yönünü belirler ve bir tanıma modeli her bölgeyi metne dönüştürür. Her aşama indirdiğiniz ve bağımsız olarak yapılandırdığınız ayrı bir model dosyasıdır.
Python gerektirmeden .NET'e PaddlePaddle çıkarımı getirmek için sarıcı inşa edildi. Bu hedef teknik olarak başarılmıştır ancak maliyet, platforma özgü çalışma zamanı paketleri gerektiren OpenCvSharp görüntü işleme kütüphanesini içeren bir bağımlılık yığını ve model dosyalarının kendisidir. Windows'ta, bir karakter tanınmadan önce en az dört NuGet paketinin kurulumu gerekir.
PaddleSharp'ın ana mimari özellikleri:
- Sarmalayıcı derinliği: Üç katman — PaddlePaddle (Baidu) → PaddleOCR modelleri → Sdcb.PaddleSharp .NET bağlamaları
- Model yönetimi: Algılama, sınıflandırma ve tanıma modelleri ayrı indirmelerdir (Çince V3 seti için sırasıyla ~3MB, ~2MB ve ~10MB); Yolları ve sürümleri elle yönetirsiniz
- OpenCV bağımlılığı: Görüntü yükleme için
OpenCvSharp4gereklidir; platform değiştirmek,OpenCvSharp4.runtime.*paketini değiştirmeyi gerektirir - Dil odaklanması: Başlıca güç Çince ve İngilizce'dir; diğer dil desteği mevcut ve korunan PaddleOCR model paketleriyle sınırlıdır
- GPU hızlandırması: Ev sahibi üzerinde uyumlu bir CUDA araç seti ve cuDNN kurulumu gerektiren
Sdcb.PaddleInference.runtime.win64.cudapaketi ile yerel CUDA desteği - CPU performans cezası: GPU olmadan, işlem CPU optimizasyonlu alternatife göre daha yavaştır — derin öğrenme olmayan motorlar için optimize edilmiş100–400mskarşısında her resim için 500–1500ms
- Topluluk ayak izi: Küçük bir İngilizce dil topluluğu; belgelerin çoğu, Stack Overflow yanıtları ve GitHub sorunları Çince'dir
Üç Aşamalı Çıkarım Kurulumu
PaddleSharp'ı basit bir metin çıkarma görevi için ayarlamak, tüm üç model aşamasını bir araya getirmeyi gerektirir:
// Simplified — see Sdcb.PaddleOCR documentation for full API
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;
public class PaddleOcrService
{
private readonly PaddleOcrAll _ocr;
public PaddleOcrService()
{
// Three separate models, each downloaded independently
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
// GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = new PaddleOcrAll(detModel, clsModel, recModel);
}
public string ExtractText(string imagePath)
{
// OpenCV required for image loading — not System.Drawing
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
// Manual sort by position; no automatic reading-order guarantee
return string.Join("\n", result.Regions
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X)
.Select(r => r.Text));
}
}
// Simplified — see Sdcb.PaddleOCR documentation for full API
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;
public class PaddleOcrService
{
private readonly PaddleOcrAll _ocr;
public PaddleOcrService()
{
// Three separate models, each downloaded independently
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
// GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = new PaddleOcrAll(detModel, clsModel, recModel);
}
public string ExtractText(string imagePath)
{
// OpenCV required for image loading — not System.Drawing
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
// Manual sort by position; no automatic reading-order guarantee
return string.Join("\n", result.Regions
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X)
.Select(r => r.Text));
}
}
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models
Imports OpenCvSharp
Public Class PaddleOcrService
Private ReadOnly _ocr As PaddleOcrAll
Public Sub New()
' Three separate models, each downloaded independently
Dim detModel = LocalFullModels.ChineseV3.DetectionModel
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel
' GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = New PaddleOcrAll(detModel, clsModel, recModel)
End Sub
Public Function ExtractText(imagePath As String) As String
' OpenCV required for image loading — not System.Drawing
Using image = Cv2.ImRead(imagePath)
Dim result = _ocr.Run(image)
' Manual sort by position; no automatic reading-order guarantee
Return String.Join(vbLf, result.Regions _
.OrderBy(Function(r) r.Rect.Center.Y) _
.ThenBy(Function(r) r.Rect.Center.X) _
.Select(Function(r) r.Text))
End Using
End Function
End Class
Yapıcı tek başına gerçek iş yapar: model ikili dosyalarını diskten yükler ve çıkarım motorunu başlatır. Bu başlatma maliyeti her PaddleOcrAll örneği için bir kez ödenir ve bu, nesneyi oluşturmayı pahalı hale getirir ve hizmet odaklı .NET uygulamalarında dikkatli yaşam döngüsü yönetimi gerektirir.
IronOCR'u Anlamak
IronOCR, optimize edilmiş bir Tesseract 5 motoruna dayanan ve üzerine otomatik ön işleme hattı eklenmiş ticari bir .NET OCR kütüphanesidir. Harici model dosyaları olmadan, yerel ikili yapılandırmalar olmadan, ve herhangi bir ikincil resim işleme kitaplığı bağımlılığı olmadan tek bir NuGet paketi olarak yüklenir. Tasarım amacı, "kurulum" ile "doğru metin çıktısı" arasındaki boşluğu ortadan kaldırmaktır — bu boşluk diğer çoğu .NET OCR seçeneğini tanımlar.
IronOCR'nin ana özellikleri:
- Tek paket dağıtımı:
dotnet add package IronOcr— model indirmeleri yok, tessdata klasörleri yok, OpenCV yok - Otomatik ön işleme: Dizgi kaldırma, gürültü giderme, kontrast artırma, ikilileştirme ve çözünürlük normalleştirme resim girişi üzerinde otomatik olarak gerçekleşir; Gerektiğinde mevcut açık ön işleme filtreleri
- Yerel PDF desteği: Hem taranmış hem de metin katmanlı PDF'ler doğrudan kabul edilir; parola korumalı PDF'ler bir parametre gerektirir
- 125+ dil: Bireysel NuGet dil paketleri olarak teslim edilir (örneğin,
IronOcr.Languages.ChineseSimplified), herhangi bir paket bağımlılığı gibi yönetilir - Yapılandırılmış çıktı: Sonuçlar sayfalar, paragraflar, satırlar, kelimeler ve bireysel karakter sınırlayıcı kutularlarını güven seviyeleri ile birlikte açığa çıkarır
- İş parçacığı güvenliği: Birden çok
IronTesseractörneği ortak durum olmadan eşzamanlı çalışır; bir parti iş yükünü paralel hale getirmekParallel.ForEachçağrısıdır - Fiyatlandırma: $999 süresiz (Lite, 1 geliştirici), $1,499 (Plus, 3 geliştirici), $2,999 (Professional, 10 geliştirici), $5,999 (Sınırsız)
Özellik Karşılaştırması
| Özellik | PaddleSharp OCR | IronOCR |
|---|---|---|
| Gerekli NuGet paketleri | 3–4 minimum | 1 |
| Model yönetimi | Elle (3 ayrı dosya) | None |
| PDF girişi | Hayır (dönüşüm gerekli) | Yerel |
| Dil sayısı | ~10–20 | 125+ |
| GPU hızlandırması | Evet (CUDA) | CPU için optimize edilmiş |
| Ön işlem | Elle (OpenCV) | Otomatik |
| Fiyatlandırma | Ücretsiz (Apache 2.0) | $5,999 süresiz |
Ayrıntılı Özellik Karşılaştırması
| Özellik | PaddleSharp OCR | IronOCR |
|---|---|---|
| Kurulum ve Dağıtım | ||
| NuGet paketleri gerekli | 3–4 | 1 |
| Model dosyaları indirmesi | Evet (3 dosya, toplam ~15MB) | Hayır |
| OpenCV bağımlılığı | Gereklidir | None |
| GPU için CUDA/cuDNN | GPU modu için gerekli | Uygulanamaz |
| Docker dağıtımı | Karmaşık (yerel çalışma zamanları) | Tek katman ekleme |
| İzole dağıtım | Evet (model indirmeden sonra) | Evet |
| Metin Tanıma | ||
| Çince/Japonca/Korece doğruluğu | Yüksek (ana odak) | Yüksek |
| Latin alfabeli doğruluk | Orta | Yüksek |
| El yazısı | Sınırlı | Desteklenen |
| Düşük kaliteli tarama işlemesi | Elle ön işleme gerekir | Otomatik |
| Otomatik eğrilik giderimi | Hayır | Evet |
| Otomatik gürültü giderme | Hayır | Evet |
| Giriş Kaynakları | ||
| Görüntü dosyaları | Evet (OpenCV aracılığıyla) | Evet |
| PDF dosyaları (yerel) | Hayır | Evet |
| Şifre korumalı PDF | Hayır | Evet |
| Akışlar ve bayt dizileri | OpenCV aracılığıyla | Evet |
| Çok sayfalı TIFF | OpenCV aracılığıyla | Evet |
| Çıktı | ||
| Düz metin | Evet | Evet |
| Aranabilir PDF | Hayır | Evet |
| hOCR | Hayır | Evet |
| Kelime düzeyi sınırlayıcı kutular | Evet | Evet |
| Güven skoru | Evet | Evet |
| Yapılandırılmış sayfa/satır/kelime hiyerarşisi | Kısmi (yalnızca bölgeler) | Tam |
| Dil Desteği | ||
| Dil sayımı | ~10–20 | 125+ |
| Dil yükleme yöntemi | Model paket indir | NuGet paketi |
| Karma dil dökümanı | Sınırlı | Evet |
| Özel dil eğitimi | Evet (PaddlePaddle) | Evet |
| Platform Desteği | ||
| Windows | Evet | Evet |
| Linux | Evet (karmaşık kurulum) | Evet |
| macOS | Sınırlı | Evet |
| Docker | Evet (yerel çalışma zamanları ile) | Evet |
| AWS Lambda | Karmaşık | Evet |
| Performans | ||
| CPU tek bir görüntü | 500–1500ms | 100–400ms |
| GPU tek bir görüntü | 100–300ms | Uygulanamaz |
| Bellek (CPU modu) | Daha yüksek | Orta |
| OCR sırasında barkod okuma | Hayır | Evet |
| Ticari Hazırlık | ||
| Ticari lisans | Apache 2.0 | Geliştirici başına süresiz |
| Destek kanalı | GitHub sorunları | E-posta desteği |
| İngilizce dokümantasyon | Seyrek | Geniş dokümanlar, öğreticiler ve nasıl yapılır kılavuzları |
| Üretim durumu incelemeleri | Nadir (.NET özgü) | Belgelendi |
Özet Derinliği ve Bakım Riski
PaddleSharp, bu kategoride üç ayrı bağımlı projeyi ön koşul olarak çalıştıran tek .NET OCR seçeneğidir. Bu derinlik, üretim ekipleri için temel risktir.
PaddleSharp Yaklaşımı
Bağımlılık zinciri pratikte böyle görünür:
- Baidu PaddlePaddle — temel derin öğrenme çerçevesi. Model formatları ve çıkarım API'ları burada tanımlanır.
- PaddleOCR — Baidu'nun algılama, sınıflandırma ve tanıma model ağırlıklarını üreten model eğitimi projesi.
- Sdcb.PaddleSharp — PaddleInference yerel kütüphanelerini çağıran ve model yükleme API'sini saran .NET bağlam katmanı.
Her katmanın kendi yeni sürüm takvimi, kırılma değişikliği geçmişi ve topluluğu vardır. Baidu, PaddlePaddle çıkarım API'larını güncellediğinde, bağlama katmanı yetişmelidir. PaddleOCR sürümleri arasında bir model formatı değiştiğinde, PaddleSharp'taki model indirme yolları ve yükleme kodu güncellenmelidir. .NET ekibi için, bunlar bir dağıtım başarısız olana kadar görünmezdir.
Başlatma maliyetinin basitleştirilmiş bir gösterimi:
// Simplified — see Sdcb.PaddleOCR documentation for full API
// This is not one line of setup; it represents several coordinated decisions:
// - Which model version to use (ChineseV3, V4, etc.)
// - Whether models are local files or downloaded on first use
// - Which inference backend (CPU, MKL, GPU)
// - Which OpenCvSharp runtime package matches the deployment OS
var detModel = LocalFullModels.ChineseV3.DetectionModel; // Version-specific
var clsModel = LocalFullModels.ChineseV3.ClassifierModel; // Version-specific
var recModel = LocalFullModels.ChineseV3.RecognitionModel; // Version-specific
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// If a newer model format is released, these names and classes may change
// Simplified — see Sdcb.PaddleOCR documentation for full API
// This is not one line of setup; it represents several coordinated decisions:
// - Which model version to use (ChineseV3, V4, etc.)
// - Whether models are local files or downloaded on first use
// - Which inference backend (CPU, MKL, GPU)
// - Which OpenCvSharp runtime package matches the deployment OS
var detModel = LocalFullModels.ChineseV3.DetectionModel; // Version-specific
var clsModel = LocalFullModels.ChineseV3.ClassifierModel; // Version-specific
var recModel = LocalFullModels.ChineseV3.RecognitionModel; // Version-specific
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// If a newer model format is released, these names and classes may change
' Simplified — see Sdcb.PaddleOCR documentation for full API
' This is not one line of setup; it represents several coordinated decisions:
' - Which model version to use (ChineseV3, V4, etc.)
' - Whether models are local files or downloaded on first use
' - Which inference backend (CPU, MKL, GPU)
' - Which OpenCvSharp runtime package matches the deployment OS
Dim detModel = LocalFullModels.ChineseV3.DetectionModel ' Version-specific
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel ' Version-specific
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel ' Version-specific
Dim ocr As New PaddleOcrAll(detModel, clsModel, recModel)
' If a newer model format is released, these names and classes may change
Buradaki sürüm duyarlılığı gerçektir. Sdcb.PaddleOCR 2.x'e tutunan ve daha yeni modellere erişmek için yükseltme yapmak isteyen ekipler, bağlayıcı katmanında API değişiklikleriyle karşılaşır. Üst model dosyaları, büyük PaddleOCR sürümleri arasında geriye dönük uyumlu değildir.
IronOCR Yaklaşımı
IronOCR, motoru ve tüm bağımlılıkları NuGet paketinin içinde dağılmış halde gönderir. Seçilecek bir model sürümü, yapılandırılacak bir çıkarım arka planı yoktur ve senkronize tutulması gereken ikincil bir kütüphane yoktur:
// One package: dotnet add package IronOcr
//Hayırmodel downloads.HayırOpenCV.Hayırruntime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var result = new IronTesseract().Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// One package: dotnet add package IronOcr
//Hayırmodel downloads.HayırOpenCV.Hayırruntime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var result = new IronTesseract().Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' One package: dotnet add package IronOcr
' Hayırmodel downloads.HayırOpenCV.Hayırruntime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim result = New IronTesseract().Read("document.jpg")
Console.WriteLine(result.Text)
Console.WriteLine($"Confidence: {result.Confidence}%")
IronOCR'u yükseltmek, tek bir NuGet sürüm artırmasıdır. API yüzey değişiklikleri yayın notlarında belgelenmiştir ve büyük sürümler içinde geriye dönük uyumluluk korunur. CI/CD hatlarında çalışan ekipler için, dağıtım yüzey alanındaki fark önemli ölçüde daha azdır: bir paket karşısında dört paket artı platforma özgü çalışma zamanı paketleri artı doğru yollarla disk üzerinde mevcut olması gereken model dosyalar.
IronTesseract kurulum kılavuzuna ve resim girişi nasıl yapılır listesine kabul edilen tüm giriş kaynakları için bakın.
Dil Kapsamı
PaddleOCR öncelikle Çince için eğitildi ve İngilizce ikinci dil olarak düşünüldü. .NET topluluğu PaddleSharp etrafında bunu yansıtır: Çince yazılar için model paketleri (Basitleştirilmiş, Geleneksel), İngilizce ve birkaç başka dil için mevcuttur, ancak yaklaşık 10-20 dilin ötesinde kapsam zayıftır ve CJK dışı modellerin bakımı, üst proje ilgi sürdürdüğü sürece devam eder.
PaddleSharp Yaklaşımı
PaddleSharp'ta dil değiştirmek, model setini değiştirmek demektir. Tanıma modeli dil spesifiktir ve basit bir API bayrağı yoktur — farklı bir model nesneleri seti başlatırsınız:
// Simplified — see Sdcb.PaddleOCR documentation for full API
// English model set (if available for your version)
// var recModel = LocalFullModels.EnglishV3.RecognitionModel;
// Chinese model set (primary supported use case)
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// Non-CJK languages require checking upstream PaddleOCR model availability
// Mixed CJK + Latin in the same document may require model selection decisions
// Simplified — see Sdcb.PaddleOCR documentation for full API
// English model set (if available for your version)
// var recModel = LocalFullModels.EnglishV3.RecognitionModel;
// Chinese model set (primary supported use case)
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// Non-CJK languages require checking upstream PaddleOCR model availability
// Mixed CJK + Latin in the same document may require model selection decisions
' Simplified — see Sdcb.PaddleOCR documentation for full API
' English model set (if available for your version)
' Dim recModel = LocalFullModels.EnglishV3.RecognitionModel
' Chinese model set (primary supported use case)
Dim detModel = LocalFullModels.ChineseV3.DetectionModel
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel
Dim ocr = New PaddleOcrAll(detModel, clsModel, recModel)
' Non-CJK languages require checking upstream PaddleOCR model availability
' Mixed CJK + Latin in the same document may require model selection decisions
Fransız faturalarını, Alman sözleşmelerini veya Arap formlarını işleyen bir ekip için, soru, bir model paketi bugünü var mı değil — önümüzdeki yıl bakımının devam edip etmeyeceği ve onu yapılandırıcak İngilizce belgelerin olup olmadığıdır.
IronOCR Yaklaşımı
IronOCR 125+ dili NuGet paketleri olarak sunar. Her bir dil paketi, herhangi bir başka bağımlılık gibi yüklenir ve manuel dosya dağıtımı olmadan standart CI/CD hatları ile entegrasyon sağlar:
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.Arabic
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English); // Mixed-language document
var result = ocr.Read("mixed-document.jpg");
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.Arabic
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English); // Mixed-language document
var result = ocr.Read("mixed-document.jpg");
' dotnet add package IronOcr.Languages.ChineseSimplified
' dotnet add package IronOcr.Languages.French
' dotnet add package IronOcr.Languages.Arabic
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English) ' Mixed-language document
Dim result = ocr.Read("mixed-document.jpg")
çoklu dil kılavuzu, betikleri karıştıran belgeler için eşzamanlı çoklu dil tanımasını kapsar — bu, model seviyesinde hiçbir karar gerektirmeyen sadece bir AddSecondaryLanguage çağrısı gerektiren bir yetenektir.
Belgeleri birçok dili kapsayan ekipler için, ya da başlangıç kapsamının ötesine geçmesi beklenen dil gereksinimleri olanlar için, NuGet paketleri tarafından desteklenen 125 dilli bir katalog, bakımı değişken bir 10–20 dil setinden daha dayanıklı bir seçimdir.
Ön İşleme ve PDF Desteği
PaddleOCR'nin nöral ağ hattı bazı görüntü kalitesi değişkenliklerini, CJK metni için geleneksel OCR'den daha bine ayarlar, fakat döndürme kaldırma, gürültü giderme veya çözünürlük normalizasyonu gibi görevler için yerleşik bir görüntü ön işleme API'si sağlamaz. Herhangi bir ön işlemeyi OpenCV ile yazmalısınız — PaddleSharp zaten bunu gerektiriyor ancak görüntü işleme uzmanları olmayan ekipler için önemli bir kod yüzeyi ekliyor.
PDF desteği daha zor bir boşluktur. PaddleSharp'un yerel PDF okuyucusu yoktur. PDF'leri alan bir belge hattı; her sayfanın bir resme dönüştürülmesi gerekir ki bu, ayrı bir PDF kütüphanesi gerektiği anlamına gelir, bağımlılıklar ekler ve ara dosya yönetimini tanıtır.
PaddleSharp Yaklaşımı
// Simplified — see Sdcb.PaddleOCR documentation for full API
// PaddleSharp has no PDF support — pages must be pre-converted to images
// Preprocessing (deskew, denoise) requires OpenCV operations:
using OpenCvSharp;
// Load image via OpenCV
using var image = Cv2.ImRead("scan.jpg");
// Manual grayscale conversion
using var gray = new Mat();
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY);
// Manual threshold (binarization)
using var binary = new Mat();
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);
// Then pass to OCR engine
var result = _ocr.Run(binary);
// Each preprocessing step requires OpenCV knowledge
// PDF pages require a separate PDF-to-image conversion step first
// Simplified — see Sdcb.PaddleOCR documentation for full API
// PaddleSharp has no PDF support — pages must be pre-converted to images
// Preprocessing (deskew, denoise) requires OpenCV operations:
using OpenCvSharp;
// Load image via OpenCV
using var image = Cv2.ImRead("scan.jpg");
// Manual grayscale conversion
using var gray = new Mat();
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY);
// Manual threshold (binarization)
using var binary = new Mat();
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);
// Then pass to OCR engine
var result = _ocr.Run(binary);
// Each preprocessing step requires OpenCV knowledge
// PDF pages require a separate PDF-to-image conversion step first
Imports OpenCvSharp
' Load image via OpenCV
Using image As Mat = Cv2.ImRead("scan.jpg")
' Manual grayscale conversion
Using gray As New Mat()
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY)
' Manual threshold (binarization)
Using binary As New Mat()
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary)
' Then pass to OCR engine
Dim result = _ocr.Run(binary)
' Each preprocessing step requires OpenCV knowledge
' PDF pages require a separate PDF-to-image conversion step first
End Using
End Using
End Using
Bu ön işlemeyi yazmak, OpenCV deneyimi olan ekipler için mümkündür. Deneyimi olmayan ekipler için, öğrenme eğrisi önemsiz değildir — OpenCV'nin bir geniş API yüzeyi vardır ve belgelerin çoğu öncelikle C++ dili üzerinde temellidir.
IronOCR Yaklaşımı
IronOCR'un ön işleme hattı, harici kütüphane gerektirmez. Resimleri kabul eden aynı OcrInput nesnesi PDF'leri de kabul eder ve ön işleme filtreleri tek metod çağrılarıdır:
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
// Built-in preprocessing — no OpenCV, no manual image math
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
// Built-in preprocessing — no OpenCV, no manual image math
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Using input As New OcrInput()
input.LoadImage("low-quality-scan.jpg")
' Built-in preprocessing — no OpenCV, no manual image math
input.Deskew()
input.DeNoise()
input.Contrast()
input.Binarize()
input.EnhanceResolution(300)
Dim result = New IronTesseract().Read(input)
Console.WriteLine(result.Text)
End Using
PDF girişi için, doğal destek, bir dönüşüm adımının olmaması anlamına gelir:
// PDF input — no external library, no page conversion
var result = new IronTesseract().Read("scanned-document.pdf");
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
// PDF input — no external library, no page conversion
var result = new IronTesseract().Read("scanned-document.pdf");
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronTesseract
' PDF input — no external library, no page conversion
Dim result = New IronTesseract().Read("scanned-document.pdf")
' Password-protected PDFs
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
result = New IronTesseract().Read(input)
End Using
' Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf")
görüntü kalitesi düzeltme kılavuzu, tüm mevcut filtrelerle örnekler içerir. PDF girişi nasıl yapılır, sayfa seçimi, akış girişi ve parola yönetimi için kılavuzlar. Taranmış belgelerden aranabilir PDF'ler üreten ekipler için, aranabilir PDF çıktısı bir yerleşik çıktı formatıdır — ayrı bir işleme adımı değildir.
API Eşleme Başvurusu
| PaddleSharp OCR Konsepti | IronOCR Karşılığı |
|---|---|
Sdcb.PaddleOCR (namespace) |
IronOcr (namespace) |
PaddleOcrAll |
IronTesseract |
LocalFullModels.ChineseV3.DetectionModel |
Eşdeğer yok — model seçimi gerekli değil |
LocalFullModels.ChineseV3.RecognitionModel |
Eşdeğer yok — model seçimi gerekli değil |
LocalFullModels.ChineseV3.ClassifierModel |
Eşdeğer yok — model seçimi gerekli değil |
Cv2.ImRead(path) (OpenCV görüntü yüklemesi) |
input.LoadImage(path) |
_ocr.Run(matImage) |
ocr.Read(input) veya ocr.Read("file.jpg") |
result.Regions |
result.Words, result.Lines, result.Pages |
region.Text |
word.Text, line.Text, page.Text |
region.Rect.Center |
word.X, word.Y |
| Dil modeli değişimi (yeni model seti) | ocr.Language = OcrLanguage.French |
PaddleConfig (çıkarım arka ucü yapılandırması) |
Eşdeğer yok — otomatik yapılandırılmış |
| OpenCvSharp sınır / gri tonlama işlemleri | input.Binarize(), input.ToGrayScale() |
| PDF desteği yok — görüntüye ön dönüştür | input.LoadPdf("file.pdf") |
| Aranabilir PDF çıktısı yok | result.SaveAsSearchablePdf("output.pdf") |
Ekipler PaddleSharp OCR'den IronOCR'a Geçişi Düşündüğünde
Boru Hattı CJK Dışı Belgeleri İşliyor
PaddleSharp Çince için inşa edildi. Bu miras model adlandırma geleneğinde (ChineseV3), temel dokümantasyon dili ve dil paketi mevcudiyetinde görünür. Çince belge işlemesi ile başlayan ve ardından Fransız faturalarına veya Alman sözleşmelerine genişleyen bir ekip sert bir duvara çarpar: CJK dışındaki mevcut model paketleri azdır, CJK dışı modellere olan bakım taahhüdü belirsizdir ve onları kurmak için İngilizce belgeler seyrektir. IronOCR'un NuGet üzerinden125+dil katalogu, dil genişlemesinin bir paket yüklemesi anlamına gelir, bir araştirma projesi değil.
Dağıtım Ortamı GPU'ya Sahip Değil
PaddleOCR'nin derin öğrenme hattı GPU çıkarımı için tasarlanmıştır. CPU üzerinde, performans sayıları dürüst: tipik belge çözünürlüklerinde her görüntü için 500–1500 ms. Binlerce belge işleyen bir yığın boru hattı için veya eşzamanlı OCR istekleri sunan bir ASP.NET uygulaması için, CPU modunda PaddleSharp ölçek boyunca birleşen gecikmeler ekler. IronOCR'un optimize edilmiş Tesseract 5 motoru, CPU üzerinde GPU gereksinimi olmadan görüntü başına100–400msçalışır. Standart VM katmanlarında, GPU geçişi olmayan konteynerlerde veya CI çalışanlarında dağıtımları için, bu fark, bir işi tamamlama ile tamamlamama arasındaki farktır.
PDF Belgeleri Giriş Boru Hattında
PDF, iş belgeleri için kayıt formatıdır. PaddleSharp'un PDF okuyucusu yoktur. PaddleSharp'ı temel alarak inşa ettiklerinde, bu sınırlamayı keşfeden ekipler bir seçimle karşı karşıya: bir PDF kütüphanesi eklemek (şimdi kendi lisanslama ve sürüm düşünceleri olan başka bir bağımliliği yönetmek), PDF'leri ön işleme adımı olarak görüntülere dönüştürmek (depolama ve I/O yükünü ekleyerek), veya yerel PDF desteği olan bir kütüphaneye geçmek. IronOCR'un yerel PDF girişi, şifre korumalı PDF'ler ve sayfa aralığı seçimi de dahil olmak üzere, PDF ile başlayan belge iş akışları için doğrudan bir seçimdir.
Bağımlılık Zinciri Güvenlik veya Uyum İncelemesi Geçemiyor
Kurumsal dağıtımlar — sağlık, finans, hükümet — genellikle bir yazılım malzeme faturası ve bağımlılık denetimi gerektirir. PaddleSharp'ın zinciri, Baidu kökenli model dosyalarını ve Baidu derin öğrenme çıkarım çalışma zamanını içerir. Belirli kökenlerden gelen yazılım bileşenlerini kısıtlayan politikaları olan kuruluşlar veya satıcı güvenlik açıklamalarına açık bir yol talep eden ekipler için, Baidu kökenli ikili dosyalara bağımlılık ek inceleme adımlarını gerektirir. IronOCR, standart ticari destek ilişkisi ve belgelenmiş lisans koşullarıyla bir Batılı yazılım satıcısından tek bir ticari üründür.
Ekip Operasyonel Aşırı Yükü Karşılayamaz
18 aydan fazla bir süre PaddleSharp dağıtımını sürdürmek, model sürümü uyumluluğunu takip etmek, OpenCV çalışma zamanı paket sürümlerini platforma özgü dağıtımlarla koordine etmek, eğer GPU kullanılıyorsa CUDA araç seti sürümlerini hizalamak ve çoğunlukla Çince olan üst GitHub sorunlarını izlemek anlamına gelir. Bu, önemsiz olmayan bir operasyonel yatırımdır. Ana yeterliliği, inşa ettikleri uygulama olan ekipler için — derin öğrenme altyapısı değil — PaddleSharp'ı yönetmenin maliyeti ile orantılı değer üretmeyen bir aşırı yüktür.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
OpenCV Bağımlılığını Kaldırmak
PaddleSharp, görüntü yükleme için OpenCvSharp4 ve platforma özgü bir OpenCvSharp4.runtime.* paketi gerektirir. IronOCR, System.Drawing.Bitmap, dosya yolları, akışlar ve bayt dizilerini doğrudan OcrInput aracılığıyla kabul eder. Taşınabilirlik, Cv2.ImRead() çağrılarını input.LoadImage() ile değiştirmek ve OpenCvSharp paket referanslarını tamamen kaldırmak anlamına gelir:
// PaddleSharp pattern — requires OpenCV
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
//IronOCR equivalent — no OpenCV
var result = new IronTesseract().Read(imagePath);
// PaddleSharp pattern — requires OpenCV
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
//IronOCR equivalent — no OpenCV
var result = new IronTesseract().Read(imagePath);
Imports OpenCvSharp
Imports IronOcr
' PaddleSharp pattern — requires OpenCV
Using image = Cv2.ImRead(imagePath)
Dim result = _ocr.Run(image)
End Using
' IronOCR equivalent — no OpenCV
Dim result = New IronTesseract().Read(imagePath)
görüntü girdi kılavuzu, akışlar, URL'ler ve bellekteki bit resimleri dahil tüm kabul edilen giriş türlerini kapsar.
Bölge Seviyesinde Sonuç Haritalama
PaddleSharp, result.Regions — tespit edilen metin bölgelerinin yan dikdörtgenleri ve metin dizgileriyle düz bir listesini döndürür.IronOCR daha zengin bir hiyerarşi döndürür: sayfalar paragraflar içerir, paragraflar satırlar içerir, satırlar kelimeler içerir, hepsi koordinatlarla ve her bir unsur için güven puanları ile. result.Regions kullanıyorsa, düzlük kelime listeleme ve konum verisi için IronOCR eşdeğeri:
var result = new IronTesseract().Read("document.jpg");
// Per-word with position — equivalent to PaddleSharp region enumeration
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%");
}
var result = new IronTesseract().Read("document.jpg");
// Per-word with position — equivalent to PaddleSharp region enumeration
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%");
}
Imports System
Imports IronOcr
Dim result = New IronTesseract().Read("document.jpg")
' Per-word with position — equivalent to PaddleSharp region enumeration
For Each word In result.Words
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%")
Next
sonuçları okuma kılavuzu, tam sonuç yapısını belgeler. güven skorları kılavuzu, her bir unsur için olan güven değerlerini açıklar ve bunları kalite filtrelemesi için nasıl kullanacağını anlatır.
OCR Motoru için Yaşam Döngüsü Yönetimi
PaddleSharp'ın PaddleOcrAll yapımı pahalıdır — oluşturulması sırasında model ikili dosyalarını diskten yükler ve ASP.NET Core'da tek veya kapsamlı bir hizmet olarak ele alınmalıdır. IronOCR'un IronTesseract daha hafif bir başlatma maliyetine sahiptir, ancak aynı ilke geçerlidir: bir web uygulamasında istekler arası örnekleri yeniden kullanmak, her istek için oluşturmaktan daha verimlidir. Her iki durumda da, bir singleton veya istek başına kapsamlı bir hizmet olarak bağımlılık enjeksiyonu doğru modeldir.
Dil Paketi Kurulumu
PaddleSharp dil desteği, oluşturma zamanında farklı model setlerini seçmek anlamına gelir. IronOCR'da, dil desteği projeye eklenen bir NuGet paketi ve tek satırlık bir yapılandırma çağrısıdır:
// dotnet add package IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
var result = ocr.Read("document.jpg");
// dotnet add package IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
var result = ocr.Read("document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
Dim result = ocr.Read("document.jpg")
PaddleSharp'tan taşınan CJK ekipleri için, Çince Basitleştirilmiş, Çince Geleneksel, Japonca ve Korece tüm IronOCR dil paketleri olarak mevcuttur. özelleştirilmiş dil kılavuzu, özel eğitimli tessdata'yı uzmanlaşmış kullanım senaryoları için içeri almayı kapsar.
Ek IronOCR Yetenekleri
Yukarıda karşılaştırılan özelliklerin ötesinde, IronOCR, PaddleSharp'ın kapsamı dışında tamamen olan yetenekler sağlar:
- Bölge tabanlı OCR: Tam sayfayı işlemek yerine belirli bir görüntü bölgesine — başlık satırları, fatura toplamları, belirli form alanları —
CropRectanglekullanarak hedefleyin - Asenkron OCR: ASP.NET Core istek hatlarına OCR entegrasyonu için entegre asenkron destek — saatleri bloke etmeden
- Pasaport ve kimlik okuma: Seyahat belgerlerinin ve kimlik kartlarının makine okunabilir bölge verilerini yapısal olarak çıkarma
- Tablo okuma: Tablolar belge düzenlerinden satır-sütun yapısını yeniden oluşturmak için kelime koordinatlarının alansal gruplandırması
- Lisanslama: Çalışma zamanı telifleri olmadan ve deneme modunda ücretsiz geliştirme kullanımı altında, geliştirici başına sürekli lisanslar
.NET Uyumluluğu ve Geleceğe Hazırlık
IronOCR, x64 ve x86 mimarileri genelinde Windows,LinuxvemacOSiçin tam destek ile .NET 8 ve .NET 9 hedefler ve Docker dağıtım kılavuzları konteynerli iş yükleri için yayımlar. PaddleSharp modern .NET çalışma zamanlarını destekler ancak OpenCV çalışma zamanı paketleri tarafından karmaşıklaştırılmış çapraz platform hikayesi ile; bunlar, ayrı platforma özgü NuGet paketleri olarak dağıtılmış ve ortam başına doğru olanın seçilip dağıtılması gerekir. IronOCR'un tek paket dağıtım modeli bu platform matrisi tamamen ortadan kaldırır ve Linux, AWS ve Azure dağıtım kılavuzları, üretim karşısında test edilmiş yapılandırmaları yansıtır.
Sonuç
PaddleSharp, belirli dar bir senaryoda güçlü bir savunma sunar: bir ekibin ağırlıklı olarak Çince belgeleri CUDA uyumlu bir GPU ile donanımda işlemesi, CJK metni için derin öğrenme doğruluk tavanının dağıtım basitliğinden daha önemli olduğu yer. Bu gerçek bir kullanım durumudur ve içinde PaddleSharp teslim eder. Üç aşamalı nöral ağ hattı, yoğun Çince metni derin öğrenme yatırımını gerçek anlamda yansıtan bir doğrulukla tanır.
Bu senaryonun dışında, soyutlama derinliği bir yük olur. Üç üst akış bağımlılığı — Baidu'nun çıkarım çerçevesi, PaddleOCR model eğitim projesi ve PaddleSharp .NET bağlama katmanı — her biri kendi sürüm döngüleri taşırlar ve bakım uyumları garanti edilmez. İngilizce dokümantasyon seyrektir. CJK ötesindeki dil kataloğu zayıftır ve tutarsız bir biçimde bakımı yapılır. PDF girdisi ayrı bir kütüphane gerektirir. Ve bir GPU olmadan, görüntü başına CPU gecikmesi IronOCR'nin 100–400ms'ine karşı 500–1500ms'dir.
IronOCR'un ödünleşimi tersine çevriktir: tek bir ticari paket bir $999 giriş fiyatı ile, model yönetimi yok, yerel PDF ve çok formatlı giriş ve125+dil, NuGet paketleri olarak yerleşik ön işlemeyle OpenCV gereksinimini ortadan kaldırır. Abstraksiyon tasarımdan kaynaklanır ve abstraksiyon kararlıdır — API, ekiplerin uygulamalarını çalışır durumda tutmak için Baidu model formatı değişikliklerini izlemelerini gerektirmemiştir.
Genel amaçlı İngilizce veya çok dilli OCR ihtiyaçları, PDF iş akışları veya GPU donanımını dışlayan dağıtım kısıtlamaları olan ekipler için IronOCR basit bir seçimdir.IronOCR belgeleri, tüm girdi türleri, ön işleme seçenekleri ve çıktı formatları kapsamını kapsar ve eğitim merkezinde, faturalar, pasaportlar ve taranmış arşivler gibi yaygın belge türleri için çalışan kodlar bulunur.
Sıkça Sorulan Sorular
PaddleSharp OCR nedir?
PaddleSharp OCR, geliştiriciler ve işletmeler tarafından görüntü ve belgelerden metin çıkarmak için kullanılan bir OCR çözümüdür. .NET uygulama geliştirme için IronOCR ile birlikte değerlendirilen birkaç OCR seçeneğinden biridir.
IronOCR, .NET geliştiricileri için PaddleSharp OCR ile nasıl karşılaştırılır?
IronOCR, ana motoru olarak IronTesseract'ı kullanan bir NuGet-yerli .NET OCR kütüphanesidir. PaddleSharp OCR ile karşılaştırıldığında, daha basit bir dağıtım (SDK yükleyiciler yok), sabit oranlı fiyatlandırma ve COM interop veya bulut bağımlılıkları olmadan temiz bir C# API sunar.
IronOCR, PaddleSharp OCR'dan daha kolay mı kuruluyor?
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.
PaddleSharp OCR ile 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.
PaddleSharp OCR 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, PaddleSharp'tan farklı olarak Docker ve kapsüllenmiş dağıtımlar için uygun mu?
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 PaddleSharp ile karşılaştırmadan önce satın almadan 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.
PaddleSharp OCR'den IronOCR'ye geçiş yapmak kolay mı?
PaddleSharp OCR'den IronOCR'a geçiş genellikle başlatma dizilerini IronTesseract örneklemesi ile değiştirmeyi, COM yaşam döngüsü yönetimini kaldırmayı ve API çağrılarını güncellemeyi içerir. Çoğu geçiş, kod karmaşıklığını önemli ölçüde azaltır.

