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

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

Ç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 paketidotnet add package IronOcr her şeyi, İngilizce dil desteği dahil, yükler; dış kaynak klasörleri, yerel ikili yönetimi yok
  • Standart .NET kaynak yönetimiOcrInput IDisposable uygular; Bir using ifadesi, 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.ForEach ek 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şimiOcrResult .Pages, .Lines, .Words, .Characters ve .Barcodes koordinat 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
$vbLabelText   $csharpLabel

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

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

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

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

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

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

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

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

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

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

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
SHELL

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şiinput.LoadImage(stream) doğrudan System.IO.Stream kabul eder, geçici dosya yazmalarından kaçınılır
  • Özelleşmiş belge okuma — aynı IronTesseract arayü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.

Lütfen dikkate alınGdPicture.NET, Kofax OmniPage, LEADTOOLS ve Tesseract, ilgili sahiplerinin tescilli markalarıdır. Bu site, Apryse, Google, Kofax, LEAD Technologies, Nutrient veya ORPALIS ile bağlantılı, onaylanmış veya sponsorlu değil. 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

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.

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