Altbilgi içeriğine atla
VIDEOLAR

Dynamsoft OCR'dan IronOCR'a Geçiş

Bu kılavuz, Dynamsoft Label Recognizer'dan IronOCR'a geçiş yapan .NET geliştiricileri için tam bir geçiş yolu sağlar. NuGet paket değişimini, ad alanı güncellemelerini, lisans başlangıcını ve genel yetenek kıyaslamalarından ayırt edilen senaryolar için pratik kod göçü örneklerini kapsar — şablon yapılandırma eliminasyonu, çalışma zamanı ayarları JSON'unun kaldırılması, bölge tanımı göçü ve sonuç ayrıştırma basitleştirmesi dahil.

Dynamsoft OCR'den Neden Taşınmalı

Dynamsoft Label Recognizer, amaca yönelik özel bir üründür. Bu hassasiyet, dar dağıtımlar için iyi çalışır ancak uygulama kapsamı orijinal MRZ veya VIN kullanım alanının ötesine geçtiğinde zorluk yaratır.

Çalışma Zamanı Ayarları JSON Bakım Yüzeyidir. Her Dynamsoft tanıma çalışma akışı, parametre dizilerini, karakter modellerini ve bölge referanslarını belirten bir JSON belgesi yükleyerek AppendSettingsFromString ile başlar. Bu JSON şablonları, ikili dosyanıza derlenmemiş, ayrı dağıtım yapıtlarıdır. Sürüm kontrolü, dağıtım hattı yönetimi ve Dynamsoft şablon şemalarını SDK sürümleri arasında değiştirdiğinde manuel güncellemeler gereken konular.IronOCRsıfır yapılandırma dosyası gerektirir: IronTesseract örneğini oluşturun, .Read() çağrısını yapın ve motor uygun ayarları otomatik olarak seçer.

Yıllık Abonelik Ücreti Yığıyor. Dynamsoft Label Recognizer, cihaz başına yıllık 599$+'dan lisanslanır. Süresiz bir seçenek yoktur. Beş cihazlık bir işleme kümesi yılda 2.995$+'ya mal olur — ve bu bütçe sadece MRZ ve yapılandırılmış etiket tanımayı kapsar. Dynamsoft Barcode Reader'ı barkodlar için veya kenar düzeltme için Dynamsoft Document Normalizer'ı ekleyin, ve yıllık fatura ürün sayısına göre artar. IronOCR'un Lite lisansı, genel OCR, yapılandırılmış etiketler, barkodlar, yerel PDF, aranabilir PDF çıktısı ve tek bir paketten 125+ dili kapsayan bir defaya mahsus $999 kullanım sunar.

Bölge Tanımı JSON Şablonları Gerektirir. Dynamsoft'ta tanıma bölgesi tanımlamak, bir ReferenceRegionArray JSON bloğu yazmak, bunu bir LabelRecognizerParameterArray içinde referanslamak ve görüntü işleme başlamadan önce tüm belgeyi yüklemek anlamına gelir. IronOCR, doğrudan OcrInput.LoadImage ile geçirilen tek bir CropRectangle(x, y, width, height) oluşturucusu kullanır. Bir bölgeyi değiştirmek bir numara düzenlemesidir, bir JSON belgesini yeniden analiz etmek değil.

Sonuç Ayrıştırması Tamamen Sizin Sorumluluğunuzdadır. RecognizeFile ve RecognizeByFile, ham metin dizeleri içeren LineResult dizileri döndürür. İhtiyacınız olan her yapı — alan offsetleri, tarih dönüşümleri, kontrol basamağı doğrulaması, ad ayırıcı işleme — bu ham çıktı üzerine kendi özel ayrıştırma kodunuzu gerektirir. IronOCR, sınır kutusu koordinatları, güven puanları ve yazı tipi meta verileri halihazırda doldurulmuş olarak .Pages, .Lines, .Words ve .Characters ile tiplenmiş koleksiyonları içeren bir OcrResult döndürür.

Yerel PDF Desteği Yaratıyor: Gizli Bir Bağımlılık. Dynamsoft Etiket TanıyıcıPDF giriş yeteneğine sahip değildir. İşleme hattınıza ulaşan herhangi bir PDF, her sayfayı bir bit haritasına işlemek için harici bir kütüphane gerektirir, bir sayfa yineleme döngüsü ve ilk Dynamsoft çağrısından önce bir sonuç toplama adımı gerektirir. IronOCR, PDF'leri yerel olarak okur: new IronTesseract().Read("document.pdf") her sayfayı ikincil bir bağımlılık, bir render döngüsü veya geçici bir görüntü klasörü olmadan işler.

Çok Ürünlü Başlatma Blokları Kapsamla Büyür. Yapılandırılmış etiketler, barkodlar ve belge normalizasyonunu ele alan bir Dynamsoft uygulaması, başlangıçta üç statik InitLicense çağrısı, üç elden çıkarma zinciri ve üç bağımsız SDK sürüm bağımlılığı taşır. SDK'yı yükseltmek, tüm ürünler arasında koordinasyon gerektirir. IronOCR, uygulamanın hangi yeteneklerini kullanırsa kullansın bir başlatma satırına ve bir paket sürümüne sahiptir.

Temel Sorun

Dynamsoft, tanıma başlamadan önce çalışma zamanında yüklenen bir JSON yapılandırma dosyası gerektirir:

// Dynamsoft: JSON template required before any image processing
LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();

string settings = @"{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""VIN_Label"",
        ""ReferenceRegionNameArray"": [""VinRegion""],
        ""CharacterModelName"": ""VIN""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""VinRegion"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [5, 40],
            ""SecondPoint"": [95, 40],
            ""ThirdPoint"":  [95, 60],
            ""FourthPoint"": [5, 60]
        }
    }]
}";

recognizer.AppendSettingsFromString(settings);  // fails silently if JSON is malformed
var results = recognizer.RecognizeFile(imagePath);
// Dynamsoft: JSON template required before any image processing
LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();

string settings = @"{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""VIN_Label"",
        ""ReferenceRegionNameArray"": [""VinRegion""],
        ""CharacterModelName"": ""VIN""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""VinRegion"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [5, 40],
            ""SecondPoint"": [95, 40],
            ""ThirdPoint"":  [95, 60],
            ""FourthPoint"": [5, 60]
        }
    }]
}";

recognizer.AppendSettingsFromString(settings);  // fails silently if JSON is malformed
var results = recognizer.RecognizeFile(imagePath);
' Dynamsoft: JSON template required before any image processing
LabelRecognizer.InitLicense(licenseKey)
Dim recognizer As New LabelRecognizer()

Dim settings As String = "{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""VIN_Label"",
        ""ReferenceRegionNameArray"": [""VinRegion""],
        ""CharacterModelName"": ""VIN""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""VinRegion"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [5, 40],
            ""SecondPoint"": [95, 40],
            ""ThirdPoint"":  [95, 60],
            ""FourthPoint"": [5, 60]
        }
    }]
}"

recognizer.AppendSettingsFromString(settings)  ' fails silently if JSON is malformed
Dim results = recognizer.RecognizeFile(imagePath)
$vbLabelText   $csharpLabel
// IronOCR: no JSON, no template files — region is a constructor argument
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

var region = new CropRectangle(x: 50, y: 400, width: 900, height: 200);
using var input = new OcrInput();
input.LoadImage(imagePath, region);

var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
// IronOCR: no JSON, no template files — region is a constructor argument
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

var region = new CropRectangle(x: 50, y: 400, width: 900, height: 200);
using var input = new OcrInput();
input.LoadImage(imagePath, region);

var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

' IronOCR: no JSON, no template files — region is a constructor argument
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"

Dim region As New CropRectangle(x:=50, y:=400, width:=900, height:=200)
Using input As New OcrInput()
    input.LoadImage(imagePath, region)

    Dim result = New IronTesseract().Read(input)
    Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

IronOCR ve Dynamsoft OCR: Özellik Karşılaştırması

Aşağıdaki tabloda iki kitaplık arasındaki tam yetenek farkı yer almaktadır.

