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

AWS vs Google Vision (OCR Özellikleri Karşılaştırması)

Dynamsoft Etiket Tanıyıcı, bir şeyi olağanüstü şekilde iyi yapar — pasaportlardan MRZ çıkarma, araçlardan VIN tarama ve endüstriyel ambalajlardan yapılandırılmış etiket okuma — ve başka bir şey yapmayı reddeder. Bu dar uzmanlık, uygulamanız genel belge OCR'yi yanında gerektirdiği anda bir bütçe sorunu olur çünkü bu durumda MRZ için Dynamsoft Etiket Tanıyıcı, QR kodları için Dynamsoft Barkod Okuyucu, kenar algılama için Dynamsoft Belge Normalleştirici lisanslıyor ve hala tam sayfa belgeleri işlemek için dördüncü bir kütüphane arıyorsunuz. IronOCR tüm bu yetenekleri tek bir NuGet paketinde, $999 süresiz olarak kapsar.

Dynamsoft Etiket Tanıyıcıyı Anlamak

Kanada, Vancouver merkezli Dynamsoft Corporation, Etiket Tanıma ürününü, kısıtlı formatlarda makine tarafından okunabilir yapılandırılmış metinlerin güvenilir şekilde tanınması üzerine inşa etti. Ürün NuGet paketi Dynamsoft.DotNet.LabelRecognizer ve ticari lisansı yalnızca yıllık abonelikler üzerine çalışır — süresiz seçeneği yoktur. Mevcut fiyatlar için Dynamsoft ile iletişime geçin.

Kütüphanenin tanıma modeli şablon tabanlıdır. Tanıma görevlerini bir JSON ayarları API'si (AppendSettingsFromString) aracılığıyla yapılandırırsınız ve ardından görüntü dosyalarına karşı RecognizeFile veya RecognizeByFile çağırırsınız. Sonuçlar, ham metin dizelerini içeren satır sonuçları koleksiyonu olarak geri gelir. Bu dizeleri, anlamlı yapılandırılmış veriler — alan konumları, tarih dönüşümleri, kontrol rakamı doğrulama — haritalamak tamamen sizin sorumluluğunuzdadır.

Dynamsoft Etiket Tanıma'nın ana mimari özellikleri:

  • Şablon tabanlı tanıma motoru: MRZ, VIN ve etiket desenleri tanıma öncesinde JSON şablonu yapılandırması gerektirir
  • Yalnızca ham metin çıktısı: RecognizeFile metin dizgileri ile LineResult nesneleri döndürür; yapısal alan ayrıştırma yok
  • Sadece görüntü girişi: Yerel PDF desteği yoktur; PDF'ler işlem öncesi görüntülere dönüştürülmelidir
  • Yıllık abonelik lisanslama: Cihaz başına ve sunucu başına katmanlar mevcut; Mevcut fiyatlar için Dynamsoft ile iletişime geçin; no one-time purchase
  • Kabiliyet başına ayrı ürün: Barkod okuma, belge normalleştirme ve kamera optimizasyonu ayrı lisanslı bir ürün gerektirir
  • Sınırlı dil kapsama alanı: Latin karakter MRZ formatlarına odaklanılmış; geniş çok dilli belge desteği eksikliği

JSON Çalışma Zamanı Ayarları API'si

Her Dynamsoft Etiket Tanıma iş akışı bir şablon yapılandırma adımıyla başlar. Örneğin MRZ tanıma, herhangi bir görüntü işleme başlamadan önce tanıma parametrelerini, karakter modellerini ve bölge referanslarını açıklayan bir JSON belgesinin yüklenmesini gerektirir:

using Dynamsoft.DLR;

public class DynamsoftMrzService : IDisposable
{
    private readonly LabelRecognizer _recognizer;

    public DynamsoftMrzService(string licenseKey)
    {
        // Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey);
        _recognizer = new LabelRecognizer();

        // MRZ requires specific template configuration loaded as JSON
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _recognizer.AppendSettingsFromString(mrzTemplate);
    }

    public string ExtractRawMrz(string passportImagePath)
    {
        var results = _recognizer.RecognizeFile(passportImagePath);

        // Returns raw MRZ text lines only — no field parsing
        var mrzLines = new StringBuilder();
        foreach (var result in results)
        {
            foreach (var lineResult in result.LineResults)
            {
                mrzLines.AppendLine(lineResult.Text);
            }
        }
        return mrzLines.ToString().Trim();
    }

    public void Dispose() => _recognizer?.Dispose();
}
using Dynamsoft.DLR;

public class DynamsoftMrzService : IDisposable
{
    private readonly LabelRecognizer _recognizer;

    public DynamsoftMrzService(string licenseKey)
    {
        // Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey);
        _recognizer = new LabelRecognizer();

        // MRZ requires specific template configuration loaded as JSON
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _recognizer.AppendSettingsFromString(mrzTemplate);
    }

    public string ExtractRawMrz(string passportImagePath)
    {
        var results = _recognizer.RecognizeFile(passportImagePath);

        // Returns raw MRZ text lines only — no field parsing
        var mrzLines = new StringBuilder();
        foreach (var result in results)
        {
            foreach (var lineResult in result.LineResults)
            {
                mrzLines.AppendLine(lineResult.Text);
            }
        }
        return mrzLines.ToString().Trim();
    }

    public void Dispose() => _recognizer?.Dispose();
}
Imports Dynamsoft.DLR
Imports System.Text

Public Class DynamsoftMrzService
    Implements IDisposable

    Private ReadOnly _recognizer As LabelRecognizer

    Public Sub New(licenseKey As String)
        ' Static license initialization — must precede instance creation
        LabelRecognizer.InitLicense(licenseKey)
        _recognizer = New LabelRecognizer()

        ' MRZ requires specific template configuration loaded as JSON
        Dim mrzTemplate As String = "{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }"
        _recognizer.AppendSettingsFromString(mrzTemplate)
    End Sub

    Public Function ExtractRawMrz(passportImagePath As String) As String
        Dim results = _recognizer.RecognizeFile(passportImagePath)

        ' Returns raw MRZ text lines only — no field parsing
        Dim mrzLines As New StringBuilder()
        For Each result In results
            For Each lineResult In result.LineResults
                mrzLines.AppendLine(lineResult.Text)
            Next
        Next
        Return mrzLines.ToString().Trim()
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _recognizer?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

RecognizeFile çıktısı, P<GBRSMITH<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<<< gibi ham MRZ metnidir. Surname = "SMITH", GivenNames = "JOHN", DocumentNumber, DateOfBirth ve ExpiryDate'yi yazılmış özellikler olarak almak için kendiniz bir TD1/TD2/TD3 ayrıştırıcı uygulamalısınız. Bu depodaki Dynamsoft belgeleri ve kaynak dosyaları, ayraçta yaklaşık 150 satır ayrıştırma kodu öngörür — karakter öteleme, << isim ayırıcılar, iki haneli yıl belirsizliği giderme ve kontrol basamağı doğrulaması — bunların hiçbiri Dynamsoft tarafından sağlanmamaktadır.

