IronOCR vs AWS Textract: Girişimler İçin OCR Çözümleri
GdPicture.NET bir OCR eklentisi için tek bir kuruş ödemeden önce bir çekirdek lisans gerektirir — ve PDF'leri okumak veya arama yapılabilir çıktı üretmek istiyorsanız ek PDF eklentilerine de ihtiyacınız vardır. Mevcut fiyatları öğrenmek için GdPicture ile iletişime geçin. Görüntülerden ve PDF'lerden metin çıkarması gereken bir ekip için, birden fazla eklentinin birleşik maliyeti ve yıllık bakım ücretleri önemli ölçüde artabilir. Faturalandırma, GdPicture'ın mimarisinin doğrudan bir sonucudur: bu tam belge görüntüleme platformu, tarama, DICOM, açıklamalar, barkod işleme ve PDF düzenleme ile kapsar ve OCR, birçok eklentiden biridir. Sadece OCR gereksinimleri olan ekipler, asla tam kullanmayacakları bir belge görüntüleme SDK'sının maliyetini üstlenirler.
API de aynı felsefeyi yansıtır. GdPicture, kaynakları bellekte izlemek için tamsayı görüntü ID'leri kullanır — yüklenen her görüntü bir int döndürür, bu tamsayı tutamacına karşı yöntemler çağırırsınız ve ardından bunu açıkça serbest bırakmalı veya bir bellek sızıntısını kabul etmelisiniz. Bu desen, IDisposable ve using ifadelerinden önce gelir. Çalışıyor, ancak her temizlik kararının yükünü geliştiricinin üzerine, her seferinde koyar. Bu karşılaştırma, o iki gerilimi — eklenti temelli fiyatlandırma ve resim kimliği yaşam döngüsü — API karmaşıklığı, ön işleme ve PDF işleme ile birlikte inceler, karşıtlık olarak IronOCR ile.
GdPicture.NET Anlamak
GdPicture.NET, ORPALIS tarafından geliştirilen ticari bir belge görüntüleme SDK'sıdır. Yıllar içinde, görüntü işleme, PDF oluşturma ve düzenleme, barkod okuma ve oluşturma, TWAIN/WIA tarayıcı entegrasyonu, DICOM tıbbi görüntüleme, açıklama ve inceleme iş akışları ve PDF/A uyumlu belge arşivleme ile kapsanan geniş kapsamlı bir platform haline gelmiştir. OCR, bu ekosistem içindeki bir yetenektir ve özel bir eklenti üzerinden sunulur.
SDK, işlevselliğini, her biri kendi birincil sınıfına sahip ayrı modüller halinde düzenler:
- GdPictureImaging — görüntü yükleme, işleme, format dönüşümü ve tüm tamsayı resim kimliklerinin kaynağı
- GdPicturePDF — PDF oluşturma, düzenleme, işleme ve sayfa düzeyinde OCR operasyonları (ayrı eklenti lisansı gereklidir)
- GdPictureOCR — metin tanıma ve çıkarma; GdPictureImaging tarafından üretilen resim kimliklerini tüketir
- GdPicture1DBarcode / GdPicture2DBarcode — lineer ve 2D barkod okuma ve yazma (ayrı eklenti lisansları gereklidir)
- GdPictureDocumentImaging — masaüstü temizleme filtreleri, eğrilik, speckle kaldırma, sınır kaldırma ve delik yumru kaldırma dahil (ayrı eklenti)
- GdPictureAnnotations — belge işaretleme, inceleme ve redaksiyon
Temel bir OCR bile iki bileşenin oluşturulmasını gerektirir — görüntüyü yüklemek için GdPictureImaging ve metni tanımak için GdPictureOCR — ve her iki bileşenin yaşam döngülerinin yönetilmesi. PDF'den OCR için üçüncü bir gereklilik: GdPicturePDF. Nam alanı kendi içinde bir sürüm numarası (GdPicture14) içerir, bu da her büyük SDK yükseltmesinin tüm kod tabanı boyunca bir bul-ve-değiştir işlemi gerektirdiği anlamına gelir.
Yaygın OCR senaryoları için eklenti bağımlılık ağacı şöyle görünür:
| Eğer ihtiyaç duyarsanız | Lisans almanız gerekir |
|---|---|
| Görüntülerden OCR | Temel lisans + OCR Eklentisi |
| PDF'lerden OCR | Temel + OCR Eklentisi + PDF Eklentisi |
| Aranabilir PDF çıktısı | Temel + OCR Eklentisi + PDF Eklentisi |
| OCR öncesi belge temizleme | Temel + OCR Eklentisi + Belge Görüntüleme Eklentisi |
Resim Kimliği Yaşam Döngüsü
GdPicture'ın tanımlayıcı mimari özelliği tamsayı resim kimliği yönetimidir. Herhangi bir görüntünün yüklenmesi, GdPicture çalışma zamanında bellek tahsis eder ve bir int tutamacı döndürür. Bu tamsayıyı, sonraki tüm çağrılarda referans olarak kullanırsınız. İşiniz bittiğinde, o tamsayı ile ReleaseGdPictureImage çağırırsınız. Eğer yapmazsanız, süreç bitene kadar bellek serbest bırakılmaz.
using GdPicture14;
// Every image load returns an integer handle
int imageId = _imaging.CreateGdPictureImageFromFile(imagePath);
if (imageId == 0)
{
throw new Exception($"Failed to load image: {_imaging.GetStat()}");
}
try
{
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
if (string.IsNullOrEmpty(resultId))
{
throw new Exception($"OCR failed: {_ocr.GetStat()}");
}
return _ocr.GetOCRResultText(resultId);
}
finally
{
// CRITICAL: omitting this line causes a memory leak
_imaging.ReleaseGdPictureImage(imageId);
}
using GdPicture14;
// Every image load returns an integer handle
int imageId = _imaging.CreateGdPictureImageFromFile(imagePath);
if (imageId == 0)
{
throw new Exception($"Failed to load image: {_imaging.GetStat()}");
}
try
{
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
if (string.IsNullOrEmpty(resultId))
{
throw new Exception($"OCR failed: {_ocr.GetStat()}");
}
return _ocr.GetOCRResultText(resultId);
}
finally
{
// CRITICAL: omitting this line causes a memory leak
_imaging.ReleaseGdPictureImage(imageId);
}
Imports GdPicture14
' Every image load returns an integer handle
Dim imageId As Integer = _imaging.CreateGdPictureImageFromFile(imagePath)
If imageId = 0 Then
Throw New Exception($"Failed to load image: {_imaging.GetStat()}")
End If
Try
_ocr.SetImage(imageId)
_ocr.Language = "eng"
Dim resultId As String = _ocr.RunOCR()
If String.IsNullOrEmpty(resultId) Then
Throw New Exception($"OCR failed: {_ocr.GetStat()}")
End If
Return _ocr.GetOCRResultText(resultId)
Finally
' CRITICAL: omitting this line causes a memory leak
_imaging.ReleaseGdPictureImage(imageId)
End Try
Çok sayfalı PDF'leri işlerken, her işlenmiş sayfa ayrı bir resim kimliği üretir. 200 DPI'da 100 sayfalık bir belge, temizlik eksik kalırsa 1–5 GB bellek tahsis edebilir. Doğru desen, tüm ID'leri toplayıp bir finally blokta serbest bırakmayı gerektirir — ancak bu disiplin tamamen geliştiricinin sorumluluğundadır.
IronOCR'u Anlamak
IronOCR .NET için tek bir NuGet paketi olarak inşa edilmiş ticari bir OCR kütüphanesidir. Tasarım hedefi, yapılandırma yükü olmadan doğruluktur: paketi yükleyin, bir lisans anahtarı ayarlayın, Read çağırın. Kütüphane optimize edilmiş bir Tesseract 5 motorunu otomatik ön işleme, yerel PDF işleme ve yapısal sonuç erişimi ile sarmalar, hepsi standart .NET desenleri aracılığıyla sunulur.
Anahtar özellikler:
- Tek bir NuGet paketi —
dotnet add package IronOcrher şeyi, İngilizce dil desteği dahil, yükler; dış kaynak klasörleri, yerel ikili yönetimi yok - Standart .NET kaynak yönetimi —
OcrInputIDisposableuygular; Birusingifadesi, hatalardan bağımsız olarak tüm temizlemeyi yönetir. - Otomatik ön işleme — Deskew, DeNoise, Contrast, Binarize ve EnhanceResolution
OcrInputüzerinde tek satırlık yöntem çağrılarıdır; motor ayrıca açık bir talimat olmadan otomatik düzeltmeler uygular - Doğal PDF girişi — taranan PDF'ler ve doğal PDF'ler ayrı bir rendering adımı olmadan doğrudan
IronTesseract.Read'ye beslenir - Tasarıma göre iş parçacığı güvenli — tek bir
IronTesseractörneği eşzamanlı istekleri karşılar;Parallel.ForEachek senkronizasyon olmadan çalışır - 125+ dil — ayrı NuGet paketleri olarak dağıtılır (
IronOcr.Languages.French, vb.), yönetilecek tessdata klasörü yok - Yapılandırılmış sonuç erişimi —
OcrResult.Pages,.Lines,.Words,.Charactersve.Barcodeskoordinat verileri ile yazılmış koleksiyonlar olarak sunar
Fiyatlandırma süresizdir: $999 Lite, $1,499 Plus, $2,999 Professional, $5,999 Unlimited. Tüm özellikler her kademede mevcuttur; farklılık geliştirici sayısı ve kapsanan projeler arasında bulunur.
Özellik Karşılaştırması
| Özellik | GdPicture.NET | IronOCR |
|---|---|---|
| Fiyatlandırma modeli | Eklenti temelline dayalı süresiz + yıllık bakımlar için %20 | Düz süresiz, yıllık güncellemeler isteğe bağlı |
| Giriş maliyeti (PDF'lerden OCR) | Birden fazla eklenti gerekli (fiyatlar için GdPicture ile iletişime geçin) | $2,999 (tek paket, tüm özellikler) |
| Kaynak yönetimi | Manuel tamsayı kimliği izleme ve serbest bırakma | IDisposable / using ifadesi |
| Ad alanı kararlılığı | Nam alanda sürüm numarası (GdPicture14) |
Sürümden bağımsız (IronOcr) |
| - PDF OCR | Ayrı PDF eklentisi gerekiyor | Yerleşik, ek lisans gerekmez |
| Kurulum | Çoklu NuGet paketleri + harici kaynak klasörü | Tek NuGet, harici dosya yok |
| Çapraz platform | Windows, Linux, macOS | Windows, Linux, macOS, Docker, AWS, Azure |
Ayrıntılı Özellik Karşılaştırması
| Özellik | GdPicture.NET | IronOCR |
|---|---|---|
| Kurulum ve Yükleme | ||
| NuGet yükleme | Gerekli çoklu paketler | dotnet add package IronOcr |
| Harici kaynak klasörü | Gerekli (tessdata-tarzı dil dosyaları) | Gerekli değil (paketlenmiş) |
| Lisans aktivasyonu | LicenseManager.RegisterKEY() |
IronOcr.License.LicenseKey = "..." |
| Bileşen başlatma | PDF OCR iş akışı için 3–4 sınıf | new IronTesseract() |
| Ana yükseltmede ad alanı | Her kaynak dosyanın güncellenmesi gerekir | Değişiklik gerekmez |
| OCR Yetenekleri | ||
| Görüntü OCR | Evet | Evet |
| PDF OCR | Evet (PDF eklentisi gerekli) | Evet (yerleşik) |
| Şifre korumalı PDF | Evet | Evet |
| Çok sayfalı PDF | Manuel sayfa döngüsü + ID temizleme | Otomatik |
| Aranabilir PDF çıktısı | OcrPage + SaveToFile |
result.SaveAsSearchablePdf() |
| hOCR içeri aktarma | Hayır | Evet |
| Ön işlem | ||
| Hizalama | GdPictureDocumentImaging eklentisi ile | input.Deskew() |
| Gürültü giderme | GdPictureDocumentImaging eklentisi ile | input.DeNoise() |
| Kontrast artırma | GdPictureImaging üzerinden | input.Contrast() |
| Binarizasyon | GdPictureImaging üzerinden | input.Binarize() |
| DPI artırımı | GdPictureImaging üzerinden | input.EnhanceResolution(300) |
| Otomatik düzeltme (kod yok) | Hayır | Evet (Read'e dahil) |
| Kaynak Yönetimi | ||
| Bellek yönetimi modeli | Manuel tam sayı ID takibi | IDisposable / GC |
| Bellek sızıntısı riski | Yüksek (ReleaseGdPictureImage eksik) | Hiçbiri (using ifadesi kullanarak) |
| İş parçacığı güvenliği | Manuel örnek yönetimi | Tasarımı gereği iş parçacığı güvenli |
| Sonuçlar ve Veriler | ||
| Düz metin | GetOCRResultText(resultId) |
result.Text |
| Güven skoru | GetOCRResultConfidence(resultId) |
result.Confidence |
| Kelime düzeyinde veri | İç içe blok/çizgi/kelime yinelemesi | result.Words koleksiyonu |
| Koordinat erişimi | Blok/çizgi/kelime indeks çağrıları üzerinden | Doğrudan .X, .Y, .Width, .Height |
| OCR sırasında barkod okuma | Ayrı barkod eklentisi üzerinden | ocr.Configuration.ReadBarCodes = true |
| Diller | ||
| Dil sayımı | Tesseract tabanlı, benzer kapsama | 125+ NuGet paketleri aracılığıyla |
| Dil dağıtımı | Kaynak klasörü dosyaları | NuGet paketleri |
| Tek geçişte çok dilli | Evet | Evet (AddSecondaryLanguage) |
| Dağıtım | ||
| Docker | Desteklenen | Destekleniyor (belgelendi) |
| Linux | Desteklenen | Desteklenen |
| AWS Lambda | Mümkün | Belgelenmiş rehber |
| Azure App Service | Mümkün | Belgelenmiş rehber |
Görüntü ID Yaşam Döngüsü ve Tek Kullanımlık OcrInput
GdPicture ve IronOCR arasındaki en önemli mimari fark bir özellik açığı değil — her kütüphanenin işlediği görüntülerin belleğini nasıl yönettiğidir.
GdPicture Yaklaşımı
GdPicture içindeki her görüntü, çalışma zamanı tarafından yönetilen bir havuzda, tamsayı bir tanıtıcı olarak mevcuttur. Tanıtıcıyı bir görüntüyü yükleyerek edinir, o tam sayı ile OCR ve diğer işlemleri yapar, ardından işiniz bittiğinde bırakırsınız. Desen doğru ve açık şekilde izlendiğinde doğrudur. Sorun, hata yapmanın kolay olmasıdır ve sonucu sınırsız bellek büyümesidir.
PDF OCR iş akışı, riski en açık şekilde gösterir. pdf.RenderPageToGdPictureImage() çağrısının her biri bellekte yeni bir raster görüntü tahsis eder ve yeni bir tamsayı ID'si döndürür. 100 sayfalık bir belge, 100 ayrı tahsis yaratır. Bir ReleaseGdPictureImage çağrısını kaçırın ve süreç biriken sızan bellek ile sonuçlanır:
using GdPicture14;
public string ExtractTextFromPdf(string pdfPath)
{
var text = new StringBuilder();
using var pdf = new GdPicturePDF();
GdPictureStatus status = pdf.LoadFromFile(pdfPath, false);
if (status != GdPictureStatus.OK)
throw new Exception($"Failed to load PDF: {status}");
int pageCount = pdf.GetPageCount();
for (int i = 1; i <= pageCount; i++)
{
pdf.SelectPage(i);
// Each page render = new memory allocation + new integer ID
int imageId = pdf.RenderPageToGdPictureImage(200, false);
if (imageId == 0) continue;
try
{
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
if (!string.IsNullOrEmpty(resultId))
text.AppendLine(_ocr.GetOCRResultText(resultId));
}
finally
{
// Without this: ~10–50MB leaked per page
_imaging.ReleaseGdPictureImage(imageId);
}
}
return text.ToString();
}
using GdPicture14;
public string ExtractTextFromPdf(string pdfPath)
{
var text = new StringBuilder();
using var pdf = new GdPicturePDF();
GdPictureStatus status = pdf.LoadFromFile(pdfPath, false);
if (status != GdPictureStatus.OK)
throw new Exception($"Failed to load PDF: {status}");
int pageCount = pdf.GetPageCount();
for (int i = 1; i <= pageCount; i++)
{
pdf.SelectPage(i);
// Each page render = new memory allocation + new integer ID
int imageId = pdf.RenderPageToGdPictureImage(200, false);
if (imageId == 0) continue;
try
{
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
if (!string.IsNullOrEmpty(resultId))
text.AppendLine(_ocr.GetOCRResultText(resultId));
}
finally
{
// Without this: ~10–50MB leaked per page
_imaging.ReleaseGdPictureImage(imageId);
}
}
return text.ToString();
}
Imports GdPicture14
Imports System.Text
Public Function ExtractTextFromPdf(ByVal pdfPath As String) As String
Dim text As New StringBuilder()
Using pdf As New GdPicturePDF()
Dim status As GdPictureStatus = pdf.LoadFromFile(pdfPath, False)
If status <> GdPictureStatus.OK Then
Throw New Exception($"Failed to load PDF: {status}")
End If
Dim pageCount As Integer = pdf.GetPageCount()
For i As Integer = 1 To pageCount
pdf.SelectPage(i)
' Each page render = new memory allocation + new integer ID
Dim imageId As Integer = pdf.RenderPageToGdPictureImage(200, False)
If imageId = 0 Then Continue For
Try
_ocr.SetImage(imageId)
_ocr.Language = "eng"
Dim resultId As String = _ocr.RunOCR()
If Not String.IsNullOrEmpty(resultId) Then
text.AppendLine(_ocr.GetOCRResultText(resultId))
End If
Finally
' Without this: ~10–50MB leaked per page
_imaging.ReleaseGdPictureImage(imageId)
End Try
Next
End Using
Return text.ToString()
End Function
Birden çok PDF üzerinde toplu işleme bu durumu daha da artırır. Her for döngüsünün belgeleri, bakıcıları bir List<int> içinde ID'leri toplamaya ve hepsini finally içinde serbest bırakmaya teşvik eden bir not taşımalıdır. Bu, altyapı işi, OCR işi değil.
IronOCR Yaklaşımı
OcrInput standart bir IDisposable'dir. Bir using ifadesi, yöntem normalde döner veya hata fırlatırsa temizliği garanti eder. Takip edilecek tam sayı ID'leri, başlatılacak ayrı bir görüntüleme bileşeni ve PDF sayfaları için harici DPI işleme adımı yoktur.
using IronOcr;
public string ExtractTextFromPdf(string pdfPath)
{
// LoadPdf handles page rendering internally
using var input = new OcrInput();
input.LoadPdf(pdfPath);
var result = new IronTesseract().Read(input);
foreach (var page in result.Pages)
Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
return result.Text;
// using block exits — all internal resources released automatically
}
using IronOcr;
public string ExtractTextFromPdf(string pdfPath)
{
// LoadPdf handles page rendering internally
using var input = new OcrInput();
input.LoadPdf(pdfPath);
var result = new IronTesseract().Read(input);
foreach (var page in result.Pages)
Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
return result.Text;
// using block exits — all internal resources released automatically
}
Imports IronOcr
Public Function ExtractTextFromPdf(pdfPath As String) As String
' LoadPdf handles page rendering internally
Using input As New OcrInput()
input.LoadPdf(pdfPath)
Dim result = New IronTesseract().Read(input)
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}: {page.Text}")
Next
Return result.Text
' using block exits — all internal resources released automatically
End Using
End Function
Parola korumalı PDF'ler için, parametre, ek durum kontrolü gerektiren ayrı bir aşırı yükleme yerine bir adlandırılmış argümandır:
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
Dim result = New IronTesseract().Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
End Using
IronOCR PDF giriş rehberi, sayfa aralığı seçimi dahil ek seçenekleri kapsar. Entity Framework, HttpClient ve akış işlemleri boyunca IDisposable desenlerine aşina olan ekipler için, OcrInput yeni bir zihinsel model gerektirmez.
Eklenti Paketleme Maliyeti
Görüntülerden ve PDF'lerden metin çıkarması ve aranabilir çıktı üretmesi gereken bir sunucu uygulaması için GdPicture lisans yığını birden fazla eklenti gerektirir. Profesyonel çekirdek lisans, OCR eklentisi ve PDF eklentisi için mevcut fiyatları öğrenmek üzere GdPicture ile iletişime geçin. Yıllık bakım ücretleri (genellikle toplam lisans maliyetinin bir yüzdesi) zamanla birikir.
IronOCR Professional aynı iş akışını tek bir pakette kapsar:
IronOCR Professional: $professionalLicense (tek seferlik)
Opsiyonel yıllık güncellemeler: $plusLicense/yıl
3 yıllık toplam (süresiz, güncellemeler yok): $professionalLicense
Çok yıllık maliyet farkı, güncelleme tercihlerinize bağlı olarak önemli olabilir. Bu fark, GdPicture'nin eklenti modelinin, OCR odaklı iş yükleri için değil, tam bir belge görüntüleme platformu için fiyatlandırılması nedeniyle vardır. OCR eklentisi, en yaygın OCR giriş formatı için kullanılabilir hale getiren PDF eklentisinin öncesinde gereklidir.
GdPicture ile OCR değerlendirirken ekipler, nadiren OCR odaklı iş yığınlarında görünen yetenekler için ödeme yapar: TWAIN/WIA tarayıcı entegrasyonu, DICOM tıbbi görüntüleme, ek açıklama ve düzeltme iş akışları ve metin çıkarımının ötesindeki gelişmiş PDF düzenleme. Tüm özelliklerin her seviyede mevcut olduğu bir fiyatlandırma modeli için IronOCR lisanslama sayfasına bakın — eklenti yok, eklenti yok, özellik başına lisanslama kararı yok.
API Karmaşıklığı ve Ön İşleme
GdPicture, GdPictureImaging (kontrast, binarizasyon, çözünürlük ölçekleme) ve ayrı bir GdPictureDocumentImaging eklentisi aracılığıyla ön işlemede bulunur (deskew, despeckle, kenar kaldırma). OCR'den önce eğim düzeltme uygulamak, düşük kaliteli taranmış belgeleri işleyen herhangi bir iş akışı için belge görüntüleme eklentisi lisansını gerektirir ve bu, yığındaki üçüncü bir maliyet yaratır.
GdPicture Yaklaşımı
Düşük kaliteli taranmış bir PDF'nin tam iş akışı — yükleme, ön işleme, her sayfada OCR yapma, serbest bırakma — üç bileşen sınıfını kapsar ve her adımda dikkatli bir durum kontrolü gerektirir:
using GdPicture14;
public void CreateSearchablePdf(string inputPdf, string outputPdf)
{
using var pdf = new GdPicturePDF();
GdPictureStatus status = pdf.LoadFromFile(inputPdf, false);
if (status != GdPictureStatus.OK)
throw new Exception($"Load failed: {status}");
int pageCount = pdf.GetPageCount();
for (int i = 1; i <= pageCount; i++)
{
pdf.SelectPage(i);
// OcrPage adds text layer to each page
// Requires: OCR plugin + PDF plugin + resource folder path
GdPictureStatus ocrStatus = pdf.OcrPage(
"eng",
@"C:\GdPicture\Resources\OCR", //Harici kaynak klasörürequired
"",
200
);
if (ocrStatus != GdPictureStatus.OK)
Console.WriteLine($"Warning: Page {i} OCR failed: {ocrStatus}");
}
pdf.SaveToFile(outputPdf, true);
}
using GdPicture14;
public void CreateSearchablePdf(string inputPdf, string outputPdf)
{
using var pdf = new GdPicturePDF();
GdPictureStatus status = pdf.LoadFromFile(inputPdf, false);
if (status != GdPictureStatus.OK)
throw new Exception($"Load failed: {status}");
int pageCount = pdf.GetPageCount();
for (int i = 1; i <= pageCount; i++)
{
pdf.SelectPage(i);
// OcrPage adds text layer to each page
// Requires: OCR plugin + PDF plugin + resource folder path
GdPictureStatus ocrStatus = pdf.OcrPage(
"eng",
@"C:\GdPicture\Resources\OCR", //Harici kaynak klasörürequired
"",
200
);
if (ocrStatus != GdPictureStatus.OK)
Console.WriteLine($"Warning: Page {i} OCR failed: {ocrStatus}");
}
pdf.SaveToFile(outputPdf, true);
}
Imports GdPicture14
Public Sub CreateSearchablePdf(inputPdf As String, outputPdf As String)
Using pdf As New GdPicturePDF()
Dim status As GdPictureStatus = pdf.LoadFromFile(inputPdf, False)
If status <> GdPictureStatus.OK Then
Throw New Exception($"Load failed: {status}")
End If
Dim pageCount As Integer = pdf.GetPageCount()
For i As Integer = 1 To pageCount
pdf.SelectPage(i)
' OcrPage adds text layer to each page
' Requires: OCR plugin + PDF plugin + resource folder path
Dim ocrStatus As GdPictureStatus = pdf.OcrPage(
"eng",
"C:\GdPicture\Resources\OCR", ' Harici kaynak klasörü required
"",
200
)
If ocrStatus <> GdPictureStatus.OK Then
Console.WriteLine($"Warning: Page {i} OCR failed: {ocrStatus}")
End If
Next
pdf.SaveToFile(outputPdf, True)
End Using
End Sub
ResourceFolder yolu isteğe bağlı değildir. Bu yol, çalışma zamanında .traineddata dil dosyalarını içeren bir dizine çözümlenmelidir. Bu yol geliştirme makinesinde çalışır, ardından hizmet hesabı C:\GdPicture\Resources\OCR göremediğinde veya uygulama Linux'a dağıtıldığında veyaDockergörüntüleri bu dizin yapısını içermediğinde üretimde çalışmaz. Bu hataların hata ayıklaması, genellikle kök sebep hakkında çok az şey söyleyen genel GdPictureStatus hata kodlarını takip etmek anlamına gelir.
IronOCR Yaklaşımı
IronOCR'deki eşdeğer iş akışı — eğim düzeltme ve gürültü giderme için ön işlem dahil — beş satırdır:
using IronOcr;
public void CreateSearchablePdf(string inputPdf, string outputPdf)
{
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf(inputPdf);
input.Deskew(); //Hayırseparate plugin required
input.DeNoise();
var result = ocr.Read(input);
result.SaveAsSearchablePdf(outputPdf);
}
using IronOcr;
public void CreateSearchablePdf(string inputPdf, string outputPdf)
{
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadPdf(inputPdf);
input.Deskew(); //Hayırseparate plugin required
input.DeNoise();
var result = ocr.Read(input);
result.SaveAsSearchablePdf(outputPdf);
}
Imports IronOcr
Public Sub CreateSearchablePdf(inputPdf As String, outputPdf As String)
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadPdf(inputPdf)
input.Deskew() 'Hayırseparate plugin required
input.DeNoise()
Dim result = ocr.Read(input)
result.SaveAsSearchablePdf(outputPdf)
End Using
End Sub
İngilizce dil desteği NuGet paketine gömülüdür. Ek diller, bir dosya sistemi yolundaki .traineddata dosyaları yerine NuGet paketleri (IronOcr.Languages.French) olarak yüklenir. Görüntü kalitesi düzeltme kılavuzu ve görüntü yönlendirme düzeltme kılavuzu OcrInput üzerinde mevcut olan tüm ön işleme seçeneklerini kapsar.
Güven farkındalığına sahip işleme için — örneğin bir veritabanına yazmadan önce bir eşik altındaki sonuçları filtreleme — sonuç nesnesi güveni doğrudan açığa çıkarır:
var result = new IronTesseract().Read("scanned.jpg");
Console.WriteLine($"Confidence: {result.Confidence}%");
// Per-word confidence for fine-grained filtering
var highConfidenceWords = result.Words
.Where(w => w.Confidence > 85)
.Select(w => w.Text);
var result = new IronTesseract().Read("scanned.jpg");
Console.WriteLine($"Confidence: {result.Confidence}%");
// Per-word confidence for fine-grained filtering
var highConfidenceWords = result.Words
.Where(w => w.Confidence > 85)
.Select(w => w.Text);
Imports System
Imports System.Linq
Dim result = (New IronTesseract()).Read("scanned.jpg")
Console.WriteLine($"Confidence: {result.Confidence}%")
' Per-word confidence for fine-grained filtering
Dim highConfidenceWords = result.Words _
.Where(Function(w) w.Confidence > 85) _
.Select(Function(w) w.Text)
GdPicture aynı verilere ulaşmak için üç iç içe döngü — bloklar, satırlar, kelimeler — gerektirir ve her seviyede indeks tabanlı yöntem çağrıları (GetOCRResultBlockLineWordConfidence(resultId, b, l, w)) kullanılır. güven puanları nasıl yapılır yaygın kullanım senaryoları için yapılandırılmış erişim modelini gösterir.
Yapılandırılmış Veri ve Sonuç Erişimi
Kelime başına koordinatlar ve güven değerleri çıkarımı, belge anlama iş akışları için ortak bir gerekliliktir — fatura alanı çıkarımı, form işleme ve yerleşim analizinin hepsi buna ihtiyaç duyar.
GdPicture Yaklaşımı
GdPicture, resultId dizgesini RunOCR()'den döndürür ve tüm sonuç verileri o ID üzerinden GdPictureOCR örneği üzerindeki yöntem çağrıları aracılığıyla sorgulanır. Kelime başına güvene ulaşmak, üç iç içe seviyeyi yinelemeyi gerektirir:
using GdPicture14;
public List<(string word, float confidence)> GetWordConfidences(int imageId)
{
var words = new List<(string, float)>();
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
int blockCount = _ocr.GetOCRResultBlockCount(resultId);
for (int b = 0; b < blockCount; b++)
{
int lineCount = _ocr.GetOCRResultBlockLineCount(resultId, b);
for (int l = 0; l < lineCount; l++)
{
int wordCount = _ocr.GetOCRResultBlockLineWordCount(resultId, b, l);
for (int w = 0; w < wordCount; w++)
{
string word = _ocr.GetOCRResultBlockLineWordText(resultId, b, l, w);
float conf = _ocr.GetOCRResultBlockLineWordConfidence(resultId, b, l, w);
words.Add((word, conf));
}
}
}
return words;
}
using GdPicture14;
public List<(string word, float confidence)> GetWordConfidences(int imageId)
{
var words = new List<(string, float)>();
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
int blockCount = _ocr.GetOCRResultBlockCount(resultId);
for (int b = 0; b < blockCount; b++)
{
int lineCount = _ocr.GetOCRResultBlockLineCount(resultId, b);
for (int l = 0; l < lineCount; l++)
{
int wordCount = _ocr.GetOCRResultBlockLineWordCount(resultId, b, l);
for (int w = 0; w < wordCount; w++)
{
string word = _ocr.GetOCRResultBlockLineWordText(resultId, b, l, w);
float conf = _ocr.GetOCRResultBlockLineWordConfidence(resultId, b, l, w);
words.Add((word, conf));
}
}
}
return words;
}
Imports GdPicture14
Public Function GetWordConfidences(imageId As Integer) As List(Of (word As String, confidence As Single))
Dim words As New List(Of (String, Single))()
_ocr.SetImage(imageId)
_ocr.Language = "eng"
Dim resultId As String = _ocr.RunOCR()
Dim blockCount As Integer = _ocr.GetOCRResultBlockCount(resultId)
For b As Integer = 0 To blockCount - 1
Dim lineCount As Integer = _ocr.GetOCRResultBlockLineCount(resultId, b)
For l As Integer = 0 To lineCount - 1
Dim wordCount As Integer = _ocr.GetOCRResultBlockLineWordCount(resultId, b, l)
For w As Integer = 0 To wordCount - 1
Dim word As String = _ocr.GetOCRResultBlockLineWordText(resultId, b, l, w)
Dim conf As Single = _ocr.GetOCRResultBlockLineWordConfidence(resultId, b, l, w)
words.Add((word, conf))
Next
Next
Next
Return words
End Function
Bu yanlış değil — veri erişilebilir. Ancak, kelime düzeyinde verilere ihtiyaç duyan her proje için sonuç yapısına üç boyutlu bir indeks yerleştirmeyi anlamayı ve sürdürmeyi gerektirir.
IronOCR Yaklaşımı
OcrResult, .Words'u yazılmış bir koleksiyon olarak sunar. LINQ, doğrudan ona karşı çalışır:
using IronOcr;
var result = new IronTesseract().Read("invoice.jpg");
// All words with position and confidence
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P0}");
}
// Lines, paragraphs, and pages follow the same pattern
foreach (var line in result.Lines)
Console.WriteLine(line.Text);
foreach (var page in result.Pages)
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} characters");
using IronOcr;
var result = new IronTesseract().Read("invoice.jpg");
// All words with position and confidence
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P0}");
}
// Lines, paragraphs, and pages follow the same pattern
foreach (var line in result.Lines)
Console.WriteLine(line.Text);
foreach (var page in result.Pages)
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} characters");
Imports IronOcr
Dim result = New IronTesseract().Read("invoice.jpg")
' All words with position and confidence
For Each word In result.Words
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) — {word.Confidence:P0}")
Next
' Lines, paragraphs, and pages follow the same pattern
For Each line In result.Lines
Console.WriteLine(line.Text)
Next
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}: {page.Text.Length} characters")
Next
Bölge tabanlı OCR — bir belgenin tanımlanmış bir dikdörtgeninden metin çıkarımı — benzer şekilde doğrudandır:
var region = new CropRectangle(0, 0, 600, 100); // header area
using var input = new OcrInput();
input.LoadImage("invoice.jpg", region);
var headerText = new IronTesseract().Read(input).Text;
var region = new CropRectangle(0, 0, 600, 100); // header area
using var input = new OcrInput();
input.LoadImage("invoice.jpg", region);
var headerText = new IronTesseract().Read(input).Text;
Imports IronOcr
Dim region As New CropRectangle(0, 0, 600, 100) ' header area
Using input As New OcrInput()
input.LoadImage("invoice.jpg", region)
Dim headerText As String = New IronTesseract().Read(input).Text
End Using
sonuçları okuma rehberi ve bir görüntünün bölgesel OCR rehberi, bu desenlerin çok sayfalı belgelere ve yapılandırılmış alan çıkarımı iş akışlarına nasıl genişletildiğini gösterir.
API Eşleme Başvurusu
| GdPicture.NET | IronOCR Karşılığı |
|---|---|
LicenseManager.RegisterKEY("key") |
IronOcr.License.LicenseKey = "key" |
new GdPictureImaging() |
Gerekli değil — dahili olarak ele alındı |
new GdPictureOCR() |
new IronTesseract() |
new GdPicturePDF() |
Gerekli değil — OcrInput.LoadPdf() bunu halleder |
ocr.ResourceFolder = path |
Gerekli değil — NuGet içinde kaynaklar paketlenmiş |
imaging.CreateGdPictureImageFromFile(path) |
input.LoadImage(path) üzerinde OcrInput |
imaging.ReleaseGdPictureImage(imageId) |
using var input = new OcrInput() — otomatik |
ocr.SetImage(imageId) |
Gerekli değil — OcrInput görüntüyü tutar |
ocr.Language = "eng" |
ocr.Language = OcrLanguage.English |
ocr.RunOCR() → resultId |
ocr.Read(input) → OcrResult |
ocr.GetOCRResultText(resultId) |
result.Text |
ocr.GetOCRResultConfidence(resultId) |
result.Confidence |
ocr.GetOCRResultBlockLineWordText(resultId, b, l, w) |
result.Words[i].Text |
ocr.GetOCRResultBlockLineWordConfidence(resultId, b, l, w) |
result.Words[i].Confidence |
pdf.LoadFromFile(path, false) → GdPictureStatus |
input.LoadPdf(path) — hata durumunda fırlatır |
pdf.LoadFromFile(path, password) |
input.LoadPdf(path, Password: password) |
pdf.RenderPageToGdPictureImage(200, false) |
Gerekli değil —IronOCR dahili olarak işler |
pdf.SelectPage(i) |
Gerekli değil — tüm sayfalar varsayılan olarak işlenir |
pdf.GetPageCount() |
Gerekli değil — veya result.Pages.Count |
pdf.OcrPage("eng", resourcePath, "", 200) |
result.SaveAsSearchablePdf(outputPath) |
pdf.SaveToFile(outputPath, true) |
result.SaveAsSearchablePdf(outputPath) |
imaging.GetStat() / ocr.GetStat() |
Standart .NET istisnaları |
Her çağrıdan sonra GdPictureStatus.OK kontrolü |
Gerekli değil — istisnalar normal şekilde yayılır |
using GdPicture14; |
using IronOcr; |
Ekipler GdPicture.NET'ten IronOCR'a Geçmeyi Düşündüğünde
Tek Gereklilik OCR
Belgeleri alma hatları kuran ekipler — taranmış faturaları, tıbbi formları işleyen, sözleşme metnini çıkaran — genellikle GdPicture'i LEADTOOLS ve Kofax yanında kurumsal yazılım dizinlerinde göründüğü için değerlendirirler. Eklenti bağımlılık tablosu netleştiğinde, resim değişir. PDF Giriş gerekiyorsa PDF Eklentisi isteğe bağlı değildir. Ön işleme gerekiyorsa Belge Görüntüleme Eklentisi isteğe bağlı değildir.Hizalamadüzeltmesi ile taranmış PDF'lerden OCR yapması gereken bir ekip, önemli Profesyonel giriş maliyeti ile üç eklenti lisansı ile sonuçlanır. Gereksinim metin çıkarımı olduğunda ve GdPicture özellik listesinde bunun ötesinde hiçbir şey gerekmediğinde, bu fiyatlandırma saf bir üstlenilen yükü temsil eder.IronOCR$2,999 Professional, aynı iş akışını kapsar — görüntü girişi, PDF girişi, ön işleme, aranabilir PDF çıktısı — tek bir paketten, karar almanız gereken eklentisiz.
Üretimde Bellek Sızıntısı Olayları
Tam sayı ID yaşam döngüsü, yüksek verimli belge işleme hizmetlerinde bir üretim olayı olmaya hazır. Yük altında yüklenmiş PDF'leri işleyen bir web API uç noktası, görüntü serbest bırakma çağrısının ulaşılmadığı bir kod yolu olacaktır — bir hata dalında erken dönüş, temizlik bloğundan önce gönderilmemiş bir istisna veya sadece desene aşina olmayan yeni bir geliştirici, bir tam sayı görüntü tanıtıcısını parametre olarak alan ve serbest bırakmayı unutan bir yardımcı yöntem ekler. Bellek artar, hizmet yavaşlar ve kök sebep yığın dökümünde belirgin değildir. Bu olaylardan birini çözen ekipler, çalışma zamanının temizlik işlemelerini yönettiği bir model isteyebilir. IronOCR'de, standart eşya bırakma deseni, her çağrı noktasında geliştirici disiplini yerine derleyici tarafından uygulanan yapısal temizliktir.
Sürüm Yükseltme Sürtüşmesi
GdPicture, ana sürüm numarasını ad alanında gömülü tutar. 14. versiyondan 15. versiyona bir yükseltme, GdPicture sınıflarına referans yapan her kaynak dosyasında o ad alanı direktifini güncellemeyi gerektirir. OCR, PDF işleme ve görüntü işleme, düzinelerce hizmet ve yardımcı sınıfta yayılmış büyük bir uygulamada, bu azımsanmayacak bir göç görevidir — ve işlevsel fayda sağlamaz. Microsoft.EntityFrameworkCore'dan Newtonsoft.Json'a kadar her modern .NET kütüphanesi, versiyon duyarsız ad alanları kullanır ve sürüm yönetimini NuGet paket sürüm numarasına göre yönetir.IronOCR bu geleneği takip eder: aynı ad alanı ithalatı versiyon 1'den güncel sürüme kadar geçerlidir.
Mikro hizmet ve Konteyner Dağıtımı
GdPicture OCR, belirli bir yolun çalışma zamanında mevcut olan dil veri dosyalarını içeren harici bir kaynak klasörü gerektirir. Konteynere bağımlı bir dağıtımda, bu, o dosyalarıDockergörüntüsüne gömmek, bir hacmi montajlamak veya onları indiren bir başlangıç betiği yapılandırmak anlamına gelir. Tipik sonuç, gerekli olmayan birkaç yüz megabayt daha büyük birDockergörüntüsü, gözden kaçırılan bir dağıtım kontrol listesi maddesi ve hacim monte edilmediğinde temiz konteyner yeniden başlatmalarda üretim hatalarıdır. IronOCR, İngilizce desteğini paketin içine paketler; ek diller, derleme çıktısının bir parçası olan NuGet paketleri olarak kurulur. Konteyner, ihtiyaç duyulanları geri yükleme adımından alır ve yapılandırılacak yollar yoktur. Docker dağıtım rehberi ve Linux dağıtım rehberi, her hedef ortam için özel yapılandırmayı kapsar.
Belge Görüntüleme Uzmanlığı Olmayan Geliştirme Ekipleri
GdPicture'nin yüzey alanı, bir zorunluluk olarak büyüktür — tam bir belge görüntüleme platformunu kaplar. OCR mikservisini sürdürmek için bir ekibe katılan bir geliştirici için, görüntüleme bileşenini, OCR bileşenini, PDF bileşenini, tam sayı ID yaşam döngüsünü, durum dönüş kodu işlemeyi ve kaynak klasör konfigürasyonunu anlamak, başlangıçta zorlayıcı bir yatırımdır. IronOCR'nin OCR için yüzey alanı üç sınıftır: motor, giriş kabı ve sonuç nesnesi. Bu, kullanım durumlarının %90'ı için tüm zihinsel modeldir. Yeni bir geliştiriciyi işe almak, onları IronTesseract ayarlama'ya yönlendirmek, çok modüllü bir SDK rehberine değil.
Genel Geçiş Dikkat Edilmesi Gereken Hususlar
Bileşen Başlatmayı Değiştirme
GdPicture, dört adımlı bir başlatma dizisi gerektirir: LicenseManager üzerinden lisans anahtarını kaydedin, GdPictureImaging başlatın, GdPictureOCR başlatın ve kaynak klasör yolunu ayarlayın.IronOCR bunu, Program.cs veya Startup.cs ait tek bir özellik atamasına indirir:
// Remove
LicenseManager lm = new LicenseManager();
lm.RegisterKEY("GDPICTURE-LICENSE-KEY");
_imaging = new GdPictureImaging();
_ocr = new GdPictureOCR();
_ocr.ResourceFolder = @"C:\GdPicture\Resources\OCR";
// Replace with
IronOcr.License.LicenseKey = "IRONOCR-LICENSE-KEY";
// IronTesseract instances are instantiated per-use or as a singleton
// Remove
LicenseManager lm = new LicenseManager();
lm.RegisterKEY("GDPICTURE-LICENSE-KEY");
_imaging = new GdPictureImaging();
_ocr = new GdPictureOCR();
_ocr.ResourceFolder = @"C:\GdPicture\Resources\OCR";
// Replace with
IronOcr.License.LicenseKey = "IRONOCR-LICENSE-KEY";
// IronTesseract instances are instantiated per-use or as a singleton
' Remove
Dim lm As New LicenseManager()
lm.RegisterKEY("GDPICTURE-LICENSE-KEY")
_imaging = New GdPictureImaging()
_ocr = New GdPictureOCR()
_ocr.ResourceFolder = "C:\GdPicture\Resources\OCR"
' Replace with
IronOcr.License.LicenseKey = "IRONOCR-LICENSE-KEY"
' IronTesseract instances are instantiated per-use or as a singleton
Görüntü ID Takibinin Ortadan Kaldırılması
Her CreateGdPictureImageFromFile çağrısı ve her RenderPageToGdPictureImage çağrısının mevcut kod tabanında bir yerlerde karşılık gelen bir ReleaseGdPictureImage çağrısı vardır.IronOCR içinde bu temizlik çağrıları tamamen kaldırılmıştır — OcrInput görüntünün yok edilmeyi halleder. Geçiş mekaniğidir: her int imageId = ...'i bulun, eşleşen ReleaseGdPictureImage(imageId)'i bulun, yükleme kodunu using var input = new OcrInput()'a sarın ve GdPicture yöntem çağrılarınıIronOCR eşdeğerleriyle değiştirin.
// Remove
int imageId = _imaging.CreateGdPictureImageFromFile(path);
if (imageId == 0) throw new Exception(_imaging.GetStat().ToString());
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
if (string.IsNullOrEmpty(resultId)) throw new Exception(_ocr.GetStat().ToString());
string text = _ocr.GetOCRResultText(resultId);
_imaging.ReleaseGdPictureImage(imageId);
// Replace with
using var input = new OcrInput();
input.LoadImage(path);
var result = new IronTesseract().Read(input);
string text = result.Text;
// Remove
int imageId = _imaging.CreateGdPictureImageFromFile(path);
if (imageId == 0) throw new Exception(_imaging.GetStat().ToString());
_ocr.SetImage(imageId);
_ocr.Language = "eng";
string resultId = _ocr.RunOCR();
if (string.IsNullOrEmpty(resultId)) throw new Exception(_ocr.GetStat().ToString());
string text = _ocr.GetOCRResultText(resultId);
_imaging.ReleaseGdPictureImage(imageId);
// Replace with
using var input = new OcrInput();
input.LoadImage(path);
var result = new IronTesseract().Read(input);
string text = result.Text;
Imports System
' Remove
Dim imageId As Integer = _imaging.CreateGdPictureImageFromFile(path)
If imageId = 0 Then Throw New Exception(_imaging.GetStat().ToString())
_ocr.SetImage(imageId)
_ocr.Language = "eng"
Dim resultId As String = _ocr.RunOCR()
If String.IsNullOrEmpty(resultId) Then Throw New Exception(_ocr.GetStat().ToString())
Dim text As String = _ocr.GetOCRResultText(resultId)
_imaging.ReleaseGdPictureImage(imageId)
' Replace with
Using input As New OcrInput()
input.LoadImage(path)
Dim result = New IronTesseract().Read(input)
Dim text As String = result.Text
End Using
Hata İşlemeyi Uyarlama
GdPicture, her önemli işlemden sonra kontrol edilen GdPictureStatus dönüş kodlarını kullanır. IronOCR, standart .NET istisnalarını fırlatır. Geçiş, if (status != GdPictureStatus.OK) korumalarını, OCR'ye özgü hatalar için IronOcr.Exceptions.OcrException işleyen try/catch blokları ve giriş hataları için standart IOException ve FileNotFoundException ile değiştirir. görüntülerden metin okuma öğreticisi, yaygın senaryolar için hata işleme desenlerini kapsar.
Dil Paketi Dağıtımı
GdPicture dil dosyaları, bir dosya sistemi klasöründeki .traineddata dosyalarıdır.IronOCR dil paketleri, NuGet paketleridir. Göç, kaynak klasörünü dağıtım manifestosundan kaldırır ve her gerekli dil için NuGet paket referansları ekler:
# Remove filesystem dependency for each language
# Add NuGet package instead
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.ChineseSimplified
# Remove filesystem dependency for each language
# Add NuGet package instead
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.ChineseSimplified
Birden fazla dil kılavuzu, hem birincil hem de ikincil dillerin IronTesseract örneğinde belirtildiği çok dilli belgeler için yapılandırmayı kapsar.
Ek IronOCR Yetenekleri
Bu karşılaştırmada kapsanan alanların ötesinde, IronOCR, saf OCR bağlamında doğrudan GdPicture eşdeğerleri olmayan özellikler içerir:
- Async OCR — ASP.NET Core istek işleyicilerinde ve arka plan hizmetlerinde engelleyici olmayan çalışma için
ReadAsync - Sayfa döndürme tespiti — döndürülmüş sayfaların manuel ön işleme gerektirmeden otomatik tespiti ve düzeltilmesi
- İlerleme takibi — uzun süreli toplu işler için UI ilerleme çubuklarına açılan geri arama tabanlı ilerleme olayları
- Akış girişi —
input.LoadImage(stream)doğrudanSystem.IO.Streamkabul eder, geçici dosya yazmalarından kaçınılır - Özelleşmiş belge okuma — aynı
IronTesseractarayüzü üzerinden pasaportlar, plaka numaraları, MICR çekleri ve el yazısı metinler için amaca yönelik işleme.
.NET Uyumluluğu ve Geleceğe Hazırlık
IronOCR, .NET 8, .NET 9, .NET Standard 2.0 ve daha sonraki sürümlerde .NET Framework 4.6.2'yi hedef alır. Tek NuGet paketi, Windows x64, Windows x86,Linuxx64 ve macOS'a identik olarak dağıtılır. GdPicture.NET ayrıca çapraz platform hedeflerini destekler, ancak onun eklenti mimarisi,Linuxve konteyner dağıtımlarının her eklentinin yerel bağımlılıklarını ayrı ayrı hesaba katmasını gerektirir. IronOCR'un isim alanı, tüm önemli sürüm değişikliklerinde IronOcr kalmıştır ve bu da yükseltme yollarının kod tabanı genelinde bul-ve-değiştir işlemleri gerektirmediği anlamına gelir. 2026'nın sonlarında .NET 10 geldiğinde, IronOCR'nin ardışık .NET sürümleri arasında API değişiklikleri olmadan uyumluluğu sürdürme geçmişi, uzun bakım döngüleri olan uygulamalar için kararlı bir temel sağlar.
Sonuç
GdPicture.NET, tek bir satıcıdan bir SDK'da tarayıcı entegrasyonu, PDF düzenleme, ek açıklama, DICOM desteği ve OCR'ı birleştiren konsolide bir belge görüntüleme platformuna ihtiyaç duyan ekipler için meşru bir seçimdir. Bu kullanım durumu vardır. Eklenti modeli, bu yeteneklerin çoğunun gerçekten kapsam içinde olduğu durumlarda anlam kazanır.
Uygunsuzluk, gereklilik OCR olduğunda ve cevap GdPicture olduğunda ortaya çıkar. PDF Eklentisi, PDF'den OCR kullanım durumu için ayrılmaz. Belge Görüntüleme Eklentisi, ön işleme ile ayrılmaz. Tam sayı ID yaşam döngüsü, isteğe bağlı değildir — tüm SDK için temel kaynak yönetimi modeli budur. Taralı PDF'lerden metin çıkarması gereken bir ekip, bu karmaşıklığın ve tüm bu maliyetin tümünü absorbsiyon eder ve ek yeteneklerin hiçbiri, iş yükleri için bunu haklı çıkarmaz.
Birden fazla yıl süren fiyat farkı, tek bir geliştiricinin Profesyonel iş akışında dikkate değer olabilir. Kod karmaşıklığı farkı ölçülebilir: temel OCR için temizlikle 25+ satır yerine bir satır. Çalışma farkı — dış kaynak klasörleri, sürüme özgü ad alanları, çok bileşenli başlatma — satır sayısından ziyade devreye alma sürtünmesi ve işe alım süresi olarak ortaya çıkar, ancak gerçektir.
IronOCR $2,999 süresiz, aynı temel OCR sonuçlarını verir — görüntü metin çıkarma, taranan PDF işleme, aranabilir PDF çıktısı, 125+ dil, güven skoru, yapılandırılmış veri erişimi — ve sürdürülmesi için özel bir SDK bilgisi gerektirmeyen standart .NET desenleri aracılığıyla. OCR'nin amaç olduğu ve daha geniş bir belge yönetim platformunun bir bileşeni olmadığı ekipler için bu daha uygun bir uyum sağlar.
Sıkça Sorulan Sorular
GdPicture.NET OCR nedir?
GdPicture.NET OCR, geliştiriciler ve işletmeler tarafından görüntülerden 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.
.NET geliştiricileri için IronOCR, GdPicture.NET OCR ile nasıl karşılaştırılır?
IronOCR, IronTesseract'ı temel motoru olarak kullanan bir NuGet yerli .NET OCR kütüphanesidir. GdPicture.NET OCR'ye kıyasla, daha basit bir dağıtım (herhangi bir SDK yükleyici yok), sabit fiyatlandırma ve COM ara yüzde ya da bulut bağımlılıkları olmadan temiz bir C# API sunar.
IronOCR, GdPicture.NET OCR'den daha mı kolay kurulabilir?
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.
GdPicture.NET OCR ile IronOCR arasında hangi doğruluk farkları vardır?
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.
GdPicture.NET OCR lisanslaması ile IronOCR'yi 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, GdPicture.NET'ten farklı olarak Docker ve konteynerize 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.
GdPicture.NET karşısında IronOCR'yi 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.
GdPicture.NET OCR'den IronOCR'ye geçiş yapmak kolay mı?
GdPicture.NET OCR'den IronOCR'ye geçiş genellikle başlangıç dizilerini IronTesseract oluşturma 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şler, kod karmaşıklığını önemli ölçüde azaltır.