Özellik Dynamsoft Etiket Tanıyıcı IronOCR
Genel belge OCR Desteklenmiyor Tam destek
MRZ tanıma Özel (ham metin çıktısı) Yerleşik yapılandırılmış alanlarla
VIN tanıma Özel (şablon gerekli) Standart OCR ile bölge hedefleme
Endüstriyel etiket okuma Özel (şablon gerekli) Evet, CropRectangle aracılığıyla
Çalışma Zamanı Ayarları Yapılandırması Gerekli (JSON AppendSettingsFromString aracılığıyla) Gerekli değil
Şablon Dağıtım Yapıtları Gerekli (JSON dosyaları) None
Yerel PDF girişi Desteklenmiyor Evet
Şifre korumalı PDF Desteklenmiyor Evet
Çok sayfalı TIFF girişi Manuel sayfa yinelemesi Yerel (LoadImageFrames)
Aranabilir PDF çıktısı Desteklenmiyor Evet (SaveAsSearchablePdf)
Barkod okuma Ayrı ürün (Dynamsoft Barkod Okuyucu) Yerleşik (ReadBarCodes = true)
Otomatik ön işlem Sınırlı Evet (Masa Üzeri, Gürültü Giderme, Kontrast, Binarizasyon, Keskinleştirme, Genişletme, Erozyon)
Yapılandırılmış çıktı (Kelimeler, Satırlar, Paragraflar) Ham LineResult metin dizeleri Koordinatlar ve güven puanı ile tamamen yazılı
Dil desteği Sınırlı (Latin MRZ) 125+ dil, NuGet paketleri olarak demetlenmiş
Çoklu dil aynı anda Desteklenmiyor Evet (OcrLanguage.French + OcrLanguage.German)
Güven skoru Sadece satır başına Kelime başına, satır başına, sayfa başına
hOCR içeri aktarma Desteklenmiyor Evet
Lisanslama modeli Yıllık abone ($599+/cihaz/yıl) Süresiz ($999 tek seferlik, Lite katmanı)
Birden fazla ürün gerekli Evet (tam kapsama için 3+) Hayır (bir paket)
.NET Framework desteği .NET Framework 4.x+ .NET Framework 4.6.2+, .NET 5/6/7/8/9
Çapraz platform dağıtımı Evet Evet (Windows, Linux, macOS, Docker, Azure, AWS)
NuGet paketi Dynamsoft.LabelRecognizer IronOcr

Hızlı Başlangıç: Dynamsoft OCR den IronOCR Geçişi

Adım 1: NuGet Paketini Değiştirin

Dynamsoft paketini kaldır:

dotnet remove package Dynamsoft.LabelRecognizer
dotnet remove package Dynamsoft.LabelRecognizer
SHELL

NuGet galerisi'nden IronOCR'u yükle:

dotnet add package IronOcr

Adım 2: Ad Alanlarını Güncelleyin

// Before (Dynamsoft)
using Dynamsoft.LabelRecognizer;
using Dynamsoft.Core;

// After (IronOCR)
using IronOcr;
// Before (Dynamsoft)
using Dynamsoft.LabelRecognizer;
using Dynamsoft.Core;

// After (IronOCR)
using IronOcr;
Imports IronOcr
$vbLabelText   $csharpLabel

Adım 3: Lisansa İzin Verin

Her Dynamsoft statik InitLicense çağrısını bir IronOCR lisans ataması ile değiştirin:

// Before (Dynamsoft — one call per product)
LabelRecognizer.InitLicense("DYNAMSOFT-LICENSE-KEY");

// After (IronOCR — one line, all features)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
// Before (Dynamsoft — one call per product)
LabelRecognizer.InitLicense("DYNAMSOFT-LICENSE-KEY");

// After (IronOCR — one line, all features)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
' Before (Dynamsoft — one call per product)
LabelRecognizer.InitLicense("DYNAMSOFT-LICENSE-KEY")

' After (IronOCR — one line, all features)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

Kod Göç Örnekleri

Şablon Tabanlı Tanımadan Sıfır Yapılandırmalı Motora Geçiş

Dynamsoft'un JSON şablon sistemi, SDK'ya herhangi bir görüntü işlenmeden önce karakter modelleri, bölge spesifikasyonları ve tanıma parametreleri hakkında ayrıntılı talimatlar verir. Çoğu gerçek dünya OCR iş yükü için, o yapılandırma tanıma faydası olmadan kurulum karmaşıklığı ekler, çünkü temel Tesseract motoru yerleşimi otomatik olarak algılar.

Dynamsoft Yaklaşımı:

using Dynamsoft.LabelRecognizer;
using Dynamsoft.Core;

// JSON template required before recognition
LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();

string invoiceTemplate = @"{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""Invoice_Header"",
        ""ReferenceRegionNameArray"": [""HeaderRegion""],
        ""CharacterModelName"": ""NumberLetter""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""HeaderRegion"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [0, 0],
            ""SecondPoint"": [100, 0],
            ""ThirdPoint"":  [100, 20],
            ""FourthPoint"": [0, 20]
        }
    }]
}";

recognizer.AppendSettingsFromString(invoiceTemplate);

var results = recognizer.RecognizeFile("invoice.jpg");
var headerText = new StringBuilder();
foreach (var result in results)
    foreach (var line in result.LineResults)
        headerText.AppendLine(line.Text);

Console.WriteLine(headerText.ToString());
recognizer.Dispose();
using Dynamsoft.LabelRecognizer;
using Dynamsoft.Core;

// JSON template required before recognition
LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();

string invoiceTemplate = @"{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""Invoice_Header"",
        ""ReferenceRegionNameArray"": [""HeaderRegion""],
        ""CharacterModelName"": ""NumberLetter""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""HeaderRegion"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [0, 0],
            ""SecondPoint"": [100, 0],
            ""ThirdPoint"":  [100, 20],
            ""FourthPoint"": [0, 20]
        }
    }]
}";

recognizer.AppendSettingsFromString(invoiceTemplate);

var results = recognizer.RecognizeFile("invoice.jpg");
var headerText = new StringBuilder();
foreach (var result in results)
    foreach (var line in result.LineResults)
        headerText.AppendLine(line.Text);

Console.WriteLine(headerText.ToString());
recognizer.Dispose();
Imports Dynamsoft.LabelRecognizer
Imports Dynamsoft.Core
Imports System.Text

' JSON template required before recognition
LabelRecognizer.InitLicense(licenseKey)
Dim recognizer As New LabelRecognizer()

Dim invoiceTemplate As String = "{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""Invoice_Header"",
        ""ReferenceRegionNameArray"": [""HeaderRegion""],
        ""CharacterModelName"": ""NumberLetter""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""HeaderRegion"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [0, 0],
            ""SecondPoint"": [100, 0],
            ""ThirdPoint"":  [100, 20],
            ""FourthPoint"": [0, 20]
        }
    }]
}"

recognizer.AppendSettingsFromString(invoiceTemplate)

Dim results = recognizer.RecognizeFile("invoice.jpg")
Dim headerText As New StringBuilder()
For Each result In results
    For Each line In result.LineResults
        headerText.AppendLine(line.Text)
    Next
Next

Console.WriteLine(headerText.ToString())
recognizer.Dispose()
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

using IronOcr;

// No template file — region specified inline, engine auto-configures
var region = new CropRectangle(x: 0, y: 0, width: 1200, height: 200);
using var input = new OcrInput();
input.LoadImage("invoice.jpg", region);
input.Deskew();

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

// No template file — region specified inline, engine auto-configures
var region = new CropRectangle(x: 0, y: 0, width: 1200, height: 200);
using var input = new OcrInput();
input.LoadImage("invoice.jpg", region);
input.Deskew();

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

' No template file — region specified inline, engine auto-configures
Dim region As New CropRectangle(x:=0, y:=0, width:=1200, height:=200)
Using input As New OcrInput()
    input.LoadImage("invoice.jpg", region)
    input.Deskew()

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

Dynamsoft yaklaşımı, herhangi bir görüntü işlenmeden önce bir JSON şablonu yazmayı, doğrulamayı ve dağıtmayı gerektirir. AppendSettingsFromString içinde bir yazım hatası çalıştırma zamanında boş sonuçlar döndürür — derleme zamanı doğrulaması yoktur. IronOCR'un CropRectangle'i sade bir oluşturucudur: derleme zamanı tür kontrolü, harici dosyalar yok, dağıtım eseri yok. bölge tabanlı OCR kılavuzu tüm hedefleme desenleri için uygundur.

VIN Kod Okuma ile Bölge Göçü

Araç tanım numarası çıkarma, Dynamsoft Label Recognizer'ın uzmanlık alanıdır. VIN şablon modeli, belirli 17 karakterli alfanümerik formatı optimize eder. IronOCR'a geçmek, şablon modelini bir ön işleme hattı ve bölge hedefleme ile değiştirmek anlamına gelir, bu aynı VIN plaka koşullarını karakter modeli yapılandırması gerektirmeden yönetir.

Dynamsoft Yaklaşımı:

using Dynamsoft.LabelRecognizer;

LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();

// VIN requires a specific character model and region configuration
string vinTemplate = @"{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""VIN_Scan"",
        ""ReferenceRegionNameArray"": [""VIN_Zone""],
        ""CharacterModelName"": ""VIN""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""VIN_Zone"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [10, 35],
            ""SecondPoint"": [90, 35],
            ""ThirdPoint"":  [90, 65],
            ""FourthPoint"": [10, 65]
        }
    }]
}";
recognizer.AppendSettingsFromString(vinTemplate);

var results = recognizer.RecognizeFile("vehicle-vin.jpg");
string rawVin = results
    .SelectMany(r => r.LineResults)
    .Select(l => l.Text)
    .FirstOrDefault() ?? string.Empty;

Console.WriteLine($"Raw VIN text: {rawVin}");  // still requires validation
recognizer.Dispose();
using Dynamsoft.LabelRecognizer;

LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();

// VIN requires a specific character model and region configuration
string vinTemplate = @"{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""VIN_Scan"",
        ""ReferenceRegionNameArray"": [""VIN_Zone""],
        ""CharacterModelName"": ""VIN""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""VIN_Zone"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [10, 35],
            ""SecondPoint"": [90, 35],
            ""ThirdPoint"":  [90, 65],
            ""FourthPoint"": [10, 65]
        }
    }]
}";
recognizer.AppendSettingsFromString(vinTemplate);