IronOCR'u Anlamak

IronOCR, optimize edilmiş bir Tesseract 5 motoru üzerine kurulu ve ön işleme, giriş formatları, yapılandırılmış çıktı ve özel belge çözümleme işlemlerini yönetem bir API tabakası ile ticari bir .NET OCR kütüphanesidir. Kurulum tek bir NuGet komutudur: dotnet add package IronOcr. Yerel ikili yönetim yok, tessdata klasör ayarlaması yok, şablon yapılandırma dosyaları yok.

Anahtar özellikler:

  • Genel amaçlı ve özelistemli: Tam sayfa belge OCR işlemleri, çok sayfalı PDF dosyaları, taralı görüntü grupları ve aynı paketten (pasaportlar, barkodlar, plaka) uzmanlaşmış formatlar ele alır
  • Otomatik ön işleme hattı: Eğimsizleştirme, Gürültü Giderme, Kontrast, İkili haline getirme ve Çözünürlüğü geliştirme kalitesi düşük girdiler üzerinde elle yapılandırma olmadan çalışır
  • Yerel PDF desteği: Diğer dönüşüm adımları olmadan doğrudan taralı ve dijital PDF'leri okuyun, parola korumalı dosyalar dahil
  • Yapılandırılmış çıktı hiyerarşisi: Sonuçlar sayfalar, paragraflar, satırlar, kelimeler ve karakter sınır kutularını güven puanlarıyla açığa çıkarır
  • Yerleşik barkod okuma: ocr.Configuration.ReadBarCodes = true etkinleştirin ve barkodlar aynı geçişte metnin yanında çıkarılır
  • 125+ dil paketleri: Her bir dil ayrı bir NuGet paketi olarak kurulur; tessdata klasör yönetimi gerekliliği yok
  • Süresiz lisanslama: $999 Lite, $1,499 Plus, $2,999 Professional — tek seferlik satın alma, tüm platformlar, tüm özellikler dahil
  • Çoklu platform dağıtımı: Windows, Linux, macOS, Docker, AWS ve Azure tümü ek platforma özgü yapılandırma olmadan aynı paketten çalışır

Özellik Karşılaştırması

Özellik Dynamsoft Etiket Tanıyıcı IronOCR
Genel belge OCR Desteklenmiyor Tam destek
MRZ çıkarma Uzmanlaşmış (ham metin) Dahili ile ayrılmış alanlar
Yerel PDF girişi Desteklenmiyor Evet
Barkod okuma Ayrı ürün (Dynamsoft Barkod Okuyucu) Yerleşik (ReadBarCodes)
Aranabilir PDF çıktısı Desteklenmiyor Evet
Dil desteği Sınırlı (Latin MRZ) 125+ dil
Lisanslama modeli Sadece yıllık abonelik Kalıcı + abonelik seçenekleri
Tam kapsam için gerekli ürünler 3+ 1

Ayrıntılı Özellik Karşılaştırması

Özellik Dynamsoft Etiket Tanıyıcı IronOCR
Tanıma Kapsamı
Genel belge OCR Desteklenmiyor Evet
MRZ tanıma Uzmanlaşmış Evet (ReadPassport)
VIN tanıma Uzmanlaşmış Evet (standart OCR ile)
Endüstriyel etiket okuma Uzmanlaşmış Evet
El Yazısı tanıma Desteklenmiyor Evet
Tablo çıkartma Desteklenmiyor Evet
Giriş Biçimleri
Görüntü dosyaları (JPG, PNG, TIFF) Evet Evet
PDF (yerel) Desteklenmiyor Evet
Şifre korumalı PDF Desteklenmiyor Evet
Bayt dizisi / akış Evet Evet
Çok sayfalı belgeler Manuel toplama Evet (yerel)
Çıktı Formatları
Düz metin Evet (ham hatlar) Evet
Yapılandırılmış alanlar (çözümleme) Sağlanmadı Evet (Sayfalar, Satırlar, Kelimeler)
Aranabilir PDF Desteklenmiyor Evet
hOCR Desteklenmiyor Evet
Güven skoru Satır başına Kelime, satır ve sayfa başına
Ön işlem
Otomatik ön işlem Temel Evet (akıllı hat)
Eğimsizleştirme / dönüş düzeltme Sınırlı Evet
Gürültü giderme Sınırlı Evet
Kontrast artırma Sınırlı Evet
DPI normalizasyonu Sağlanmadı Evet
Entegrasyon Kabiliyeti
Barkod okuma Ayrı ürün Yerleşik
Belge normalizasyonu Ayrı ürün Gerekli değil
Bölge bazlı OCR Evet (şablonlar aracılığıyla) Evet (CropRectangle)
Thread-safe paralel işleme Evet Evet
Platform ve Uygulama
Windows Evet Evet
Linux Evet Evet
macOS Evet Evet
Docker Evet Evet
Azure / AWS Evet Evet
İzole / çevrimdışı Evet Evet
Lisanslama ve Maliyet
Yıllık abonelik Evet (fiyatlandırma için Dynamsoft ile iletişime geçin) Opsiyonel
Süresiz lisans Mevcut değil Evet ($999 tek seferlik)
Tüm özellikler için tek paket Hayır (3+ ürün) Evet
Ücretsiz deneme 30 gün Evet

Uzman vs. Genelci Kapsamı

Dynamsoft'un aldığı en önemli mimari karar, bir uzman inşa edip bir genelci değil, bu karardır. Bu karar, MRZ veya etiket okuma ile başlayan ancak sonunda daha fazlasına ihtiyaç duyan herhangi bir uygulama için doğrudan sonuçlar doğurur.

Dynamsoft Yaklaşımı

Dynamsoft Etiket Tanıyıcısı, JSON şablonlarının tanımladığı şeyi ve bunun ötesinde hiçbir şeyi ele almıyor. Dynamsoft üzerine inşa edilmiş bir pasaport işleme uygulaması, gerçek dünya belge iş akışını yönetmeden önce üç ürün gerektirir:

// Dynamsoft passport processing — MULTIPLE PRODUCTS REQUIRED

using Dynamsoft.DLR;  // Label Recognizer — for MRZ (annual subscription)
using Dynamsoft.DBR;  // Barcode Reader — for any barcodes (additional license)
// Plus: a separate OCR library — for full page text (more budget)

public class DynamsoftPassportProcessor : IDisposable
{
    private readonly LabelRecognizer _mrzRecognizer;
    private readonly BarcodeReader _barcodeReader;
    // private readonly SomeOtherOcrLibrary _fullTextOcr;  // third product

    public DynamsoftPassportProcessor(
        string mrzLicenseKey,
        string barcodeLicenseKey)
    {
        // License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey);
        _mrzRecognizer = new LabelRecognizer();

        // Configure MRZ template — JSON required before any recognition
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate);

        // Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();
    }

    public PassportResult ProcessPassport(string imagePath)
    {
        // Step 1: MRZ çıkarma— raw text only, no field parsing
        var mrzResults = _mrzRecognizer.RecognizeFile(imagePath);
        var mrzText = new StringBuilder();
        foreach (var r in mrzResults)
            foreach (var line in r.LineResults)
                mrzText.AppendLine(line.Text);

        // Step 2: Parse MRZ manually — your 150-line TD3 parser here
        var parsedMrz = ParseMrzManually(mrzText.ToString());

        // Step 3: Barcodes — second product, second API
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);

        // Step 4: Full page text — THIRD library, no Dynamsoft option
        // var fullText = _fullTextOcr.ReadImage(imagePath);

        return new PassportResult
        {
            ParsedMrz = parsedMrz,
            Barcodes = barcodeResults.Select(b => b.BarcodeText).ToList(),
            FullPageText = null  // requires a fourth product
        };
    }

    public void Dispose()
    {
        _mrzRecognizer?.Dispose();
        _barcodeReader?.Dispose();
    }
}
// Dynamsoft passport processing — MULTIPLE PRODUCTS REQUIRED

using Dynamsoft.DLR;  // Label Recognizer — for MRZ (annual subscription)
using Dynamsoft.DBR;  // Barcode Reader — for any barcodes (additional license)
// Plus: a separate OCR library — for full page text (more budget)

public class DynamsoftPassportProcessor : IDisposable
{
    private readonly LabelRecognizer _mrzRecognizer;
    private readonly BarcodeReader _barcodeReader;
    // private readonly SomeOtherOcrLibrary _fullTextOcr;  // third product

    public DynamsoftPassportProcessor(
        string mrzLicenseKey,
        string barcodeLicenseKey)
    {
        // License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey);
        _mrzRecognizer = new LabelRecognizer();

        // Configure MRZ template — JSON required before any recognition
        string mrzTemplate = @"{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }";
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate);

        // Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();
    }

    public PassportResult ProcessPassport(string imagePath)
    {
        // Step 1: MRZ çıkarma— raw text only, no field parsing
        var mrzResults = _mrzRecognizer.RecognizeFile(imagePath);
        var mrzText = new StringBuilder();
        foreach (var r in mrzResults)
            foreach (var line in r.LineResults)
                mrzText.AppendLine(line.Text);

        // Step 2: Parse MRZ manually — your 150-line TD3 parser here
        var parsedMrz = ParseMrzManually(mrzText.ToString());

        // Step 3: Barcodes — second product, second API
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);

        // Step 4: Full page text — THIRD library, no Dynamsoft option
        // var fullText = _fullTextOcr.ReadImage(imagePath);

        return new PassportResult
        {
            ParsedMrz = parsedMrz,
            Barcodes = barcodeResults.Select(b => b.BarcodeText).ToList(),
            FullPageText = null  // requires a fourth product
        };
    }

    public void Dispose()
    {
        _mrzRecognizer?.Dispose();
        _barcodeReader?.Dispose();
    }
}
Imports Dynamsoft.DLR  ' Label Recognizer — for MRZ (annual subscription)
Imports Dynamsoft.DBR  ' Barcode Reader — for any barcodes (additional license)
' Plus: a separate OCR library — for full page text (more budget)

Public Class DynamsoftPassportProcessor
    Implements IDisposable

    Private ReadOnly _mrzRecognizer As LabelRecognizer
    Private ReadOnly _barcodeReader As BarcodeReader
    ' Private ReadOnly _fullTextOcr As SomeOtherOcrLibrary  ' third product

    Public Sub New(mrzLicenseKey As String, barcodeLicenseKey As String)
        ' License each product independently
        LabelRecognizer.InitLicense(mrzLicenseKey)
        _mrzRecognizer = New LabelRecognizer()

        ' Configure MRZ template — JSON required before any recognition
        Dim mrzTemplate As String = "{
            ""LabelRecognizerParameterArray"": [{
                ""Name"": ""MRZ_Passport"",
                ""ReferenceRegionNameArray"": [""FullImage""],
                ""CharacterModelName"": ""MRZ""
            }]
        }"
        _mrzRecognizer.AppendSettingsFromString(mrzTemplate)

        ' Second product, second license key
        BarcodeReader.InitLicense(barcodeLicenseKey)
        _barcodeReader = New BarcodeReader()
    End Sub

    Public Function ProcessPassport(imagePath As String) As PassportResult
        ' Step 1: MRZ çıkarma— raw text only, no field parsing
        Dim mrzResults = _mrzRecognizer.RecognizeFile(imagePath)
        Dim mrzText = New StringBuilder()
        For Each r In mrzResults
            For Each line In r.LineResults
                mrzText.AppendLine(line.Text)
            Next
        Next

        ' Step 2: Parse MRZ manually — your 150-line TD3 parser here
        Dim parsedMrz = ParseMrzManually(mrzText.ToString())

        ' Step 3: Barcodes — second product, second API
        Dim barcodeResults = _barcodeReader.DecodeFile(imagePath)

        ' Step 4: Full page text — THIRD library, no Dynamsoft option
        ' Dim fullText = _fullTextOcr.ReadImage(imagePath)

        Return New PassportResult With {
            .ParsedMrz = parsedMrz,
            .Barcodes = barcodeResults.Select(Function(b) b.BarcodeText).ToList(),
            .FullPageText = Nothing  ' requires a fourth product
        }
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _mrzRecognizer?.Dispose()
        _barcodeReader?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Yukarıdaki kod hala PDF girdisini ele almıyor. Pasaport taraması bir JPEG yerine PDF olarak gelirse, bunun çalışması için bir PDF işleme kütüphanesi eklersiniz. Gerçek bir pasaport iş akışı için toplam entegrasyon: dört ürün, dört lisans anahtarı, dört bakım yüzeyi.

IronOCR Yaklaşımı

IronOCR, tek bir paket içerisinde aynı pasaport iş akışını — MRZ ayrıştırma, tam sayfa OCR, barkodlar ve PDF girişi — ele alır:

using IronOcr;

public class IronOcrPassportProcessor
{
    private readonly IronTesseract _ocr;

    public IronOcrPassportProcessor()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes included
    }

    public CompletePassportResult ProcessPassport(string imagePath)
    {
        // Structured MRZ fields — no manual parsing required
        var mrzData = _ocr.ReadPassport(imagePath);

        // Full page OCR + barcodes in the same call
        var fullResult = _ocr.Read(imagePath);

        return new CompletePassportResult
        {
            // MRZ fields are already parsed properties
            DocumentType    = mrzData.DocumentType,
            IssuingCountry  = mrzData.IssuingCountry,
            Surname         = mrzData.Surname,
            GivenNames      = mrzData.GivenNames,
            PassportNumber  = mrzData.DocumentNumber,
            Nationality     = mrzData.Nationality,
            DateOfBirth     = mrzData.DateOfBirth,
            ExpiryDate      = mrzData.ExpiryDate,
            RawMrz          = mrzData.MRZ,

            // Full page text from same package
            FullPageText    = fullResult.Text,

            // Barcodes alongside text — no separate product
            Barcodes        = fullResult.Barcodes.Select(b => b.Value).ToList(),

            Confidence      = fullResult.Confidence
        };
    }
}
using IronOcr;

public class IronOcrPassportProcessor
{
    private readonly IronTesseract _ocr;

    public IronOcrPassportProcessor()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes included
    }

    public CompletePassportResult ProcessPassport(string imagePath)
    {
        // Structured MRZ fields — no manual parsing required
        var mrzData = _ocr.ReadPassport(imagePath);

        // Full page OCR + barcodes in the same call
        var fullResult = _ocr.Read(imagePath);

        return new CompletePassportResult
        {
            // MRZ fields are already parsed properties
            DocumentType    = mrzData.DocumentType,
            IssuingCountry  = mrzData.IssuingCountry,
            Surname         = mrzData.Surname,
            GivenNames      = mrzData.GivenNames,
            PassportNumber  = mrzData.DocumentNumber,
            Nationality     = mrzData.Nationality,
            DateOfBirth     = mrzData.DateOfBirth,
            ExpiryDate      = mrzData.ExpiryDate,
            RawMrz          = mrzData.MRZ,

            // Full page text from same package
            FullPageText    = fullResult.Text,

            // Barcodes alongside text — no separate product
            Barcodes        = fullResult.Barcodes.Select(b => b.Value).ToList(),

            Confidence      = fullResult.Confidence
        };
    }
}
Imports IronOcr

Public Class IronOcrPassportProcessor
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
        _ocr.Configuration.ReadBarCodes = True ' barcodes included
    End Sub

    Public Function ProcessPassport(imagePath As String) As CompletePassportResult
        ' Structured MRZ fields — no manual parsing required
        Dim mrzData = _ocr.ReadPassport(imagePath)

        ' Full page OCR + barcodes in the same call
        Dim fullResult = _ocr.Read(imagePath)

        Return New CompletePassportResult With {
            ' MRZ fields are already parsed properties
            .DocumentType = mrzData.DocumentType,
            .IssuingCountry = mrzData.IssuingCountry,
            .Surname = mrzData.Surname,
            .GivenNames = mrzData.GivenNames,
            .PassportNumber = mrzData.DocumentNumber,
            .Nationality = mrzData.Nationality,
            .DateOfBirth = mrzData.DateOfBirth,
            .ExpiryDate = mrzData.ExpiryDate,
            .RawMrz = mrzData.MRZ,

            ' Full page text from same package
            .FullPageText = fullResult.Text,

            ' Barcodes alongside text — no separate product
            .Barcodes = fullResult.Barcodes.Select(Function(b) b.Value).ToList(),

            .Confidence = fullResult.Confidence
        }
    End Function
End Class
$vbLabelText   $csharpLabel

Tek paket, tek lisans anahtarı, tek API. Pasaport okuma rehberi ve barkod okuma özelliği için,IronOCR belgeleri her iki durumu da aynı ürün bağlamında ele alır çünkü bunlar aynı üründür.

Çoklu-Ürün Maliyet ve Karmaşıklığı

Bir depo envanteri tarayıcısı oluşturmak, maliyet modeli sapmasını en açık bir şekilde gösteriyor. Sistem ürün etiketlerini (metin) okumalı, barkodları (QR/EAN) taramalı ve ekli gönderim PDF'lerini işlemelidir. Dynamsoft ile bu, ayrı ayrı lisanslanmış üç ürün ve ayrı ayrı başlatma desenleri anlamına gelir.

Dynamsoft Yaklaşımı

// Dynamsoft warehouse scanner — THREE products, THREE license keys

using Dynamsoft.DLR;  // Label Recognizer — product labels
using Dynamsoft.DBR;  // Barcode Reader — product barcodes
using Dynamsoft.DDN;  // Document Normalizer — document edge detection

public class DynamsoftWarehouseScanner : IDisposable
{
    private readonly LabelRecognizer _labelRecognizer;
    private readonly BarcodeReader _barcodeReader;
    private readonly DocumentNormalizer _documentNormalizer;

    public DynamsoftWarehouseScanner(
        string labelLicenseKey,
        string barcodeLicenseKey,
        string documentLicenseKey)
    {
        LabelRecognizer.InitLicense(labelLicenseKey);
        _labelRecognizer = new LabelRecognizer();

        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();

        DocumentNormalizer.InitLicense(documentLicenseKey);
        _documentNormalizer = new DocumentNormalizer();
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // Three separate API calls, three result types to aggregate manually
        var labelResults   = _labelRecognizer.RecognizeFile(imagePath);
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);
        var docResults     = _documentNormalizer.Normalize(imagePath);

        // Merge three result sets into one model — your code
        return AggregateResults(labelResults, barcodeResults, docResults);
    }

    public void Dispose()
    {
        _labelRecognizer?.Dispose();
        _barcodeReader?.Dispose();
        _documentNormalizer?.Dispose();
    }
}
// Dynamsoft warehouse scanner — THREE products, THREE license keys

using Dynamsoft.DLR;  // Label Recognizer — product labels
using Dynamsoft.DBR;  // Barcode Reader — product barcodes
using Dynamsoft.DDN;  // Document Normalizer — document edge detection

public class DynamsoftWarehouseScanner : IDisposable
{
    private readonly LabelRecognizer _labelRecognizer;
    private readonly BarcodeReader _barcodeReader;
    private readonly DocumentNormalizer _documentNormalizer;

    public DynamsoftWarehouseScanner(
        string labelLicenseKey,
        string barcodeLicenseKey,
        string documentLicenseKey)
    {
        LabelRecognizer.InitLicense(labelLicenseKey);
        _labelRecognizer = new LabelRecognizer();

        BarcodeReader.InitLicense(barcodeLicenseKey);
        _barcodeReader = new BarcodeReader();

        DocumentNormalizer.InitLicense(documentLicenseKey);
        _documentNormalizer = new DocumentNormalizer();
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // Three separate API calls, three result types to aggregate manually
        var labelResults   = _labelRecognizer.RecognizeFile(imagePath);
        var barcodeResults = _barcodeReader.DecodeFile(imagePath);
        var docResults     = _documentNormalizer.Normalize(imagePath);

        // Merge three result sets into one model — your code
        return AggregateResults(labelResults, barcodeResults, docResults);
    }

    public void Dispose()
    {
        _labelRecognizer?.Dispose();
        _barcodeReader?.Dispose();
        _documentNormalizer?.Dispose();
    }
}
Imports Dynamsoft.DLR  ' Label Recognizer — product labels
Imports Dynamsoft.DBR  ' Barcode Reader — product barcodes
Imports Dynamsoft.DDN  ' Document Normalizer — document edge detection