var results = recognizer.RecognizeFile("vehicle-vin.jpg");
string rawVin = results
    .SelectMany(r => r.LineResults)
    .Select(l => l.Text)
    .FirstOrDefault() ?? string.Empty;

Console.WriteLine($"Raw VIN text: {rawVin}");  // still requires validation
recognizer.Dispose();
Imports Dynamsoft.LabelRecognizer

LabelRecognizer.InitLicense(licenseKey)
Dim recognizer As New LabelRecognizer()

' VIN requires a specific character model and region configuration
Dim vinTemplate As String = "{
    ""LabelRecognizerParameterArray"": [{
        ""Name"": ""VIN_Scan"",
        ""ReferenceRegionNameArray"": [""VIN_Zone""],
        ""CharacterModelName"": ""VIN""
    }],
    ""ReferenceRegionArray"": [{
        ""Name"": ""VIN_Zone"",
        ""Localization"": {
            ""SourceType"": ""LST_MANUAL_SPECIFICATION"",
            ""FirstPoint"":  [10, 35],
            ""SecondPoint"": [90, 35],
            ""ThirdPoint"":  [90, 65],
            ""FourthPoint"": [10, 65]
        }
    }]
}"
recognizer.AppendSettingsFromString(vinTemplate)

Dim results = recognizer.RecognizeFile("vehicle-vin.jpg")
Dim rawVin As String = results _
    .SelectMany(Function(r) r.LineResults) _
    .Select(Function(l) l.Text) _
    .FirstOrDefault() OrElse String.Empty

Console.WriteLine($"Raw VIN text: {rawVin}")  ' still requires validation
recognizer.Dispose()
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

using IronOcr;
using System.Text.RegularExpressions;

// Target the VIN plate region directly — no template file
var vinRegion = new CropRectangle(x: 100, y: 350, width: 800, height: 300);

using var input = new OcrInput();
input.LoadImage("vehicle-vin.jpg", vinRegion);
input.Contrast();   // recover faded stamped digits
input.Sharpen();    // clarify character boundaries on embossed plates

var result = new IronTesseract().Read(input);

// VIN: 17 chars, no I/O/Q
var vinMatch = Regex.Match(result.Text, @"\b[A-HJ-NPR-Z0-9]{17}\b");
string vin = vinMatch.Success ? vinMatch.Value : result.Text.Trim();

Console.WriteLine($"VIN: {vin}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;
using System.Text.RegularExpressions;

// Target the VIN plate region directly — no template file
var vinRegion = new CropRectangle(x: 100, y: 350, width: 800, height: 300);

using var input = new OcrInput();
input.LoadImage("vehicle-vin.jpg", vinRegion);
input.Contrast();   // recover faded stamped digits
input.Sharpen();    // clarify character boundaries on embossed plates

var result = new IronTesseract().Read(input);

// VIN: 17 chars, no I/O/Q
var vinMatch = Regex.Match(result.Text, @"\b[A-HJ-NPR-Z0-9]{17}\b");
string vin = vinMatch.Success ? vinMatch.Value : result.Text.Trim();

Console.WriteLine($"VIN: {vin}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
Imports System.Text.RegularExpressions

' Target the VIN plate region directly — no template file
Dim vinRegion As New CropRectangle(x:=100, y:=350, width:=800, height:=300)

Using input As New OcrInput()
    input.LoadImage("vehicle-vin.jpg", vinRegion)
    input.Contrast()   ' recover faded stamped digits
    input.Sharpen()    ' clarify character boundaries on embossed plates

    Dim result = New IronTesseract().Read(input)

    ' VIN: 17 chars, no I/O/Q
    Dim vinMatch = Regex.Match(result.Text, "\b[A-HJ-NPR-Z0-9]{17}\b")
    Dim vin As String = If(vinMatch.Success, vinMatch.Value, result.Text.Trim())

    Console.WriteLine($"VIN: {vin}")
    Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
$vbLabelText   $csharpLabel

CropRectangle koordinatları, Dynamsoft'un yüzde tabanlı SecondPoint özelliği ile aynı piksel referans çerçevesini kullanır — Dynamsoft'un yüzde değerlerini görüntü boyutlarınızla çarparak dönüştürün. Önişleme hattı (Contrast, Sharpen) Dynamsoft'un VIN şablonuna gömülü karakter modeli optimizasyonunu değiştirir. görüntü kalitesi düzeltme kılavuzu, kabartmalı ve düşük kontrastlı yüzeyler için filtre seçimini kapsar.

Çok Sayfalı TIFF Toplu İşleme

Dynamsoft Label Recognizer tek görüntüler işler. Belge yönetim sistemlerinde, tıbbi görüntüleme arşivlerinde ve faks boru hatlarında yaygın olan çok sayfalı TIFF belgeleri, harici yineleme gerektirir: her kareyi yükleyin, onu tek tek tanıyıcıdan geçirin ve sonuçları toplayın. IronOCR, çok çerçeveli TIFF'i LoadImageFrames aracılığıyla doğal bir şekilde yönetir.

Dynamsoft Yaklaşımı:

using Dynamsoft.LabelRecognizer;
// Requires an external TIFF library to extract frames

LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();
recognizer.AppendSettingsFromString(genericTemplate);

// External library needed to iterate TIFF frames
var tiffImage = System.Drawing.Image.FromFile("scanned-batch.tiff");
int frameCount = tiffImage.GetFrameCount(
    System.Drawing.Imaging.FrameDimension.Page);

var allText = new StringBuilder();
for (int i = 0; i < frameCount; i++)
{
    tiffImage.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
    string tempPath = $"frame_{i}.jpg";
    tiffImage.Save(tempPath, System.Drawing.Imaging.ImageFormat.Jpeg);

    var results = recognizer.RecognizeFile(tempPath);
    foreach (var r in results)
        foreach (var line in r.LineResults)
            allText.AppendLine(line.Text);

    System.IO.File.Delete(tempPath);  // clean up temp files
}

Console.WriteLine(allText.ToString());
recognizer.Dispose();
using Dynamsoft.LabelRecognizer;
// Requires an external TIFF library to extract frames

LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();
recognizer.AppendSettingsFromString(genericTemplate);

// External library needed to iterate TIFF frames
var tiffImage = System.Drawing.Image.FromFile("scanned-batch.tiff");
int frameCount = tiffImage.GetFrameCount(
    System.Drawing.Imaging.FrameDimension.Page);

var allText = new StringBuilder();
for (int i = 0; i < frameCount; i++)
{
    tiffImage.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
    string tempPath = $"frame_{i}.jpg";
    tiffImage.Save(tempPath, System.Drawing.Imaging.ImageFormat.Jpeg);

    var results = recognizer.RecognizeFile(tempPath);
    foreach (var r in results)
        foreach (var line in r.LineResults)
            allText.AppendLine(line.Text);

    System.IO.File.Delete(tempPath);  // clean up temp files
}

Console.WriteLine(allText.ToString());
recognizer.Dispose();
Imports Dynamsoft.LabelRecognizer
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Text

' Requires an external TIFF library to extract frames

LabelRecognizer.InitLicense(licenseKey)
Dim recognizer As New LabelRecognizer()
recognizer.AppendSettingsFromString(genericTemplate)

' External library needed to iterate TIFF frames
Dim tiffImage As Image = Image.FromFile("scanned-batch.tiff")
Dim frameCount As Integer = tiffImage.GetFrameCount(FrameDimension.Page)

Dim allText As New StringBuilder()
For i As Integer = 0 To frameCount - 1
    tiffImage.SelectActiveFrame(FrameDimension.Page, i)
    Dim tempPath As String = $"frame_{i}.jpg"
    tiffImage.Save(tempPath, Imaging.ImageFormat.Jpeg)

    Dim results = recognizer.RecognizeFile(tempPath)
    For Each r In results
        For Each line In r.LineResults
            allText.AppendLine(line.Text)
        Next
    Next

    File.Delete(tempPath)  ' clean up temp files
Next

Console.WriteLine(allText.ToString())
recognizer.Dispose()
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

using IronOcr;

// No frame iteration, no temp files, no external TIFF library
using var input = new OcrInput();
input.LoadImageFrames("scanned-batch.tiff");  // loads all frames natively
input.Deskew();
input.DeNoise();

var ocr = new IronTesseract();
var result = ocr.Read(input);

// Results organized per page
foreach (var page in result.Pages)
{
    Console.WriteLine($"Frame {page.PageNumber}: {page.Lines.Count} lines");
    Console.WriteLine(page.Text);
}

// Save entire batch as a single searchable PDF
result.SaveAsSearchablePdf("batch-searchable.pdf");
using IronOcr;

// No frame iteration, no temp files, no external TIFF library
using var input = new OcrInput();
input.LoadImageFrames("scanned-batch.tiff");  // loads all frames natively
input.Deskew();
input.DeNoise();

var ocr = new IronTesseract();
var result = ocr.Read(input);

// Results organized per page
foreach (var page in result.Pages)
{
    Console.WriteLine($"Frame {page.PageNumber}: {page.Lines.Count} lines");
    Console.WriteLine(page.Text);
}

// Save entire batch as a single searchable PDF
result.SaveAsSearchablePdf("batch-searchable.pdf");
Imports IronOcr

' No frame iteration, no temp files, no external TIFF library
Using input As New OcrInput()
    input.LoadImageFrames("scanned-batch.tiff") ' loads all frames natively
    input.Deskew()
    input.DeNoise()

    Dim ocr As New IronTesseract()
    Dim result = ocr.Read(input)

    ' Results organized per page
    For Each page In result.Pages
        Console.WriteLine($"Frame {page.PageNumber}: {page.Lines.Count} lines")
        Console.WriteLine(page.Text)
    Next

    ' Save entire batch as a single searchable PDF
    result.SaveAsSearchablePdf("batch-searchable.pdf")
End Using
$vbLabelText   $csharpLabel

Dynamsoft yaklaşımı, çerçeve çıkarma için System.Drawing, her çerçeve için diskte geçici dosya ve her geçişten sonra manuel temizlik gerektirir. IronOCR'un LoadImageFrames'i tüm kareleri tek bir çağrıda okur — geçici dosya yok, çerçeve dizini takip etme yok. OCR'den sonra, SaveAsSearchablePdf tüm partiyi bir yöntemde aranabilir bir belge olarak arşivler. çok çerçeveli TIFF kılavuzu ve aranabilir PDF çıktısı kılavuzu her iki yeteneği de detaylı şekilde kapsar.

Yapılandırılmış Kelime Düzeyinde Sonuç Ayrıştırması

Dynamsoft RecognizeFile bir DLRResult dizisi döndürür. Her DLRResult, bir Text özelliği ve sınırlayıcı dörtgeni tutan bir Location özelliği olan DLRLineResult nesnelerinin bir LineResults koleksiyonunu içerir. Kelime düzeyinde konumları çıkartmak, satır metnini beyaz boşlukta bölmeyi ve satır sınırlayıcı kutusunu orantılı olarak bölmeyi gerektirir — orantılı yazı tiplerinde bozulabilen bir yaklaşım. IronOCR, kelime seviyesindeki sınır kutularını her OcrResult.Word nesnesinde tipli özellikler olarak kullanıma sunar.

Dynamsoft Yaklaşımı:

using Dynamsoft.LabelRecognizer;

LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();
recognizer.AppendSettingsFromString(settingsJson);

var results = recognizer.RecognizeFile("form-scan.jpg");

foreach (var dlrResult in results)
{
    foreach (var lineResult in dlrResult.LineResults)
    {
        // Line-level data only — word boundaries are not provided
        Console.WriteLine($"Text: {lineResult.Text}");
        Console.WriteLine($"Confidence: {lineResult.Confidence}");

        // Location is a quadrilateral — four corner points
        var loc = lineResult.Location;
        Console.WriteLine($"Top-left: ({loc.Points[0].X}, {loc.Points[0].Y})");

        // To get word positions: split text and divide bounding box manually
        var words = lineResult.Text.Split(' ');
        int approxWidth = (loc.Points[1].X - loc.Points[0].X) / words.Length;
        for (int i = 0; i < words.Length; i++)
        {
            int wordX = loc.Points[0].X + (i * approxWidth);
            Console.WriteLine($"  Word '{words[i]}' approx at x={wordX}");
        }
    }
}
recognizer.Dispose();
using Dynamsoft.LabelRecognizer;

LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();
recognizer.AppendSettingsFromString(settingsJson);

var results = recognizer.RecognizeFile("form-scan.jpg");

foreach (var dlrResult in results)
{
    foreach (var lineResult in dlrResult.LineResults)
    {
        // Line-level data only — word boundaries are not provided
        Console.WriteLine($"Text: {lineResult.Text}");
        Console.WriteLine($"Confidence: {lineResult.Confidence}");

        // Location is a quadrilateral — four corner points
        var loc = lineResult.Location;
        Console.WriteLine($"Top-left: ({loc.Points[0].X}, {loc.Points[0].Y})");

        // To get word positions: split text and divide bounding box manually
        var words = lineResult.Text.Split(' ');
        int approxWidth = (loc.Points[1].X - loc.Points[0].X) / words.Length;
        for (int i = 0; i < words.Length; i++)
        {
            int wordX = loc.Points[0].X + (i * approxWidth);
            Console.WriteLine($"  Word '{words[i]}' approx at x={wordX}");
        }
    }
}
recognizer.Dispose();
Imports Dynamsoft.LabelRecognizer

LabelRecognizer.InitLicense(licenseKey)
Dim recognizer As New LabelRecognizer()
recognizer.AppendSettingsFromString(settingsJson)

Dim results = recognizer.RecognizeFile("form-scan.jpg")

For Each dlrResult In results
    For Each lineResult In dlrResult.LineResults
        ' Line-level data only — word boundaries are not provided
        Console.WriteLine($"Text: {lineResult.Text}")
        Console.WriteLine($"Confidence: {lineResult.Confidence}")

        ' Location is a quadrilateral — four corner points
        Dim loc = lineResult.Location
        Console.WriteLine($"Top-left: ({loc.Points(0).X}, {loc.Points(0).Y})")

        ' To get word positions: split text and divide bounding box manually
        Dim words = lineResult.Text.Split(" "c)
        Dim approxWidth As Integer = (loc.Points(1).X - loc.Points(0).X) \ words.Length
        For i As Integer = 0 To words.Length - 1
            Dim wordX As Integer = loc.Points(0).X + (i * approxWidth)
            Console.WriteLine($"  Word '{words(i)}' approx at x={wordX}")
        Next
    Next
Next
recognizer.Dispose()
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

using IronOcr;

var result = new IronTesseract().Read("form-scan.jpg");

// Word-level positions are first-class properties — no manual division
foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}");

        foreach (var line in paragraph.Lines)
        {
            foreach (var word in line.Words)
            {
                Console.WriteLine(
                    $"  Word: '{word.Text}' " +
                    $"at ({word.X},{word.Y}) " +
                    $"size {word.Width}x{word.Height} " +
                    $"confidence {word.Confidence}%");
            }
        }
    }
}
using IronOcr;