Public Class DynamsoftWarehouseScanner
    Implements IDisposable

    Private ReadOnly _labelRecognizer As LabelRecognizer
    Private ReadOnly _barcodeReader As BarcodeReader
    Private ReadOnly _documentNormalizer As DocumentNormalizer

    Public Sub New(labelLicenseKey As String, barcodeLicenseKey As String, documentLicenseKey As String)
        LabelRecognizer.InitLicense(labelLicenseKey)
        _labelRecognizer = New LabelRecognizer()

        BarcodeReader.InitLicense(barcodeLicenseKey)
        _barcodeReader = New BarcodeReader()

        DocumentNormalizer.InitLicense(documentLicenseKey)
        _documentNormalizer = New DocumentNormalizer()
    End Sub

    Public Function ScanItem(imagePath As String) As WarehouseItemResult
        ' Three separate API calls, three result types to aggregate manually
        Dim labelResults = _labelRecognizer.RecognizeFile(imagePath)
        Dim barcodeResults = _barcodeReader.DecodeFile(imagePath)
        Dim docResults = _documentNormalizer.Normalize(imagePath)

        ' Merge three result sets into one model — your code
        Return AggregateResults(labelResults, barcodeResults, docResults)
    End Function

    Public Sub Dispose() Implements IDisposable.Dispose
        _labelRecognizer?.Dispose()
        _barcodeReader?.Dispose()
        _documentNormalizer?.Dispose()
    End Sub
End Class
$vbLabelText   $csharpLabel

Gönderim PDF'leri hala dördüncü bir ürün gerektiriyor — Dynamsoft'un yerel PDF OCR'si yok. Üç Dynamsoft ürünü için yıllık lisanslama, sunucu başına katmanda: $5,997+/yıl. Bir PDF kütüphanesi ekleyin ve henüz iş mantığı yazılmadan önce $6,300+/yılda olursunuz.

IronOCR Yaklaşımı

using IronOcr;

public class IronOcrWarehouseScanner
{
    private readonly IronTesseract _ocr;

    public IronOcrWarehouseScanner()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes in same pass
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // One call: text + barcodes + structured word positions
        var result = _ocr.Read(imagePath);

        return new WarehouseItemResult
        {
            AllText    = result.Text,
            Barcodes   = result.Barcodes.Select(b => new BarcodeInfo
                         { Format = b.Format.ToString(), Value = b.Value }).ToList(),
            Confidence = result.Confidence
        };
    }

    public string ScanLabelRegion(string imagePath, int x, int y, int width, int height)
    {
        // Target a specific label area — no template JSON required
        var region = new CropRectangle(x, y, width, height);
        using var input = new OcrInput();
        input.LoadImage(imagePath, region);
        input.Deskew();
        input.Contrast();

        return _ocr.Read(input).Text;
    }

    public string ProcessShipmentPdf(string pdfPath)
    {
        // Native PDF — no external library, no page conversion loop
        return _ocr.Read(pdfPath).Text;
    }
}
using IronOcr;

public class IronOcrWarehouseScanner
{
    private readonly IronTesseract _ocr;

    public IronOcrWarehouseScanner()
    {
        _ocr = new IronTesseract();
        _ocr.Configuration.ReadBarCodes = true;  // barcodes in same pass
    }

    public WarehouseItemResult ScanItem(string imagePath)
    {
        // One call: text + barcodes + structured word positions
        var result = _ocr.Read(imagePath);

        return new WarehouseItemResult
        {
            AllText    = result.Text,
            Barcodes   = result.Barcodes.Select(b => new BarcodeInfo
                         { Format = b.Format.ToString(), Value = b.Value }).ToList(),
            Confidence = result.Confidence
        };
    }

    public string ScanLabelRegion(string imagePath, int x, int y, int width, int height)
    {
        // Target a specific label area — no template JSON required
        var region = new CropRectangle(x, y, width, height);
        using var input = new OcrInput();
        input.LoadImage(imagePath, region);
        input.Deskew();
        input.Contrast();

        return _ocr.Read(input).Text;
    }

    public string ProcessShipmentPdf(string pdfPath)
    {
        // Native PDF — no external library, no page conversion loop
        return _ocr.Read(pdfPath).Text;
    }
}
Imports IronOcr

Public Class IronOcrWarehouseScanner
    Private ReadOnly _ocr As IronTesseract

    Public Sub New()
        _ocr = New IronTesseract()
        _ocr.Configuration.ReadBarCodes = True ' barcodes in same pass
    End Sub

    Public Function ScanItem(imagePath As String) As WarehouseItemResult
        ' One call: text + barcodes + structured word positions
        Dim result = _ocr.Read(imagePath)

        Return New WarehouseItemResult With {
            .AllText = result.Text,
            .Barcodes = result.Barcodes.Select(Function(b) New BarcodeInfo With {
                .Format = b.Format.ToString(),
                .Value = b.Value
            }).ToList(),
            .Confidence = result.Confidence
        }
    End Function

    Public Function ScanLabelRegion(imagePath As String, x As Integer, y As Integer, width As Integer, height As Integer) As String
        ' Target a specific label area — no template JSON required
        Dim region = New CropRectangle(x, y, width, height)
        Using input As New OcrInput()
            input.LoadImage(imagePath, region)
            input.Deskew()
            input.Contrast()

            Return _ocr.Read(input).Text
        End Using
    End Function

    Public Function ProcessShipmentPdf(pdfPath As String) As String
        ' Native PDF — no external library, no page conversion loop
        Return _ocr.Read(pdfPath).Text
    End Function
End Class
$vbLabelText   $csharpLabel

Bölge bazlı OCR belgeleri ve PDF girişi rehberi için,IronOCR bunların her ikisini de ek ürün olmadan kapsar.

Dağıtım Modeli

Her iki kütüphane de yerinde çalışır ve belge verilerinin bulut yoluyla iletimi yoktur. Temel dağıtım farkları arasında başlatma desenleri, yapılandırma dosyası yönetimi ve her kütüphanenin dağıtım eşyasına eklendiği şeyler yer alır.

Dynamsoft Yaklaşımı

Dynamsoft, herhangi bir örnek oluşturmadan önce SDK sınıfında statik başlatma çağrıları gerektirir. Her ürünün kendi başlatma deseni vardır ve lisans anahtarı yalnızca o belirli ürünü etkinleştirir. Etiket Tanıyıcı ve Barkod Okuyucu içeren bir dağıtım, iki aktivasyon akışını, iki şablon setini ve iki Dispose zincirini yönetir.

Depo veya kiosk dağıtımları için, yapılandırma dosyası bağımlılığı ikili dosyaların ötesinde ekstra bir dağıtım eşyası ekler. JSON şablonları ayrı dosyalardır, pakete derlenmemiştir. Yeni bir sunucudaki şablon yolunu yanlış yapılandırırsanız, tanıma sessizce boş sonuçlar döndürür veya AppendSettingsFromString çağrısı sırasında çalışma zamanında hata verir.

IronOCR Yaklaşımı

IronOCR, tek bir NuGet paketi olarak dağıtılır. Lisans etkinleştirmek için tek satırlık bir dize ataması:

// Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
' Application startup — one line, works for all features
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
$vbLabelText   $csharpLabel

Şablon dosyası yok. Yerel ikili yönetimi yok. Tessdata klasörü yok. Docker dağıtım kılavuzu, Linux'ta sadece libgdiplus gerektirir — Dockerfile'da bir apt-get install satırı.

FROM mcr.microsoft.com/dotnet/aspnet:8.0
RUN apt-get update && apt-get install -y libgdiplus
COPY --from=build /app/publish /app
WORKDIR /app
ENTRYPOINT ["dotnet", "YourApp.dll"]

Aynı paket, Linux, AWS Lambda ve Azure App Service için platforma özgü yapılandırma olmadan destekler. CI/CD hatlarını çalıştıran ekipler için, sürüm kontrolü veya ayrı dağıtımı yapılacak şablon dosyaları yoktur.

API Eşleme Başvurusu

Dynamsoft Etiket Tanıyıcı IronOCR Karşılığı
LabelRecognizer.InitLicense(key) IronOcr.License.LicenseKey = key
new LabelRecognizer() new IronTesseract()
_recognizer.AppendSettingsFromString(json) Gerekli değil — motor otomatik yapılandırılmış
_recognizer.RecognizeFile(path) ocr.Read(path)
_recognizer.RecognizeByFile(path, "") ocr.Read(path)
result.LineResults[i].Text result.Lines[i].Text
Manuel TD3 MRZ ayrıştırıcı (150+ satır) ocr.ReadPassport(path).Surname vb.
BarcodeReader.InitLicense(key) (ayrı ürün) ocr.Configuration.ReadBarCodes = true
_barcodeReader.DecodeFile(path) result.Barcodes (OCR ile aynı çağrı)
barcode.BarcodeFormatString barcode.Format.ToString()
barcode.BarcodeText barcode.Value
DocumentNormalizer.InitLicense(key) (ayrı ürün) Gerekli değil
PDF desteği yok ocr.Read("document.pdf")
Aranabilir PDF çıktısı yok result.SaveAsSearchablePdf(path)
recognizer.Dispose() using var ocr = new IronTesseract()

Takımlar Ne Zaman IronOCR'a Geçmeyi Düşünür

Uygulama Kapsamı MRZ veya Etiketlerin Ötesine Geçiyor

Göçlerin çoğu, bir proje dar başlayıp — "sadece pasaport MRZ'sini oku" — daha sonra ürün gereksinimleri geldiğinde olur. Müşteri, taranan pasaportları aranabilir PDF'ler olarak arşivlemek ister. Uyum ekibi, vize damgalarını OCR ile okumak istiyor. Destek kuyruğunda, Dynamsoft'un işleyemediği PDF'ler ile ilgili biletler vardır. O noktada, takım MRZ için Dynamsoft'u ve diğer her şey için ikinci bir OCR kütüphanesini sürdürmektedir. İki lisans sözleşmesi, iki bakım yolu, aynı kod tabanında iki API deseni. IronOCR, orijinal MRZ gereksinimini ReadPassport() ve genişletilmiş gereksinimleri aynı IronTesseract örneği aracılığıyla işler. İki kütüphane sisteminden tek paket haline geçen ekipler, entegrasyon katmanı kodunda %30-40 azalma bildirmektedir.

Yıllık Abonelik Maliyetleri Sürdürülebilir Değil

Çoklu ürün Dynamsoft lisanslama maliyetleri her yıl birikir — mevcut fiyatlandırma için Dynamsoft ile iletişime geçin. Birçok yıl boyunca, birden çok ürün için birleştirilmiş yıllık abonelik ücretleri IronOCR'ın $999 tek seferlik maliyetini önemli ölçüde aşabilir. Süresiz lisanslama modeli, ticari ömrü belirli olan ürünler için en önemlisidir — yedi yıl çalışacak bir devlet belge işleme sistemi, bir çekirdek bileşen için özel bir tedarikçiye yıllık yenileme bağımlılığı istemez.

PDF Girdisi Gerekiyor

Dynamsoft Etiket Tanıyıcısı, yerel PDF desteğine sahip değil. PDF olarak teslim edilen her belge, bir ön işleme adımı gerektirir: her sayfayı bir görüntüye işleyin, görüntüyü Dynamsoft üzerinden geçirin, sonuçları toplayın ve yeniden birleştirin. Bu boru hattı, bir PDF işleme bağımlılığı, bir sayfa yineleme döngüsü ve tanıma sonuçlarını orijinal PDF geometrisine ilişkilendirmek istiyorsanız bir koordinat eşleme problemleri ekler.IronOCR yerel olarak PDF'leri okur — ocr.Read("passport-scans.pdf") her sayfayı işler ve result.Pages size sayfa başına metin, kelimeler ve güven puanlarına erişim sağlar. %20 veya daha fazlası PDF olarak gelen ekipler için, Dynamsoft geçici çözümü, PDF işleme kütüphanesi her güncellendiğinde anlamlı bir bakım yükü ekler.

Çoklu-Ürün Entegrasyon Vergisi Çok Yüksek

Her ek Dynamsoft ürünü ayrı bir statik başlatma çağrısı, ayrı bir Dispose zinciri ve yönetilecek ayrı bir JSON yapılandırma dosyasıdır. Üç Dynamsoft ürünü entegre etmiş ekipler, entegrasyon yüzeyinin birincil bakım maliyeti olduğunu rapor etmektedir — tanıma kalitesi değil. Lisans anahtarı rotasyonu, SDK sürüm yükseltmeleri ve şablon dosya dağıtımı, aynı anda tüm üç ürün arasında koordine edilmelidir. IronOCR'un tek paket modeli, kaç OCR yeteneğine sahip olursa olsun, uygulamada kullanılacak bir sürümü yükseltmek, bir lisans anahtarını döndürmek ve bir API yüzeyini sürdürmek anlamına gelir.

Uluslararası Belge Türleri Gerekiyor

Dynamsoft Etiket Tanıyıcısı, ICAO Doc 9303'e göre Latin karakter MRZ formatları etrafında inşa edilmiştir. CJK dil kimlik belgelerini, Arapça karakter pasaportları veya çok dilli gönderim etiketlerini işleyen uygulamalar dil kapsamı sınırlarına hızlıca ulaşır. IronOCR, 125'ten fazla dil paketi gönderir — Arapça, Çince Basitleştirilmiş, Çince Geleneksel, Japonca, Korece ve daha fazlası. Her biri tanıma kodunu değiştirmeden dotnet add package IronOcr.Languages.Arabic üzerinden kurulur. çoklu diller rehberi, birkaç yapılandırma satırında eşzamanlı çok dilli tanımayı kapsar.

Genel Geçiş Dikkat Edilmesi Gereken Hususlar

MRZ Ayrıştırıcıyı Değiştirmek