var result = new IronTesseract().Read("form-scan.jpg");

// Word-level positions are first-class properties — no manual division
foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}");

        foreach (var line in paragraph.Lines)
        {
            foreach (var word in line.Words)
            {
                Console.WriteLine(
                    $"  Word: '{word.Text}' " +
                    $"at ({word.X},{word.Y}) " +
                    $"size {word.Width}x{word.Height} " +
                    $"confidence {word.Confidence}%");
            }
        }
    }
}
Imports IronOcr

Dim result = New IronTesseract().Read("form-scan.jpg")

' Word-level positions are first-class properties — no manual division
For Each page In result.Pages
    For Each paragraph In page.Paragraphs
        Console.WriteLine($"Paragraph at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}")

        For Each line In paragraph.Lines
            For Each word In line.Words
                Console.WriteLine(
                    $"  Word: '{word.Text}' " &
                    $"at ({word.X},{word.Y}) " &
                    $"size {word.Width}x{word.Height} " &
                    $"confidence {word.Confidence}%")
            Next
        Next
    Next
Next
$vbLabelText   $csharpLabel

IronOCR, gerçek bir hiyerarşi sağlar: sayfalar paragraflar içerir, paragraflar satırlar içerir, satırlar kelimeler içerir, kelimler karakterler içerir. Her seviye, .X, .Y, .Width, .Height ve .Confidence'u tipli tam sayı ve çift özellikler olarak açığa çıkarır — dörtgen koordinat aritmetiği gerekmez. yapılandırılmış sonuçlar kılavuzu, her erişilebilir özelliği belgeler ve güven ölçüsünü açıklama kılavuzu, otomatik belge inceleme boru hatları için güven eşik belirlemesi açıklar.

Yüksek Hacimli Etiket Tarama İçin Asenkron Paralel İşleme

Dynamsoft Etiket Tanıyıcı iş parçacığı güvenlidir, ancak RecognizeFile çağrısı eş zamanlıdır. Bunu Task.Run içinde sarmak paralel işlem üretir, ancak her çağrı, AppendSettingsFromString üzerinden yapılandırma durumu paylaşır — birden fazla iş parçacığında şablonları yüklemek dikkatli bir başlangıç sıralamayı gerektirir. IronOCR'un IronTesseract örnekleri bağımsızdır: her görev için bir tane oluşturun, Read çağrısını yapın ve iş parçacığı modeli basittir.

Dynamsoft Yaklaşımı:

using Dynamsoft.LabelRecognizer;
using System.Threading.Tasks;

// InitLicense must be called once before parallel work begins
LabelRecognizer.InitLicense(licenseKey);

// Each thread needs its own recognizer instance with its own template load
var results = new System.Collections.Concurrent.ConcurrentBag<string>();

await Task.WhenAll(imagePaths.Select(async path =>
{
    // Cannot share recognizer instances safely across tasks
    var recognizer = new LabelRecognizer();
    recognizer.AppendSettingsFromString(templateJson);  // reload JSON per instance

    await Task.Run(() =>
    {
        var dlrResults = recognizer.RecognizeFile(path);
        var text = string.Join("\n",
            dlrResults.SelectMany(r => r.LineResults).Select(l => l.Text));
        results.Add(text);
    });

    recognizer.Dispose();
}));

Console.WriteLine($"Processed {results.Count} images");
using Dynamsoft.LabelRecognizer;
using System.Threading.Tasks;

// InitLicense must be called once before parallel work begins
LabelRecognizer.InitLicense(licenseKey);

// Each thread needs its own recognizer instance with its own template load
var results = new System.Collections.Concurrent.ConcurrentBag<string>();

await Task.WhenAll(imagePaths.Select(async path =>
{
    // Cannot share recognizer instances safely across tasks
    var recognizer = new LabelRecognizer();
    recognizer.AppendSettingsFromString(templateJson);  // reload JSON per instance

    await Task.Run(() =>
    {
        var dlrResults = recognizer.RecognizeFile(path);
        var text = string.Join("\n",
            dlrResults.SelectMany(r => r.LineResults).Select(l => l.Text));
        results.Add(text);
    });

    recognizer.Dispose();
}));

Console.WriteLine($"Processed {results.Count} images");
Imports Dynamsoft.LabelRecognizer
Imports System.Threading.Tasks
Imports System.Collections.Concurrent

' InitLicense must be called once before parallel work begins
LabelRecognizer.InitLicense(licenseKey)

' Each thread needs its own recognizer instance with its own template load
Dim results As New ConcurrentBag(Of String)()

Await Task.WhenAll(imagePaths.Select(Async Function(path)
    ' Cannot share recognizer instances safely across tasks
    Dim recognizer As New LabelRecognizer()
    recognizer.AppendSettingsFromString(templateJson)  ' reload JSON per instance

    Await Task.Run(Sub()
        Dim dlrResults = recognizer.RecognizeFile(path)
        Dim text = String.Join(vbLf, dlrResults.SelectMany(Function(r) r.LineResults).Select(Function(l) l.Text))
        results.Add(text)
    End Sub)

    recognizer.Dispose()
End Function))

Console.WriteLine($"Processed {results.Count} images")
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

using IronOcr;
using System.Collections.Concurrent;
using System.Threading.Tasks;

var extractedTexts = new ConcurrentDictionary<string, string>();

// Each IronTesseract instance is independent — no shared state
Parallel.ForEach(imagePaths, imagePath =>
{
    var ocr = new IronTesseract();
    var result = ocr.Read(imagePath);
    extractedTexts[imagePath] = result.Text;
});

foreach (var (path, text) in extractedTexts)
    Console.WriteLine($"{System.IO.Path.GetFileName(path)}: {text.Length} characters");
using IronOcr;
using System.Collections.Concurrent;
using System.Threading.Tasks;

var extractedTexts = new ConcurrentDictionary<string, string>();

// Each IronTesseract instance is independent — no shared state
Parallel.ForEach(imagePaths, imagePath =>
{
    var ocr = new IronTesseract();
    var result = ocr.Read(imagePath);
    extractedTexts[imagePath] = result.Text;
});

foreach (var (path, text) in extractedTexts)
    Console.WriteLine($"{System.IO.Path.GetFileName(path)}: {text.Length} characters");
Imports IronOcr
Imports System.Collections.Concurrent
Imports System.Threading.Tasks

Dim extractedTexts As New ConcurrentDictionary(Of String, String)()

' Each IronTesseract instance is independent — no shared state
Parallel.ForEach(imagePaths, Sub(imagePath)
    Dim ocr As New IronTesseract()
    Dim result = ocr.Read(imagePath)
    extractedTexts(imagePath) = result.Text
End Sub)

For Each kvp In extractedTexts
    Dim path = kvp.Key
    Dim text = kvp.Value
    Console.WriteLine($"{System.IO.Path.GetFileName(path)}: {text.Length} characters")
Next
$vbLabelText   $csharpLabel

IronOCR, paralel iş başlamadan önce başlatma sıralaması gerektirmez. Uygulama başlangıcında bir IronOcr.License.LicenseKey ataması tüm örnekleri etkinleştirir. Thread başına şablon yenileyicisi yok, her örnek başına JSON doğrulaması yok. Engellenmeyen sunucu tarafı senaryoları için, asenkron OCR rehberi, ASP.NET Core ve Azure İşlevleri için await tabanlı şablonları ele alır.

Taralı Etiket Arşivlerinden Aranabilir PDF Çıktısı

Dynamsoft herhangi bir türde PDF çıkış yeteneğine sahip değildir. Dynamsoft aracılığıyla işlenmiş taralı etiket arşivleri, yalnızca görüntü dosyaları olarak kalır — aranamaz, dokuman yönetim sistemleri tarafından indekslenemez ve PDF/A arşivleme standartlarına uygun değildir. IronOCR, aranabilir PDF çıktısını OcrResult nesnesinde tek bir yöntem çağrısı olarak ekler.

Dynamsoft Yaklaşımı:

using Dynamsoft.LabelRecognizer;

// Process scanned label — extract text into a string
LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();
recognizer.AppendSettingsFromString(labelTemplate);

var results = recognizer.RecognizeFile("scanned-labels.jpg");
var extractedText = new StringBuilder();
foreach (var r in results)
    foreach (var line in r.LineResults)
        extractedText.AppendLine(line.Text);

// Cannot create a searchable PDF — save text to a sidecar .txt file instead
System.IO.File.WriteAllText("scanned-labels.txt", extractedText.ToString());

// The original image remains unsearchable
Console.WriteLine("No PDF output available in Dynamsoft Label Recognizer.");
recognizer.Dispose();
using Dynamsoft.LabelRecognizer;

// Process scanned label — extract text into a string
LabelRecognizer.InitLicense(licenseKey);
var recognizer = new LabelRecognizer();
recognizer.AppendSettingsFromString(labelTemplate);

var results = recognizer.RecognizeFile("scanned-labels.jpg");
var extractedText = new StringBuilder();
foreach (var r in results)
    foreach (var line in r.LineResults)
        extractedText.AppendLine(line.Text);

// Cannot create a searchable PDF — save text to a sidecar .txt file instead
System.IO.File.WriteAllText("scanned-labels.txt", extractedText.ToString());

// The original image remains unsearchable
Console.WriteLine("No PDF output available in Dynamsoft Label Recognizer.");
recognizer.Dispose();
Imports Dynamsoft.LabelRecognizer
Imports System.IO
Imports System.Text

' Process scanned label — extract text into a string
LabelRecognizer.InitLicense(licenseKey)
Dim recognizer = New LabelRecognizer()
recognizer.AppendSettingsFromString(labelTemplate)

Dim results = recognizer.RecognizeFile("scanned-labels.jpg")
Dim extractedText = New StringBuilder()
For Each r In results
    For Each line In r.LineResults
        extractedText.AppendLine(line.Text)
    Next
Next

' Cannot create a searchable PDF — save text to a sidecar .txt file instead
File.WriteAllText("scanned-labels.txt", extractedText.ToString())

' The original image remains unsearchable
Console.WriteLine("No PDF output available in Dynamsoft Label Recognizer.")
recognizer.Dispose()
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

using IronOcr;

// Read, preprocess, and produce a searchable PDF archive in one pipeline
using var input = new OcrInput();
input.LoadImage("scanned-labels.jpg");
input.Deskew();
input.Contrast();

var ocr = new IronTesseract();
var result = ocr.Read(input);

// Searchable PDF: original image layer preserved, invisible text layer added
result.SaveAsSearchablePdf("scanned-labels-searchable.pdf");

Console.WriteLine($"Searchable PDF created. Confidence: {result.Confidence}%");
Console.WriteLine($"Extracted text preview: {result.Text.Substring(0, 100)}");
using IronOcr;

// Read, preprocess, and produce a searchable PDF archive in one pipeline
using var input = new OcrInput();
input.LoadImage("scanned-labels.jpg");
input.Deskew();
input.Contrast();

var ocr = new IronTesseract();
var result = ocr.Read(input);

// Searchable PDF: original image layer preserved, invisible text layer added
result.SaveAsSearchablePdf("scanned-labels-searchable.pdf");

Console.WriteLine($"Searchable PDF created. Confidence: {result.Confidence}%");
Console.WriteLine($"Extracted text preview: {result.Text.Substring(0, 100)}");
Imports IronOcr

' Read, preprocess, and produce a searchable PDF archive in one pipeline
Using input As New OcrInput()
    input.LoadImage("scanned-labels.jpg")
    input.Deskew()
    input.Contrast()

    Dim ocr As New IronTesseract()
    Dim result = ocr.Read(input)

    ' Searchable PDF: original image layer preserved, invisible text layer added
    result.SaveAsSearchablePdf("scanned-labels-searchable.pdf")

    Console.WriteLine($"Searchable PDF created. Confidence: {result.Confidence}%")
    Console.WriteLine($"Extracted text preview: {result.Text.Substring(0, 100)}")