En acil geçiş adımı, Dynamsoft RecognizeFile + el ile TD3 ayrıştırıcı kombinasyonunun ReadPassport ile değiştirilmesidir. Dynamsoft çıkış yolu, P<GBRSMITH<<JOHN<<<<<<<<<<<<<<<<<<<<<<<<<< gibi ham metin döndürür ve TD3 formatı için 150+ satır karakter kaydırma ayrıştırması gerektirir.IronOCR yedeği:

// Before: Dynamsoft raw extraction + manual 150-line parser
var results = _recognizer.RecognizeFile(imagePath);
var rawMrz = string.Join("\n", results.SelectMany(r => r.LineResults).Select(l => l.Text));
var parsed = MyTd3Parser.Parse(rawMrz);  // delete this file

// After:IronOCR parsed output directly
var passportData = new IronTesseract().ReadPassport(imagePath);
string surname  = passportData.Surname;
string docNum   = passportData.DocumentNumber;
DateTime? dob   = passportData.DateOfBirth;
// Before: Dynamsoft raw extraction + manual 150-line parser
var results = _recognizer.RecognizeFile(imagePath);
var rawMrz = string.Join("\n", results.SelectMany(r => r.LineResults).Select(l => l.Text));
var parsed = MyTd3Parser.Parse(rawMrz);  // delete this file

// After:IronOCR parsed output directly
var passportData = new IronTesseract().ReadPassport(imagePath);
string surname  = passportData.Surname;
string docNum   = passportData.DocumentNumber;
DateTime? dob   = passportData.DateOfBirth;
Imports System
Imports System.Linq

' Before: Dynamsoft raw extraction + manual 150-line parser
Dim results = _recognizer.RecognizeFile(imagePath)
Dim rawMrz = String.Join(vbCrLf, results.SelectMany(Function(r) r.LineResults).Select(Function(l) l.Text))
Dim parsed = MyTd3Parser.Parse(rawMrz)  ' delete this file

' After: IronOCR parsed output directly
Dim passportData = New IronTesseract().ReadPassport(imagePath)
Dim surname As String = passportData.Surname
Dim docNum As String = passportData.DocumentNumber
Dim dob As DateTime? = passportData.DateOfBirth
$vbLabelText   $csharpLabel

Manuel ayrıştırıcı tamamen silindi. TD1 (kimlik kartları), TD2 (vizeler) ve TD3 (pasaportlar) format algılaması ReadPassport içerisinde otomatik olarak yapılır. Pasaport okuma rehberi, her döndürülen alanı dokümante eder.

Çoklu-Ürün Başlatmayı Birleştirme

Dynamsoft çoklu ürün uygulamalarının başlangıçta birçok statik InitLicense çağrısı vardır, her biri kendi anahtarını gerektirir. Bunları tek bir IronOCR lisans satırında birleştirin ve ürün başına başlatma bloklarını kaldırın.

// Before: three static initializations
LabelRecognizer.InitLicense(mrzKey);
BarcodeReader.InitLicense(barcodeKey);
DocumentNormalizer.InitLicense(documentKey);

// After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // barcodes included automatically
// Before: three static initializations
LabelRecognizer.InitLicense(mrzKey);
BarcodeReader.InitLicense(barcodeKey);
DocumentNormalizer.InitLicense(documentKey);

// After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;  // barcodes included automatically
Imports System

' Before: three static initializations
LabelRecognizer.InitLicense(mrzKey)
BarcodeReader.InitLicense(barcodeKey)
DocumentNormalizer.InitLicense(documentKey)

' After: one line, all capabilities enabled
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")

Dim ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True  ' barcodes included automatically
$vbLabelText   $csharpLabel

Hizmet sınıflarındaki mevcut Dynamsoft Dispose çağrıları, using'daki standart using bloklarıyla veya DI konteynerinde kaydedilmiş tek bir yeniden kullanılan örnekle değiştirilmelidir. IronTesseract kurulum rehberi, her iki deseni de kapsar.

PDF Desteği Ekleme

En yaygın yeni yetenek, ekiplerin göç sırasında yerel PDF girişi elde ettiği bir şeydir — Dynamsoft'un asla sağlamadığı bir şeydir. PDF'den görüntüye dönüşüm döngüsünü kaldırdıktan sonra, yerel PDF okuması giriş yolunun ötesinde hiçbir kod değişikliği gerektirmez:

// Before: PDF rendering loop (50+ lines with external library)
var pdfDoc = PdfDocument.Load(pdfPath);
foreach (var page in pdfDoc.Pages)
{
    var bitmap = page.RenderAsBitmap(150);
    var results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap));
    // aggregate...
}

// After: native PDF — no loop, no external library
var result = new IronTesseract().Read(pdfPath);
string fullText = result.Text;
result.SaveAsSearchablePdf("searchable-output.pdf");
// Before: PDF rendering loop (50+ lines with external library)
var pdfDoc = PdfDocument.Load(pdfPath);
foreach (var page in pdfDoc.Pages)
{
    var bitmap = page.RenderAsBitmap(150);
    var results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap));
    // aggregate...
}

// After: native PDF — no loop, no external library
var result = new IronTesseract().Read(pdfPath);
string fullText = result.Text;
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronOcr

' Before: PDF rendering loop (50+ lines with external library)
Dim pdfDoc = PdfDocument.Load(pdfPath)
For Each page In pdfDoc.Pages
    Dim bitmap = page.RenderAsBitmap(150)
    Dim results = _labelRecognizer.RecognizeFile(SaveBitmapToTemp(bitmap))
    ' aggregate...
Next

' After: native PDF — no loop, no external library
Dim result = New IronTesseract().Read(pdfPath)
Dim fullText As String = result.Text
result.SaveAsSearchablePdf("searchable-output.pdf")
$vbLabelText   $csharpLabel

Ekiplerin taranan girdilerden aranabilir PDF arşivleri üretmesi gerekliyse, SaveAsSearchablePdf tek bir yöntem çağrısıdır. Aranabilir PDF rehberi, çıktı seçeneklerini detaylandırır.

Endüstriyel Etiket Kalitesi için Ön İşleme

Dynamsoft'un şablon motoru kontrol edilmiş etiket koşulları için optimize edilmiştir. Bozulmuş görüntüler için — yıpranmış etiketler, düşük kontrastlı ambalajlar, eğri endüstriyel taramalar — IronOCR'un ön işleme hattı açığı kapatır. Görüntü kalitesi düzeltme rehberi, her filtreyi kapsar. Etiket özgü iş akışları için Deskew ve Contrast en kullanışlı olanlardır:

using var input = new OcrInput();
input.LoadImage(labelImagePath);
input.Deskew();    // correct rotation from handheld scanner
input.Contrast();  // recover faded label text
input.DeNoise();   // remove packaging texture interference

var labelText = new IronTesseract().Read(input).Text;
Console.WriteLine($"Confidence: {new IronTesseract().Read(input).Confidence}%");
using var input = new OcrInput();
input.LoadImage(labelImagePath);
input.Deskew();    // correct rotation from handheld scanner
input.Contrast();  // recover faded label text
input.DeNoise();   // remove packaging texture interference