End Using
$vbLabelText   $csharpLabel

Aranabilir PDF çıktısı, orijinal taranmış görüntüyü tam çözünürlükte korur ve üstüne görünmez bir OCR metin katmanı ekler. Belge yönetim sistemleri, arama dizinleri ve PDF görüntüleyiciler, şimdi etiket içeriğini arayabilir. aranabilir PDF nasıl yapılır ve taralı belge işleme kılavuzu, çok sayfalı arşivler ve toplu dönüşüm iş akışlarını kapsar.

Dynamsoft OCR API'den IronOCR Haritalama Referansı

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 — otomatik yapılandırılmış
recognizer.RecognizeFile(path) ocr.Read(path)
recognizer.RecognizeByFile(path, templateName) ocr.Read(path)
recognizer.RecognizeBuffer(buffer, width, height, ...) input.LoadImage(imageBytes) sonra ocr.Read(input)
DLRResult[] (sonuçlar dizisi) OcrResult'i (tek bir sonuç nesnesi)
DLRResult.LineResults OcrResult.Lines
DLRLineResult.Text OcrResult.Line.Text
DLRLineResult.Confidence OcrResult.Line.Words[i].Confidence
DLRLineResult.Location.Points[i] OcrResult.Line.X, .Y, .Width, .Height
ReferenceRegionArray'i (JSON) new CropRectangle(x, y, w, h)
LabelRecognizerParameterArray'i (JSON) Gerekli değil
Şablondaki CharacterModelName Gerekli değil
recognizer.Dispose() using var ocr = new IronTesseract()
PDF girişi desteği yok input.LoadPdf(path)
Aranabilir PDF çıktısı yok result.SaveAsSearchablePdf(path)
Çok sayfalı TIFF girişi yok input.LoadImageFrames(path)
Barkod okuma (ayrı ürün) ocr.Configuration.ReadBarCodes = true
Birden fazla InitLicense çağrısı (ürün başına) Tek IronOcr.License.LicenseKey ataması

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: AppendSettingsFromString Geçiş Sonrası Boş Sonuçlar Döndürüyor

Dynamsoft: Tanım, AppendSettingsFromString hatalı biçimlendirilmiş bir JSON dizesi aldığında sessizce boş DLRResult dizileri döndürür. Hiçbir istisna atılmaz. Dynamsoft'tan geçiş yapan ekipler, bu sessiz başarısızlığa karşı hem koruma sağlamak için sonuç ayrıştırma kodunun tamamında savunma amaçlı null kontrolleri ekler.

Çözüm: AppendSettingsFromString'i tamamen kaldırın. IronOCR, şablon yapılandırması gerektirmez. Belirli bölge hedefleme gerekiyorsa, ReferenceRegionArray JSON yerine CropRectangle ile değiştirin:

// Remove all AppendSettingsFromString calls
// Replace region JSON with a CropRectangle constructor
var region = new CropRectangle(x: 0, y: 400, width: 1200, height: 300);
using var input = new OcrInput();
input.LoadImage(imagePath, region);
var result = new IronTesseract().Read(input);
// Remove all AppendSettingsFromString calls
// Replace region JSON with a CropRectangle constructor
var region = new CropRectangle(x: 0, y: 400, width: 1200, height: 300);
using var input = new OcrInput();
input.LoadImage(imagePath, region);
var result = new IronTesseract().Read(input);
Imports System

' Remove all AppendSettingsFromString calls
' Replace region JSON with a CropRectangle constructor
Dim region As New CropRectangle(x:=0, y:=400, width:=1200, height:=300)
Using input As New OcrInput()
    input.LoadImage(imagePath, region)
    Dim result = New IronTesseract().Read(input)
End Using
$vbLabelText   $csharpLabel

IronTesseract kurulum kılavuzu, JSON dizeleri yerine özellik olarak ayarlanabilen tüm motor yapılandırma seçeneklerini belgeler.

Sorun 2: Uygulama Başlangıcında Çoklu InitLicense Çağrıları

Dynamsoft: Etiket Tanıyıcı, Barkod Okuyucu ve Belge Normalleştiriciyi kullanan bir uygulama, başlangıçta kendine ait lisans anahtarını gerektiren üç ayrı InitLicense yöntemini çağırır. Ekipler üç ortam değişkeni saklar, üç anahtarı bağımsız olarak döndürür ve üç ayrı başlatma hatasını ayıklar.

Çözüm: Tüm Dynamsoft InitLicense çağrılarını kaldırın. Bunu bir IronOCR satırıyla değiştirin:

// Remove:
// LabelRecognizer.InitLicense(mrzKey);
// BarcodeReader.InitLicense(barcodeKey);
// DocumentNormalizer.InitLicense(docKey);

// Add once, at application startup:
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Remove:
// LabelRecognizer.InitLicense(mrzKey);
// BarcodeReader.InitLicense(barcodeKey);
// DocumentNormalizer.InitLicense(docKey);

// Add once, at application startup:
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
' Remove:
' LabelRecognizer.InitLicense(mrzKey)
' BarcodeReader.InitLicense(barcodeKey)
' DocumentNormalizer.InitLicense(docKey)

' Add once, at application startup:
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
$vbLabelText   $csharpLabel

Tek bir ortam değişkeni, OCR, barkodlar, PDF işleme ve 125'ten fazla dili — özellik bazında başlatma gerektirmeksizin — etkinleştirir.

Sorun 3: LineResult Metin Toplama Bozuk Çıktılar Üretiyor

Dynamsoft: RecognizeFile, algılanan her etiket bölgesi için bir DLRResult döndürür. lineResult.Text sonuçlarının tümü \n ayırıcıları ile birleştirilen uygulamalar, sayfa üzerindeki farklı etiket bölgelerinden satırların karıştığı bir çıkış üretir — çünkü DLRResult nesneleri sıralama, bölge-tanıma sırası, okuma sırası değildir.

Çözüm: IronOCR'un sonuç hiyerarşisi, çıktıları okuma düzeninde organize eder. Metni doğal belge sırası ile erişmek için PagesParagraphsLines yapısını kullanın:

var result = new IronTesseract().Read(imagePath);

// Reading-order text — no manual aggregation
Console.WriteLine(result.Text);

// Or access paragraph-level groupings
foreach (var paragraph in result.Pages[0].Paragraphs)
    Console.WriteLine(paragraph.Text);
var result = new IronTesseract().Read(imagePath);

// Reading-order text — no manual aggregation
Console.WriteLine(result.Text);

// Or access paragraph-level groupings
foreach (var paragraph in result.Pages[0].Paragraphs)
    Console.WriteLine(paragraph.Text);
Imports IronOcr

Dim result = New IronTesseract().Read(imagePath)

' Reading-order text — no manual aggregation
Console.WriteLine(result.Text)

' Or access paragraph-level groupings
For Each paragraph In result.Pages(0).Paragraphs
    Console.WriteLine(paragraph.Text)
Next
$vbLabelText   $csharpLabel

Sorun 4: Dağıtım Sunucusunda Eksik Şablon JSON Dosyaları

Dynamsoft: Şablon JSON dosyaları ayrı dağıtım nesneleridir. Yeni bir sunucuda bir şablon dosyası eksik olduğunda veya yanlış bir yol içindeyken, AppendSettingsFromString başarısız olur — bazen sessizce, bazen çalışma zamanı istisnası ile — ve dağıtım, uygulama koduna dokunmadan tanımayı bozar.

Çözüm:IronOCRşablon dosyalarına sahip değildir. NuGet paketini değiştirdikten ve ad alanlarını güncelledikten sonra, dağıtım nesne listesi, uygulama ikilileri ve bir ortam değişkenine küçülür. Gerekirse bir başlangıç doğrulama kontrolü ekleyin:

// Validate license at startup — no template files to check
if (!IronOcr.License.IsValidLicense)
    throw new InvalidOperationException("IronOCR license key is invalid or missing.");

var ocr = new IronTesseract();
// Ready to process — no file dependencies
// Validate license at startup — no template files to check
if (!IronOcr.License.IsValidLicense)
    throw new InvalidOperationException("IronOCR license key is invalid or missing.");

var ocr = new IronTesseract();
// Ready to process — no file dependencies
Imports IronOcr

' Validate license at startup — no template files to check
If Not IronOcr.License.IsValidLicense Then
    Throw New InvalidOperationException("IronOCR license key is invalid or missing.")
End If

Dim ocr As New IronTesseract()
' Ready to process — no file dependencies
$vbLabelText   $csharpLabel

Sorun 5: Birden Çok Ürün Arasında İmha Zinciri Yönetimi

Dynamsoft: Her Dynamsoft ürün örneği (LabelRecognizer, BarcodeReader, DocumentNormalizer) IDisposable uygular. Birden fazla ürünü toplayan hizmet sınıfları, çok seviyeli Dispose uygulamalarına sahiptir ve herhangi bir ürün örneğinde bir Dispose çağrısının eksik olması, yük altında hafıza artışı olarak kendini gösteren doğal kaynak sızıntılarına neden olur.

Çözüm: IronOCR'un IronTesseract ve OcrInput her ikisi de IDisposable uygular, ancak elden çıkarma modeli daha basittir — bir sınıf, bir desen. DI konteynerine bir tekil IronTesseract örneği kaydedin veya geçici ömürlü örnekler için using bloklarını kullanın:

// Short-lived pattern
using var input = new OcrInput();
input.LoadImage(imagePath);
var result = new IronTesseract().Read(input);

// Long-lived singleton (register in Program.cs)
builder.Services.AddSingleton<IronTesseract>();
// Short-lived pattern
using var input = new OcrInput();
input.LoadImage(imagePath);
var result = new IronTesseract().Read(input);

// Long-lived singleton (register in Program.cs)
builder.Services.AddSingleton<IronTesseract>();
Imports IronOcr

' Short-lived pattern
Using input As New OcrInput()
    input.LoadImage(imagePath)
    Dim result = (New IronTesseract()).Read(input)
End Using

' Long-lived singleton (register in Program.vb)
builder.Services.AddSingleton(Of IronTesseract)()
$vbLabelText   $csharpLabel

ilerleme izleme kılavuzu, uzun süre çalışan yığın işleri için yaşam süresi yönetimini ve async OCR kılavuzu, ASP.NET Core'daki singleton desenlerini gösterir.

Sorun 6: Özel Etiket Formatı İçin Karakter Modeli Mevcut Değil

Dynamsoft: Bir şablondaki CharacterModelName alanı, Dynamsoft SDK kurulum dizininde bulunması gereken bir model dosyasına referans verir. Özel karakter modelleri, Dynamsoft'un portalından ek model dosyalarını indirip doğru SDK dizinine yerleştirmeyi gerektirir. Eksik bir model, gizemli bir çalışma zamanı hatasıyla tanımayı başarısız kılar.

Çözüm: IronOCR, karakter model dosyaları kullanmaz. Özel veya uzmanlaşmış yazı tipleri için, özel dil eğitimi kullanın:

// No character model files needed
// For specialized fonts, use a custom language pack
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;  // or load a custom trained pack

using var input = new OcrInput();
input.LoadImage(specializedFontImage);
input.Binarize();  // helps with specialized font clarity

var result = ocr.Read(input);
// No character model files needed
// For specialized fonts, use a custom language pack
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;  // or load a custom trained pack

using var input = new OcrInput();
input.LoadImage(specializedFontImage);
input.Binarize();  // helps with specialized font clarity

var result = ocr.Read(input);
Imports IronTesseract

' No character model files needed
' For specialized fonts, use a custom language pack
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English  ' or load a custom trained pack

Using input As New OcrInput()
    input.LoadImage(specializedFontImage)
    input.Binarize()  ' helps with specialized font clarity

    Dim result = ocr.Read(input)
End Using
$vbLabelText   $csharpLabel

özel yazı tipi eğitimi kılavuzu, herhangi bir dosya yolu yapılandırması olmadan tescilli etiket yazı tipleri için özel bir dil paketi eğitmeyi kapsar.

Dynamsoft OCR Geçiş Kontrol Listesi

Öncesi-Geçiş

Kod tabanını tüm Dynamsoft referansları için denetleyin:

# Find all Dynamsoft using statements
grep -r "using Dynamsoft" --include="*.cs" .

# Find InitLicense calls (one per product)
grep -r "InitLicense" --include="*.cs" .

# Find AppendSettingsFromString calls (template loads)
grep -r "AppendSettingsFromString" --include="*.cs" .

# Find template JSON strings (inline or file references)
grep -r "LabelRecognizerParameterArray\|ReferenceRegionArray\|CharacterModelName" --include="*.cs" .

# Find RecognizeFile and RecognizeByFile calls
grep -r "RecognizeFile\|RecognizeByFile\|RecognizeBuffer" --include="*.cs" .

# Find LineResult result parsing patterns
grep -r "LineResults\|DLRResult\|DLRLineResult" --include="*.cs" .

# Identify any JSON template files in the project
find . -name "*.json" | xargs grep -l "LabelRecognizerParameterArray" 2>/dev/null
# Find all Dynamsoft using statements
grep -r "using Dynamsoft" --include="*.cs" .

# Find InitLicense calls (one per product)
grep -r "InitLicense" --include="*.cs" .

# Find AppendSettingsFromString calls (template loads)
grep -r "AppendSettingsFromString" --include="*.cs" .

# Find template JSON strings (inline or file references)
grep -r "LabelRecognizerParameterArray\|ReferenceRegionArray\|CharacterModelName" --include="*.cs" .

# Find RecognizeFile and RecognizeByFile calls
grep -r "RecognizeFile\|RecognizeByFile\|RecognizeBuffer" --include="*.cs" .

# Find LineResult result parsing patterns
grep -r "LineResults\|DLRResult\|DLRLineResult" --include="*.cs" .

# Identify any JSON template files in the project
find . -name "*.json" | xargs grep -l "LabelRecognizerParameterArray" 2>/dev/null
SHELL