var labelText = new IronTesseract().Read(input).Text;
Console.WriteLine($"Confidence: {new IronTesseract().Read(input).Confidence}%");
Imports IronOcr

Using input As New OcrInput()
    input.LoadImage(labelImagePath)
    input.Deskew()    ' correct rotation from handheld scanner
    input.Contrast()  ' recover faded label text
    input.DeNoise()   ' remove packaging texture interference

    Dim labelText = New IronTesseract().Read(input).Text
    Console.WriteLine($"Confidence: {New IronTesseract().Read(input).Confidence}%")
End Using
$vbLabelText   $csharpLabel

Ek IronOCR Yetenekleri

Aşağıda belirtilen bölümlerde kapsanmayan ancak ekiplerin göçten sonra sıkça kullandığı özellikler:

  • El yazısı tanıma: El yazısı notları ve baskı metinleri yanında açıklamaları işlemek — Dynamsoft'un sunmadığı bir yetenek
  • Taranmış belge işleme: Her sayfa için otomatik ön işlemenin yapıldığı çok sayfalı taranmış PDF'ler
  • Tablo çıkarma: Faturalar, manifestolar ve veri sayfalarından tabular verileri algılamak ve çıkarmak
  • hOCR dışa aktarma: Tanıma sonuçlarını HTML olarak, aşağı akış yerleşim analizi için sınır kutusu koordinatlarıyla birlikte dışa aktarma
  • Async OCR: ASP.NET ve yüksek veri throughputlu sunucu uygulamaları için engellemesiz tanıma
  • İlerleme takibi: İlerleme geri çağrıları ile çok sayfalı yığın işleri izleme
  • 125+ dil dizini: Desteklenen dil NuGet paketlerinin tam listesi, Latin olmayan alfabeleri de içeren
  • MICR/çek okuma: Finansal belge işlemleri için manyetik mürekkep karakter tanıma — bir başka uzman kullanım durumu tek bir pakette ele alınmıştır
  • Kelime başına güven puanları: Otomatik belge inceleme hatları için ince ayrıntılı kalite sinyalleri

.NET Uyumluluğu ve Geleceğe Hazırlık

IronOCR, .NET 8 ve .NET 9'u öncelikli destekli çalışma zamanları hedefler, .NET Framework 4.6.2 ve .NET Core 3.1 ile tam geri uyumluluk ile. Kütüphane, doğru platform ikili dosyasınıWindowsx64,Windowsx86,Linuxx64,macOSx64 vemacOSARM için otomatik olarak çözen tek bir NuGet paketi olarak sevk edilir — hiçbir koşullu paket referansları, tüm platformlara özgü proje dosyası yok. Dynamsoft Etiket Tanıyıcısı, benzer şekilde modern .NET çalışma zamanlarını destekler, ancak çoklu ürün modeli her ürünün .NET uyumluluğunun bağımsız olarak doğrulanması ve güncellenmesi gerektiği anlamına gelir. IronOCR'un aktif geliştirme ritmi, her .NET sürüm döngüsüne uyumlu NuGet paket güncellemelerini korur ve tek paket modeli, .NET 10 uyumluluğunun, tüm özellikler üzerinde tek tip olarak hiçbir ürün başına izleme olmadan geçerli olacağı anlamına gelir.

Sonuç

Dynamsoft Etiket Tanıyıcısı, teknik açıdan yetenekli bir uzmandır. Sadece pasaport MRZ'yi işleyen bir kiosk ya da yalnızca VIN kodlarını okuyan bir montaj hattı istasyonu için, şablon odaklı tanıma motoru dar görevi güvenilir bir şekilde gerçekleştirir. Sorun, gerçek uygulamaların nadiren dar kalmasıdır. Pasaportlar, tüm veri sayfalarının OCR ile okunmasını gerektirir. Gönderi etiketleri PDF olarak gelir. Stok sistemleri, aynı geçişte barkod ve metne ihtiyaç duyar. Kapsamın her genişlemesi, başka bir Dynamsoft ürünü, başka bir yıllık lisans ve sürdürülmesi gereken başka bir API yüzeyi demektir.

Maliyet modeli bunu somutlaştırır. Dynamsoft'un yıllık abonelik modelini kullanan bir geliştirme ekibi içinde MRZ artı barkod okuyucu için çok yıllık toplamlar önemli ölçüde artar.IronOCR her iki yeteneği de kapsar — artı yerel PDF, aranabilir PDF çıktısı, tam belge OCR, 125+ dil ve ön işleme — $999 tek seferlik. Geçişin kendisi büyük ölçüde mekaniktir: RecognizeFile yerine ocr.Read değiştirin, el ile TD3 MRZ ayrıştırıcısını silin, ReadBarCodes = true etkinleştirin ve harici PDF işleme döngüsünü kaldırın.

Mimari fark sadece maliyetle ilgili değildir. Dynamsoft'un tasarımı, ekipleri ürünler yerine yetenekler açısından düşünmeye zorlar — herhangi bir kod yazmadan önce "Bu işlemi hangi Dynamsoft ürünü ele alır?" diye sormaya. IronOCR'un tasarımı bunu tersine çevirir: belgede ne olursa olsun, tek bir örnek, tek bir yapılandırma, tek bir sonuç nesnesi. Bu fark, bir projenin ömrü boyunca gereksinimler arttıkça bileşikleşir.

MRZ tanıma, barkod okuma, genel belge OCR veya PDF işleme kombinasyonunu ihtiyaç duyan yeşil alan uygulamaları inşa eden ekipler için, IronOCR'un hepsi-bir-arada modeli, başlangıçtan itibaren çoklu ürün koordinasyon problemi ortadan kaldırır. Ayrı bir OCR kütüphanesiyle birlikte çoklu Dynamsoft ürünü çalıştıran ekipler için, geçiş yolu bu yüzeyi tek bir bağımlılığa konsolide eder. IronOCR dökümantasyon merkezi, burada tartışılan her özelliği çalışan kod örnekleri ve dağıtım rehberleri ile kapsar.

Lütfen dikkate alınDynamsoft ve Tesseract, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site, Dynamsoft veya Google 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

Dynamsoft OCR SDK nedir?

Dynamsoft OCR SDK, 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, Dynamsoft OCR SDK ile nasıl karşılaştırılır?

IronOCR, IronTesseract'ı temel motoru olarak kullanan bir NuGet yerli .NET OCR kütüphanesidir. Dynamsoft OCR SDK'ya 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, Dynamsoft OCR SDK'dan 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.

Dynamsoft OCR SDK 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.

Dynamsoft OCR SDK 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, Dynamsoft OCR'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.

Dynamsoft OCR 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.

Dynamsoft OCR SDK'dan IronOCR'ye geçiş yapmak kolay mı?

Dynamsoft OCR SDK'dan 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