Keşif bulguları:

  • InitLicense çağrı yerlerini sayın (kullanılan Dynamsoft ürünü başına bir tane)
  • AppendSettingsFromString çağrı yerlerini sayın (tanıma şablonu başına bir tane)
  • Geçiş sonrası silinecek tüm JSON şablon dosyalarını listeleyin
  • ReferenceRegionArray tanımlarını belirleyin ( CropRectangle'ye dönüştürün)
  • Ayrı ürünler tarafından kapsanan özellikleri not edin (barkodlar, belge normalleştirme)

Kod Geçişi

  1. Dynamsoft.LabelRecognizer NuGet paketini kaldırın (ve diğer Dynamsoft paketlerini)
  2. IronOcr NuGet paketini kurun (dotnet add package IronOcr)
  3. Tüm using Dynamsoft.LabelRecognizer; ve using Dynamsoft.Core; ile using IronOcr; değiştirin
  4. Tüm LabelRecognizer.InitLicense(key) çağrılarını tek bir IronOcr.License.LicenseKey = key ile uygulama başlangıcında değiştirin
  5. Tüm AppendSettingsFromString(json) çağrılarını kaldırın — eşdeğeri gerekmez
  6. ReferenceRegionArray JSON koordinatlarını new CropRectangle(x, y, width, height) oluşturucularıyla değiştirin
  7. new LabelRecognizer() oluşturmayı new IronTesseract() ile değiştirin
  8. recognizer.RecognizeFile(path) ile ocr.Read(path) değiştirin
  9. DLRLineResult sonuç yinelemesini .Words hiyerarşisi ile değiştirin
  10. Manuel lineResult.Text dizi birleştirmesini result.Text veya yapılandırılmış sayfa numaralandırmasıyla değiştirin
  11. BarcodeReader.InitLicense + BarcodeReader.DecodeFile ile ocr.Configuration.ReadBarCodes = true değiştirin
  12. Çok ürünlü Dispose zincirlerini kaldırın ve using var ocr = new IronTesseract() ile değiştirin
  13. Projeden ve dağıtım nesne listesinden JSON şablon dosyalarını silin
  14. TIFF dosyalarındaki çerçeve yineleme döngülerini input.LoadImageFrames(path) ile değiştirin
  15. Taranan çıktılar arşivlenmek zorunda kaldığında result.SaveAsSearchablePdf(outputPath) ekleyin

Geçiş Sonrası

  • Uygulamanın başlangıcında IronOcr.License.IsValidLicense döndürdüğünü doğrulayın
  • Tüm tanıma sonuçlarının önceki çalışan girdiler için boş olmayan result.Text döndürdüğünü onaylayın
  • Temsilci örneklerde result.Confidence kontrol edin — %80'in üzerindeki değerler iyi tanıma kalitesini gösterir
  • Bölge hedefleme doğruluğunu CropRectangle çıktıları ile önceki Dynamsoft bölge sonuçlarını karşılaştırarak test edin
  • ocr.Configuration.ReadBarCodes = true çalıştırarak görüşme kodu okumanın doğruluğunu doğrulayın Bias'dan önce Dynamsoft Barkod Okuyucu gerektiren girdiler üzerinde
  • Çok sayfalı TIFF işlemeinin her çerçeve için bir OcrResult.Page ürettiğini doğrulayın
  • Aranabilir PDF çıktısının bir PDF görüntüleyicisinde metin aranabilir olduğunu doğrulayın
  • Parallel.ForEach ile paralel işleme testlerini çalıştırın ve iş parçacığı çakışması olmadığını doğrulayın
  • Linux, Docker, Azure gibi tüm dağıtım hedeflerini test edin ve JSON şablon dosyalarının olmadan tek paket dağıtımının çalıştığını doğrulayın
  • Dağıtım konfigürasyonunda hiç bir Dynamsoft lisans anahtar ortam değişkeninin kalmadığını doğrulayın

IronOCR'a Geçişin Ana Faydaları

Tek Bir Paket, Çok Ürünlü Koordinasyon Vergisini Ortadan Kaldırır. Tüm yetenekler — genel OCR, MRZ çıkarma, barkod okuma, yerel PDF girişi, aranabilir PDF çıkışı, önişleme ve 125+ dil — tek bir IronOcr NuGet paketi olarak gelir. Versiyon yükseltmeleri bir .csproj dosyasında bir paket girişini etkiler. Lisans anahtarı rotasyonu bir ortam değişkenidir. Dağıtım nesne envanteri uygulama ikililerine küçülür, JSON şablon dosyaları yok, karakter model dizinleri yok.

Sıfır Yapılandırma Dosyası Bağımlılıkları. Dynamsoft şablon sistemi, JSON dosyalarının çalışma zamanında mevcut olmasını ve doğru bir şekilde yol almasını gerektirir. IronOCR, NuGet paketi dışında çalışma zamanı dosyası bağımlılıklarına sahip değildir. Docker görüntüleri belirleyici hale gelir: CI'yi geçen şey, üretimde tam olarak çalışan şeydir. Docker dağıtım rehberi, Linux için sadece bir apt-get install satırı gerektiren tam bir Dockerfile gösterir.

Yapılandırılmış Çıktı Entegrasyon Kodunu Azaltır. Dynamsoft ham LineResult metin dizelerini döndürür. Yapısal veri çıkarımı — alan pozisyonları, kelime sınırları, token başına güven — kodda post işlemi ve testler gerektirir. IronOCR'nin sonuç hiyerarşisi, sayfalar, paragraflar, satırlar, kelimeler ve karakterler ile koordinatlar ve her seviyede güven puanları olan türlenmiş koleksiyonları gösterir. Dynamsoft'tan geçiş yapan ekipler, sonuç işleme kodlarının %30-50 sini kaldırma eğilimindedir, çünkü IronOCR, el ile inşa ettikleri yapıyı sunar. OCR sonuç özelliği sayfası, tam çıktı modelini belgeler.

Süresiz Lisanslama, Yıllık Bütçe Belirsizliklerini Ortadan Kaldırır. Dynamsoft Etiket Tanıyıcı, süresiz seçenek sunmaz. Sadece etiket tanıma için beş yıllık çalışan bir işleme kümesi, her yıl $2,995+ maliyete neden olur ve barkod ya da belge normalleştirme ürünleri eklenmeden önce bu maliyete katlanılır. IronOCR'un $999 Lite lisansı, tüm özellikleri sınırsız olarak kapsayan tek seferlik bir satın almadır. Devlet, işletme ve uzun süreli üretim dağıtımları için, yıllık yenileme bağımlılıklarını temel bir belge işleme bileşeninden çıkarmak, tedarik karmaşıklığını azaltır ve bir projenin ortasında abonelik sona erme riskini ortadan kaldırır. IronOCR lisanslama sayfası tüm seviyeleri ve her birinin neyi kapsadığı listesini sağlar.

Platforma Özel Yapılandırma Olmadan Platformlar Arası. IronOCR, Windows x64, Linux x64, macOS x64 ve macOS ARM için doğru çalışma zamanı ikilisini, NuGet'in çalışma zamanı tanımlayıcı grafiğiyle çözer. Koşullu <PackageReference> blokları, platform algılama kodu, yerel ikili dosya yolu ayarlaması yok. Aynı using IronOcr; kodu Windows, Linux, AWS Lambda ve Azure App Service üzerinde derlenip çalıştırılır ve değiştirme gerektirmez.

Dil Kapsamı, Uygulama İhtiyaçlarıyla Ölçeklenir. Dynamsoft Etiket Tanıyıcı, Latin karakterli MRZ formatları için tasarlanmıştır. Latin dışı yazılar — Arapça, Çince, Japonca, Korece, İbranice — tasarım kapsamının dışında kalır. IronOCR, algılama hattında kod değişikliği olmadan Arapça desteği ekleyen dotnet add package IronOcr.Languages.Arabic ile bireysel NuGet paketleri olarak yüklü 125+ dili destekler. diller dizini mevcut her dil paketini listeler. Uluslararası kimlik belgeleri, çok dilli gönderi etiketleri veya sınır ötesi faturaları işleyen uygulamalar için bu genişlik, büyüyen bir uygulamanın karşılaştığı her belge türünü kapsadığı anlamına gelir.

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

Neden Dynamsoft OCR SDK'dan IronOCR'a geçmeliyim?

Yaygın geçiş nedenleri arasında COM ara bağlamının karmaşıklığını ortadan kaldırmak, dosya tabanlı lisans yönetimini değiştirmek, sayfa başına fatura düzenlemekten kaçınmak, Docker/kapsayıcı dağıtımını etkinleştirmek ve standart .NET araçlarıyla entegre olan bir NuGet doğal iş akışı benimsemek yer almaktadır.

Dynamsoft OCR SDK'dan IronOCR'a geçişteki ana kod değişiklikleri nelerdir?

Dynamsoft OCR başlatma dizilerini IronTesseract oluşturma ile değiştirin, COM yaşam döngüsü yönetimini (açık Oluştur/Yükle/Kapat desenleri) kaldırın ve sonuç özellik adlarını güncelleyin. Sonuç, önemli ölçüde daha az sablon satırıdır.

Geçişi başlatmak için IronOCR'u nasıl kurarım?

Paket Yöneticisi Konsolunda 'Install-Package IronOcr' veya CLI'da 'dotnet add package IronOcr' çalıştırın. Dil paketleri ayrı paketlerdir: Örneğin, Fransızca için 'dotnet add package IronOcr.Languages.French'.

IronOCR, Dynamsoft OCR SDK'nın standart iş belgeleri için OCR doğruluğuna eşit midir?

IronOCR, faturalar, sözleşmeler, makbuzlar ve yazılı formlar dahil olmak üzere standart işletme içerikleri için yüksek doğruluğa ulaşır. Görüntü ön işleme filtreleri (dengelemeyi düzeltme, gürültü kaldırma, kontrast artırma) bozulmuş girdiler üzerindeki tanımayı daha da iyileştirir.

IronOCR, Dynamsoft OCR SDK'nın ayrı olarak yüklediği dil verilerini nasıl ele alır?

IronOCR'daki dil verileri, NuGet paketleri olarak dağıtılır. 'dotnet add package IronOcr.Languages.German' komutuyla Almanca desteği yüklenir. Herhangi bir manuel dosya yerleştirme veya dizin yolu gerekmez.

Dynamsoft OCR SDK'dan IronOCR'a geçiş, dağıtım altyapısında değişiklikler gerektirir mi?

IronOCR, Dynamsoft OCR SDK'dan daha az altyapı değişikliği gerektirir. SDK ikili yolları, lisans dosyası yerleştirmeleri veya lisans sunucu yapılandırmaları yoktur. NuGet paketi, tamamıyla OCR motorunu içerir ve lisans anahtarı uygulama kodunda bir dize olarak ayarlanır.

Geçişten sonra IronOCR lisanslamasını nasıl yapılandırırım?

Uygulama başlangıç ​​kodunda IronOcr.License.LicenseKey = "SİZİN-ANAHTARINIZ" atayın. Docker veya Kubernetes'te, anahtarı bir ortam değişkeni olarak saklayın ve başlangıçta okuyun. Trafiği kabul etmeden önce doğrulamak için License.IsValidLicense kullanın.

IronOCR, PDF'leri Dynamsoft OCR gibi işleyebilir mi?

Evet. IronOCR hem yerel hem de taranmış PDF'leri okur. Bir PDF yolu veya OcrPdfInput olan girdiye ocr.Read(input) çağrısı yapmak için IronTesseract örneği çağırın ve OcrResult sayfalarını yineleyin. Ayrı bir PDF işleme hattı gerekmez.

IronOCR, yüksek hacim işleme sırasında iş parçacığı nasıl ele alır?

IronTesseract, iş parçacığı başına örnek olacak şekilde güvenlidir. Paralel.ForEach veya Görev havuzunda her iş parçacığı için bir örnek oluşturun, OCR'u eşzamanlı olarak çalıştırın ve her örneği iş tamamlandığında bırakın. Küresel durum veya kilitleme gerekmez.

IronOCR metin çıktıktan sonra hangi çıktıları destekler?

IronOCR, metin, kelime koordinatları, güven skorları ve sayfa yapısını içeren yapılandırılmış sonuçlar döndürür. Dışa aktarma seçenekleri düz metin, aranabilir PDF ve aşağı akış işlemesi için yapılandırılmış sonuç nesneleri içerir.

IronOCR'un fiyatlandırması, Dynamsoft OCR SDK'dan daha öngörülebilir mi? İş yüklerini artırırken?

IronOCR, sayfa başına veya hacim ücretlendirmesi olmadan düz oranlı sürekli lisanslama kullanır. 10.000 veya 10 milyon sayfa işleseniz de lisans maliyeti sabit kalır. Hacim ve ekip lisanslama seçenekleri IronOCR fiyatlandırma sayfasındadır.

Dynamsoft OCR SDK'dan IronOCR'a geçişten sonra mevcut testlerime ne olur?

Çıkarılmış metin içeriğini doğrulayan testler, geçişten sonra çalışmaya devam etmelidir. API çağrı şablonlarını veya COM nesne yaşam döngüsünü doğrulayan testler, IronOCR'un daha basit başlatma ve sonuç modelini yansıtacak şekilde güncellenmelidir.

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