IRONSOFTWAREHOME
VIDEOLAR

Asprise OCR'dan IronOCR'a Geçiş

Curtis Chau
Curtis Chau
Updated: 20 Haziran 2026

Bu rehber, .NET geliştiricilerini IronOCR ileAsprise OCRdeğiştirme sürecinin her adımından geçirir. Mekanik paket değişimi, isim alanı değişiklikleri ve üretimdeki .NET uygulamalarında Asprise kullanımının çoğunluğunu oluşturan dört kod geçiş desenini kapsar. Geçmeye zaten karar vermiş ve somut bir eylem planına ihtiyaç duyan geliştiriciler hedef kitledir.

Asprise OCR'dan Neden Geçiş Yapılır?

Asprise OCR öncelikle bir Java ürünü olarak tasarlandı. .NET yüzeyi, Java kaynaklı yerel bir motorun etrafında bir sarmalayıcıdır ve bu kaynağı, kitaplığın .NET'teki davranışını her yönden şekillendirir — dağıtımdan API tasarımına ve lisans kısıtlamalarına kadar.

**JRE ve Yerel İkili Bağımlılık.**Asprise OCRfor .NET, uygulamanın çalıştığı her makinede platforma özgü yerel ikililerin (aocr.dll, aocr_x64.dll, libaocr.so, libaocr.dylib) bulunmasını gerektirir. Her ikili, hedef platform ve işlemci mimarisiyle tam olarak eşleşmelidir. 32 bit DLL ile oluşturulan 64 bit Docker konteyneri çalışma zamanında BadImageFormatException fırlatır. libaocr.so eksik olan bir Linux dağıtımı, LD_LIBRARY_PATH üzerinden DllNotFoundException fırlatır. Hata, derleme zamanında yüzeye çıkmaz. Her yeni dağıtım hedefi — yeni bir sunucu, yeni bir konteyner imajı, bir CI ajanı — manuel ikili kaynak bulma egzersizine dönüşür.

Java Mirasından Dize-Sabitli API. Asprise tanıma türü ve çıktı formatı için tamsayı sabitlerini açığa çıkarır: Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT, Ocr.OUTPUT_FORMAT_XML. Bu sabitler doğrudan Java SDK'sının tamsayı tabanlı API'sine bağlanır. .NET geliştiricileri, geçerli sabit değerler hakkında hiçbir IntelliSense rehberliği, bağımsız kombinezonlar üzerinde derleme zamanı güvenliği ve güçlü türde sonuç nesneleri almaz. Yapılandırılmış çıktının çıkarılması, XML dizelerinin manuel olarak ayrıştırılmasını gerektirir.

Geçici Çözümler Olmadan Async Desteği Yok. Asprise yerel async API sağlamaz. Senron Asprise çağrılarını engellemek için Task.Run içerisine sarmalamak, ASP.NET iş parçacıklarını engellemekten kaçınmasına neden olur ve LITE ve STANDARD seviyelerinde eşzamanlı yürütmeyi yasaklayan lisans kısıtlamasını çözmez. Modern .NET uygulamalarındaki async desenler — arka plan hizmetleri, minimal API uç noktaları, Azure Functions — Asprise için temiz bir eşdeğere sahip değildir.

Çoklu-Çerçeve TIFF İşleme Manuel Bölmeyi Gerektirir. Asprise tek resim dosyalarında çalışır. Çok sayfalı bir TIFF işlemek, çerçeveleri bireysel dosyalara ayırmak için harici bir kod gerektirir, ardından her dosyayı döngüde işler. Çerçeve meta verisi veya sayfa numaralandırması çıktıya taşınmaz.

İş Parçacığı Kısıtlaması Üretim Dağıtımını Engeller. LITE ($299) ve STANDARD ($699) lisansları, yürütmeyi tek bir iş parçacığı ve tek bir süreçle sınırlamak üzere sözleşmeyle bağlanmıştır. ASP.NET Core, tüm HTTP isteklerini bir iş parçacığı havuzunda işler. Bu katmanlarda Asprise'ı çağıran her web API uç noktası, ilk eşzamanlı istekten itibaren bir lisans ihlalidir. ENTERPRISE'a yükseltmek kısıtlamayı kaldırır, ancak dağıtım kapsamına bağlı olarak fiyat aralığı $2,000-$5,000+ arasında değişen ve satışla iletişime geçilmesi gereken bir fiyat olmaksızın.

Çıktı Formatı Yönetimi Dize Ayrıştırma Gerektirir. OUTPUT_FORMAT_XML belirtildiğinde, Asprise ham bir XML dizesi döndürür. Uygulama, o dizeyi deserialize etmek, yapısını doğrulamak ve kelimeleri ve koordinatlarını çıkarmakla sorumludur. Kelime başına güven puanları XML özniteliklerinde gömülüdür. Bir nesne modeli yoktur — yalnızca dize manipülasyonu vardır.

Temel Sorun

İlk OCR çağrısı çalıştırılmadan önce Asprise, JRE'ye bitişik yerel ikili yapılandırması gerektirir. IronOCR, NuGet paketi dışında hiçbir şey gerektirmez:

// Asprise: native binary must exist in PATH or application directory
// aocr_x64.dll missing → DllNotFoundException at runtime, not at build
Ocr.SetUp();                              // Static init — touches native binary
Ocr ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);  // Allocates native engine memory
string text = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();                         // Must call or native memory leaks
C#
// IronOCR: dotnet add package IronOcr — no binary sourcing, no lifecycle calls
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
string text = new IronTesseract().Read(imagePath).Text;
C#

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

Aşağıdaki tablo, bu geçişi değerlendiren geliştiriciler için en önemli yetenekleri kapsar.

ÖzellikAsprise OCRIronOCR
Birincil platformJava (miras).NET yerel
NuGet yüklemeSarmalayıcı + platforma özgü DLL'lerTek paket (IronOcr)
Çalışma zamanında yerel ikili olarak gereklidirEvet (platform başına DLL)Hayır
.NET API stiliTamsayı sabitleri, dize döndermeleriGüçlü türde sınıflar ve enumlar
IDisposable / using deseniUygulanmadıEvet (OcrInput)
Asenkron OCRYerel destek yokEvet (ReadAsync)
Çoklu iş parçacığı — LITE/STANDARD katmanıLisansla yasaklanmışİzin verildi
Çoklu iş parçacığı — tüm katmanlarYalnızca ENTERPRISETüm seviyeler
ASP.NET Core Web API desteğiENTERPRISE gereklidirHerhangi bir katman
Azure Fonksiyonları / AWS LambdaENTERPRISE gereklidirHerhangi bir katman
Yerel PDF girişiHayırEvet
Çoklu-çerçeve TIFF girişiHayır (manuel çerçeve bölme)Evet (LoadImageFrames)
Bayt dizisi ve akış girişiSınırlıEvet
Dahili resim ön işlemeHayırEvet (9+ filtre)
Aranabilir PDF çıktısıHayırEvet (SaveAsSearchablePdf)
Yapılandırılmış sonuç nesne modeliHayır (yalnızca XML dizesi)Evet (sayfalar, paragraflar, kelimeler, karakterler)
Kelime başına güvenilirlik puanlarıHayır (XML öznitelik ayrıştırma)Evet (result.Confidence)
Kelime piksel koordinatlarıXML öznitelik ayrıştırmaGüçlü türde özellikler
Dil sayımı20+125+
Güçlü türde dil seçimiHayır (dize kodları)Evet (OcrLanguage enum)
Barkod okumaEvet (ayrı tanıma türü)Evet (yapılandırma bayrağı)
hOCR içeri aktarmaHayırEvet
Çapraz platform dağıtımıPlatform başına manuel ikili dosyaNuGet tüm platformları yönetir
Docker / Linux / macOSManuel LD_LIBRARY_PATH yapılandırmaKutudan çıkar çıkmaz çalışır
.NET uyumluluğuSınırlı (Java köprüsü).NET Framework 4.6.2+, .NET 5–9
Sunucu kullanımı için giriş fiyatıENTERPRISE (~$2,000+)$999 (Lite, tüm özellikler)
Lisans türüKatman başına, Enterprise için satışla iletişime geçinSüresiz (tek seferlik satın alma)

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

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

Asprise OCR'ü kaldırın:

dotnet remove package asprise-ocr-api
SHELL

NuGet paketi sayfasından IronOCR yükleyin:

dotnet add package IronOcr

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

Asprise ad alanınıIronOCR ad alanı ile değiştirin:

// Before (Asprise)
using asprise.ocr;

// After (IronOCR)
using IronOcr;
C#

Adım 3: Lisansa İzin Verin

Uygulamanın başlatılmasında lisans anahtarı atamasını ekleyin: OCR çağrılarından önce Program.cs içinde, Startup.Configure içinde veya bir statik yapıcıda:

IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

Ücretsiz bir deneme anahtarı IronOCR lisanslama sayfasından mevcuttur. Geliştirme ve değerlendirme sırasında IronOCR, bir anahtar olmadan çalışır ve çıktıyı bir deneme filigranı ile işaretler.

Kod Göç Örnekleri

JRE Yolu Yapılandırması ve Motor Başlatma Kaldırma

Linux veya macOS üzerinde çalışan Asprise uygulamaları tipik olarak bir JRE yolunu ayarlayan veya herhangi bir OCR çalışması başlamadan önce yerel ikili varlığı doğrulayan başlangıç kodunu içerir. Bu altyapı IronOCR'da eşdeğer bir yapı taşımamaktadır.

Asprise OCR Yaklaşımı:

// AppStartup.cs — native binary validation before accepting any requests
public static void InitializeOcr()
{
    // Validate native library is reachable before first use
    string nativePath = RuntimeInformation.IsOSPlatform(OSPlatform.Windows)
        ? Path.Combine(AppContext.BaseDirectory, "aocr_x64.dll")
        : RuntimeInformation.IsOSPlatform(OSPlatform.Linux)
            ? "/usr/lib/libaocr.so"
            : "/usr/local/lib/libaocr.dylib";

    if (!File.Exists(nativePath))
        throw new FileNotFoundException(
            $"Asprise native binary not found: {nativePath}. " +
            "Deploy the correct platform binary before starting.");

    // Static global init — must run before any Ocr instance is created
    Ocr.SetUp();
}
C#

IronOCR Yaklaşımı:

// Program.cs — license key assignment is the entire initialization
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

// That is it.Hayırbinary validation, no path configuration, no SetUp() call.
// NuGet resolved the correct native runtime during package restore.
C#

Asprise deseni genellikle birden fazla dosyada 15-30 satırdır: bir başlangıç doğrulayıcı, bir platform anahtarı, bir dağıtım mesajı içeren bir istisna ve SetUp() çağrısı. IronOCR, bunların tümünü tek bir atama ile değiştirir. IronTesseract kurulum kılavuzu, özel tessdata yolları veya çevrimdışı çalışma gerektiren ortamlar için dağıtım yapılandırma seçeneklerini kapsar.

Yapılandırılmış Sonuç Nesneleri ile XML Çıktı Biçimi Değiştirme

Asprise, OUTPUT_FORMAT_XML belirtildiğinde yapılandırılmış çıktıyı ham bir XML dizesi olarak üretir. O dizeden kelime metnini, koordinatlarını ve güvenini çıkarmak XML ayrıştırma kodu gerektirir.IronOCR bir türlenmiş nesne grafiği döndürür.

Asprise OCR Yaklaşımı:

// Asprise: structured output is an XML string — must parse manually
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string xmlOutput = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_XML);   // Returns raw XML, not an object

    // Parse the XML manually to extract words and coordinates
    var doc = System.Xml.Linq.XDocument.Parse(xmlOutput);
    var words = doc.Descendants("word")
        .Select(w => new
        {
            Text       = (string)w.Attribute("text"),
            Confidence = (float)w.Attribute("confidence"),
            X          = (int)w.Attribute("x"),
            Y          = (int)w.Attribute("y"),
        })
        .ToList();

    foreach (var word in words)
        Console.WriteLine($"{word.Text} @ ({word.X},{word.Y}) conf={word.Confidence}");
}
finally
{
    ocr.StopEngine();
}
C#

IronOCR Yaklaşımı:

// IronOCR: structured result is a typed object — no XML parsing
var result = new IronTesseract().Read(imagePath);

foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        foreach (var word in paragraph.Words)
        {
            Console.WriteLine(
                $"{word.Text} @ ({word.X},{word.Y}) conf={word.Confidence:F1}%");
        }
    }
}
C#

XML serileştirme, öznitelik dönüşümü, şema varsayımları yok. OcrResult nesne modeli sayfalar, paragraflar, satırlar, kelimeler ve karakterleri tipli özelliklerle açığa çıkarır. sonuçları okuma kılavuzu, otomatik iş akışları için güven eşiğine göre nasıl filtreleneceğini de içeren tam hiyerarşi ve koordinat sistemi kapsamaktadır.

Çoklu Çerçeve TIFF İşleme

Asprise, tek resim dosyalarını kabul eder. Belge tarama iş akışlarında yaygın olan çoklu-çerçeve TIFF, Asprise işlemini gerçekleştiremeden önce bireysel çerçeve dosyalarına bölünmelidir.IronOCR çok kareli TIFF'leri doğrudan LoadImageFrames ile kabul eder.

Asprise OCR Yaklaşımı:

// Asprise: no multi-frame TIFF support — split frames externally first
// Using an external imaging library (e.g., System.Drawing or Magick.NET)
var frameFiles = new List<string>();
using (var tiff = System.Drawing.Image.FromFile("scanned-batch.tiff"))
{
    int frameCount = tiff.GetFrameCount(System.Drawing.Imaging.FrameDimension.Page);
    for (int i = 0; i < frameCount; i++)
    {
        tiff.SelectActiveFrame(System.Drawing.Imaging.FrameDimension.Page, i);
        string framePath = $"frame_{i}.png";
        tiff.Save(framePath);
        frameFiles.Add(framePath);
    }
}

// Now process each frame individually — sequential on LITE/STANDARD
var allText = new System.Text.StringBuilder();
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var framePath in frameFiles)
    {
        string pageText = ocr.Recognize(
            framePath,
            Ocr.RECOGNIZE_TYPE_TEXT,
            Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.AppendLine(pageText);
    }
}
finally
{
    ocr.StopEngine();
    // Clean up temporary frame files
    foreach (var f in frameFiles)
        File.Delete(f);
}
Console.WriteLine(allText.ToString());
C#

IronOCR Yaklaşımı:

// IronOCR: multi-frame TIFF loads directly — no frame splitting, no temp files
using var input = new OcrInput();
input.LoadImageFrames("scanned-batch.tiff");  // All frames, one call

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

// Access each page independently with its page number
foreach (var page in result.Pages)
    Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
C#

Asprise yaklaşımı bir harici görüntüleme bağımlılığı, geçici dosya yönetimi, manuel temizleme ve çerçeve başına ardışık işleme gerektirir. IronOCR, tüm çerçeveleri tek geçişte işler. TIFF ve GIF giriş kılavuzu, yalnızca belirli sayfaların gerekli olduğu büyük TIFF'ler için çerçeve aralığı seçimini kapsar.

Aranabilir PDF Oluşturma

Asprise herhangi bir lisans katmanında aranabilir PDF çıktısı yeteneğine sahip değildir. Taranmış bir belgeden gömülü OCR metni ile bir PDF oluşturmak, bir dış PDF kitaplığı, metin konumlarını almak için ayrı bir OCR geçişi ve manuel kaplama yapımı gerektirir. IronOCR, tanıma sonucundan doğrudan aranabilir PDF'ler üretir.

Asprise OCR Yaklaşımı:

// Asprise: no searchable PDF output — external PDF library required
// Step 1: OCR the document to get text
Ocr.SetUp();
Ocr ocr = new Ocr();
string recognizedText;
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    recognizedText = ocr.Recognize(
        "scanned-contract.jpg",
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);   // Only plain text — no position data
}
finally
{
    ocr.StopEngine();
}

// Step 2: Use an external PDF library to embed text over the image
// (iTextSharp, PdfSharp, or similar — adds another dependency and license)
// Text positioning requires coordinate data Asprise cannot provide in plain text mode
// ... 40-80 lines of PDF construction code
Console.WriteLine("Searchable PDF: not achievable with Asprise alone");
C#

IronOCR Yaklaşımı:

// IronOCR: searchable PDF in two lines — no external PDF library
var result = new IronTesseract().Read("scanned-contract.jpg");
result.SaveAsSearchablePdf("searchable-contract.pdf");

// Batch: convert a folder of scanned images to searchable PDFs
foreach (var imagePath in Directory.GetFiles("scans", "*.jpg"))
{
    var batchResult = new IronTesseract().Read(imagePath);
    string outputPath = Path.ChangeExtension(imagePath, ".searchable.pdf");
    batchResult.SaveAsSearchablePdf(outputPath);
    Console.WriteLine($"Converted: {outputPath}");
}
C#

Aranabilir PDF, doğru koordinatlarla üzerine yerleştirilen görünmez OCR metni ile özgün görüntüyü görsel katman olarak içerir— arşivleme ve uyum iş akışlarının standart formatı. aranabilir PDF nasıl yapılır kılavuzu ve aranabilir PDF örneği, uzun vadeli arşivleme için PDF/A çıktısı dahil seçenekler içerir.

Web Uygulamalarında Async OCR

Asprise'in bir async API'si yoktur. Geliştiriciler senkron çağrıları Task.Run içine sararak eşzamansız .NET uygulamalarına entegre eder, bu işlem iş parçacığı havuzu iş parçacıklarını tüketir ve engellemeyi ortadan kaldırmaz. IronOCR, yerel bir async yol sağlar.

Asprise OCR Yaklaşımı:

// Asprise: no async API — must offload to Task.Run
// This blocks a thread pool thread during the entire OCR operation
// On LITE/STANDARD, concurrent Task.Run calls = license violation
public async Task<string> ProcessUploadAsync(Stream fileStream, string fileName)
{
    string tempPath = Path.GetTempFileName();
    await using (var fs = new FileStream(tempPath, FileMode.Create))
        await fileStream.CopyToAsync(fs);

    // Task.Run wraps synchronous Asprise — occupies a thread pool thread
    // Two concurrent requests still violate LITE/STANDARD license
    return await Task.Run(() =>
    {
        Ocr ocr = new Ocr();
        try
        {
            ocr.StartEngine("eng", Ocr.SPEED_FAST);
            return ocr.Recognize(
                tempPath,
                Ocr.RECOGNIZE_TYPE_TEXT,
                Ocr.OUTPUT_FORMAT_PLAINTEXT);
        }
        finally
        {
            ocr.StopEngine();
            File.Delete(tempPath);
        }
    });
}
C#

IronOCR Yaklaşımı:

// IronOCR: native async, concurrent requests permitted on all tiers
public async Task<string> ProcessUploadAsync(Stream fileStream, string fileName)
{
    using var input = new OcrInput();
    input.LoadImage(fileStream);       // Stream input directly — no temp file

    var ocr = new IronTesseract();
    var result = await ocr.ReadAsync(input);
    return result.Text;
}
C#

IronOCR sürümü geçici dosya yazmayı, Task.Run sarmalayıcısını ve iş parçacığı engelleme davranışını ortadan kaldırır. Her birden fazla eşzamanlı istek kendi IronTesseract örneğini oluşturur; sınıf durumsuzdur ve her örnek bağımsızdır. eşzamanlı OCR kılavuzu, ReadAsync desenleri ve uzun süre çalışan toplu işlemler için iptal belirteci desteğini içerir.

Asprise OCR API'sinden IronOCR Eşleştirme Referansı

Asprise OCRIronOCR Karşılığı
asprise.ocr namespaceIronOcr namespace
Ocr.SetUp()Gerekli değil
new Ocr()new IronTesseract()
ocr.StartEngine("eng", Ocr.SPEED_FAST)Gerekli değil
ocr.StartEngine("eng+fra", speed)ocr.Language = OcrLanguage.English + OcrLanguage.French
ocr.Recognize(path, type, format)ocr.Read(path) veya ocr.Read(input)
Ocr.RECOGNIZE_TYPE_TEXTVarsayılan davranış
Ocr.RECOGNIZE_TYPE_BARCODEocr.Configuration.ReadBarCodes = true
Ocr.RECOGNIZE_TYPE_ALLocr.Configuration.ReadBarCodes = true
Ocr.OUTPUT_FORMAT_PLAINTEXTresult.Text
Ocr.OUTPUT_FORMAT_XMLresult.Pages / result.Pages[n].Words
Ocr.OUTPUT_FORMAT_PDFresult.SaveAsSearchablePdf(path)
Ocr.SPEED_FASTESTocr.Configuration.TesseractEngineMode ayarlama
Ocr.SPEED_FASTVarsayılan yapılandırma
Ocr.SPEED_SLOWDaha yüksek doğruluklu yapılandırma ayarları
ocr.StopEngine()Gerekli değil — OcrInput IDisposable
result.StartsWith("ERROR:") kontrolStandart .NET istisna işleme (try/catch)
Platforma özgü DLL (aocr_x64.dll)NuGet çalışma zamanı paketi (otomatik)
Akış girişi için manuel geçici dosyainput.LoadImage(stream) doğrudan
Çoklu-çerçeve TIFF için harici kütüphaneinput.LoadImageFrames(path)
Aranabilir PDF için harici kütüphaneresult.SaveAsSearchablePdf(path)

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

Sorun 1: Yerel İkilileri Kaldırdıktan Sonra DllNotFoundException

Asprise OCR: Asprise NuGet paketini kaldırmak ancak yerel ikili referansları (proje dosya kopyalama kurallarında, Docker COPY talimatlarında veya dağıtım senaryolarında) bırakmak, var olmayan bir ikiliye işaret eden bayat yapılandırmadan DllNotFoundException'nün yeniden ortaya çıkmasına neden olabilir.

Çözüm: aocr, libaocr veya LD_LIBRARY_PATH ayarlara atıfta bulunan herhangi bir dağıtım eserini arayın ve bunları kaldırın. IronOCR'nin karşılık gelen bir yapılandırma gereksinimi yoktur. Dockerfile'da:

# Remove: COPY aocr_x64.dll /app/
# Remove: ENV LD_LIBRARY_PATH=/app
# IronOCR: nothing to add — NuGet handles native runtime packaging
RUN dotnet restore
RUN dotnet publish -c Release -o /app/publish
Text

Çapraz platform dağıtımı için, Docker dağıtım kılavuzu, Linux konteynerlerinde IronOCR için temel imaj gereksinimlerini kapsar.

Sorun 2: Eksik Ocr.SetUp() Kaldırma Başlatmayı Kırar

Asprise OCR: Ocr.SetUp() küresel yerel başlatma yapar. Bazı kod tabanları statik bir oluşturucuda veya Startup.Configure çağırır. Taşındıktan sonra, Asprise isim alanını kaldırmak derleme hatasını kaldırır, ancak SetUp() bir istisnayı bastıran bir try/catch içine sarıldığında, kod hiçbir şeyi başlatmadan sessizce derlenebilir ve çalıştırılabilir.

Çözüm: Tüm SetUp() çağrılarını grep yapın ve tüm başlatma bloğunu kaldırın. Eşdeğer başlangıç kancasınıIronOCR lisans anahtar atamasıyla değiştirin:

grep -rn "Ocr.SetUp\|StartEngine\|StopEngine" --include="*.cs" .
SHELL
// Remove all occurrences of the engine lifecycle pattern:
// Ocr.SetUp();
// ocr.StartEngine(...);
// ocr.StopEngine();

// Replace application startup initialization with:
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
C#

Sorun 3: XML Çıktı Ayrıştırma Kodu İçin Doğrudan Yerine Koyma Yok

Asprise OCR: OUTPUT_FORMAT_XML dizeyi XDocument, XmlReader veya regeks desenleri kullanarak ayrıştıran kodun IronOCR'de eşdeğer bir XML yapısı yoktur. Asprise tarafından üretilen XML şeması doğrudan IronOCR'nin nesne modeline bağlanmaz.

Çözüm: XML ayrıştırma kodunu OcrResult üzerinde doğrudan özellik erişimi ile değiştirin. Eşleme:

// Asprise XML parsing (remove)
var words = XDocument.Parse(xmlOutput)
    .Descendants("word")
    .Select(w => new { Text = (string)w.Attribute("text"), X = (int)w.Attribute("x") });

//IronOCR object model (replace with)
var result = new IronTesseract().Read(imagePath);
var words = result.Pages
    .SelectMany(p => p.Paragraphs)
    .SelectMany(para => para.Words)
    .Select(w => new { w.Text, w.X });
C#

sonuçları okuma kılavuzu, kutuları sınırlayıcılar ile karakter düzeyinde verileri içeren tam nesne hiyerarşisini kapsar.

Sorun 4: Task.Run Sarıcılarının İş Parçacığı Havuzu Tükenmesine Neden Olması

Asprise OCR: Asprise'i Task.Run içine saran yüksek eşzamanlı web uygulamaları, OCR hacim artışlarında iş parçacığı havuzunu tüketebilir. Her sıraya giren Task.Run, OCR operasyonu süresince bir iş parçacığı havuzu iş parçacığını tutar.

Çözüm: Task.Run(() => { asprise... }) desenlerini yerel IronOCR async çağrıları ile değiştirin. Her IronTesseract örneği bağımsızdır — istek başına bir tane oluşturun:

// Remove: await Task.Run(() => { ocr.Recognize(...) });

// Replace with:
using var input = new OcrInput();
input.LoadImage(stream);
var result = await new IronTesseract().ReadAsync(input);
return result.Text;
C#

Sorun 5: Dizge Tabanlı Dil Kodu Doğrulaması

Asprise OCR: Dil kodları dize olarak iletilir ("eng", "fra", "eng+fra"). Bu dizeleri çalışma zamanında doğrulayan uygulamalar — sabit bir listeye karşı kontrol ederek, yapılandırmadan okuyarak — dize biçimi OcrLanguage enum tarzına değiştiğinde güncellenmelidir.

Çözüm: Dize dil parametrelerini OcrLanguage enum değerleriyle değiştirin. Yapılandırma odaklı dil seçimi Enum.Parse ile sorunsuz haritalanır:

// Asprise string-based (remove)
string language = config["OcrLanguage"];  // e.g. "eng+fra"
ocr.StartEngine(language, Ocr.SPEED_FAST);

//IronOCR enum-based (replace with)
// For single language from config:
var ocr = new IronTesseract();
ocr.Language = Enum.Parse<OcrLanguage>(config["OcrLanguage"]);  // e.g. "English"
var result = ocr.Read(input);
C#

çoklu diller kılavuzu geçerli tüm OcrLanguage enum değerlerini ve bunlara karşılık gelen NuGet dil paketi paketlerini listeler.

Sorun 6: Lisans Katmanı Kontrol Mantığı Artık Gerekmiyor

Asprise OCR: Bazı üretim kod tabanları, Asprise lisans katmanını algılayan ve ENTERPRISE altında çalışırken OCR işlemini dizilere ayarlayan çalışma zamanı kontrollerini içerir. Bu önlemler lisans ihlallerini önler ancak karmaşıklık ekler ve throughput'u azaltır.

Çözüm: Tüm katman algılama ve dizileme koruyucularını kaldırın. IronOCR, herhangi bir katmanda iş parçacığı kısıtlaması taşımaz. ConcurrentQueue, SemaphoreSlim veya tek iş parçacıklı dispatcher desenleri Asprise çağrılarını seri hale getirmek için kullanılır ancak taşınma sonrasında hiçbir amaca hizmet etmez:

// Remove: SemaphoreSlim _ocrLock = new SemaphoreSlim(1, 1);
// Remove: await _ocrLock.WaitAsync(); ... _ocrLock.Release();

// IronOCR: direct concurrent access, no guards needed
Parallel.ForEach(documentPaths, path =>
{
    var text = new IronTesseract().Read(path).Text;
    results[path] = text;
});
C#

Asprise OCR Geçiş Kontrol Listesi

Öncesi-Geçiş

Herhangi bir değiştirme kodu yazmadan önce Asprise kullanımını kod tabanında denetleyin:

# Find all files importing asprise namespace
grep -rn "using asprise" --include="*.cs" .

# Find all engine lifecycle calls
grep -rn "SetUp\|StartEngine\|StopEngine" --include="*.cs" .

# Find all integer constant references
grep -rn "RECOGNIZE_TYPE\|OUTPUT_FORMAT\|SPEED_FAST\|SPEED_SLOW" --include="*.cs" .

# Find native binary references in project files and deployment scripts
grep -rn "aocr\|libaocr" --include="*.csproj" --include="Dockerfile" --include="*.yml" .

# Find XML output parsing code
grep -rn "OUTPUT_FORMAT_XML\|XDocument.Parse\|Descendants.*word" --include="*.cs" .

# Find Task.Run wrappers around OCR calls
grep -rn "Task.Run.*ocr\|Task.Run.*Recognize" --include="*.cs" .
SHELL

Sonuçların envanterini çıkarın:

  • asprise.ocr içe aktaran dosyaları sayın — bunların hepsinin namespaceleri güncellenmelidir
  • Her StartEngine çağrı konumunu listeleyin — her biri Read çağrısına dönüşür
  • XML çıktı ayrıştırma kodunu belirleyin - her blok, nesne modeli değişikliği gerektirir
  • Herhangi bir lisans katmanı koruyucusunu veya dizileme sarıcılarını not edin - bunlar çıkarılabilir
  • Yerel ikili dağıtım betiklerini ve konteyner yapılandırmasını belirleyin

Kod Geçişi

  1. Tüm projelerden asprise-ocr-api NuGet paketini kaldırın
  2. OCR yapan her projeye IronOcr NuGet paketini yükleyin
  3. Tüm dosyalarda using asprise.ocr'yi using IronOcr ile değiştirin
  4. Uygulama başlatılmasında IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY" ekleyin
  5. Tüm başlangıç ve başlatma kodlarından Ocr.SetUp() çağrılarını kaldırın
  6. Her Ocr.StartEngine / Recognize / StopEngine bloğunu new IronTesseract().Read(path).Text ile değiştirin
  7. OUTPUT_FORMAT_XML ayrıştırma bloklarını result.Pages nesne gezintisi ile değiştirin
  8. OUTPUT_FORMAT_PDF geçici çözümlerini result.SaveAsSearchablePdf(path) ile değiştirin
  9. Çok kareli TIFF ayırma kodunu input.LoadImageFrames(tiffPath) ile değiştirin
  10. Akış tabanlı Task.Run sarmalayıcıları await ocr.ReadAsync(input) ile değiştirin
  11. Asprise'i eş zamanlı kullanımdan koruyan SemaphoreSlim veya serileştirme korumalarını kaldırın
  12. .csproj dosyalarından ve Docker dosyalarından yerel ikili kopyalama talimatlarını kaldırın
  13. Ortam yapılandırması ve CI betiklerinden LD_LIBRARY_PATH ayarlarını kaldırın
  14. Dize dil kodlarını ("eng", "eng+fra") OcrLanguage enum değerleriyle değiştirin
  15. result.StartsWith("ERROR:") kontrollerini try/catch blokları ile değiştirin

Geçiş Sonrası

  • dotnet build dosyasının eksik yerel kütüphaneler hakkında sıfır uyarı ile tamamlandığını doğrulayın
  • Tüm hedef ortamlarda (Windows, Linux, Docker) başlangıçta DllNotFoundException veya BadImageFormatException oluşmadığını doğrulayın
  • Temsilci bir resim üzerinde OCR çalıştırın ve metin çıktısının geçiş öncesi temel çizgiye uyduğunu doğrulayın
  • Çoklu-çerçeve TIFF işlemini test edin ve tüm sayfaların doğru sayfa numaraları ile döndüğünü doğrulayın
  • Aranabilir bir PDF oluşturun ve metnin bir PDF görüntüleyicisi içinde seçilebilir ve aranabilir olduğunu doğrulayın
  • OCR'yi çağıran herhangi bir API uç noktasına eş zamanlı HTTP istekleri gönderin ve tüm isteklerin hatasız tamamladığını doğrulayın
  • Eşzamanlı yük altında async uç noktaların sonuçları kilitlenmeden döndürdüğünü doğrulayın
  • Yapılandırılmış veri çıkarımının (kelime koordinatları ve güvenirlik) bilinen bir belge üzerindeki doğru çıktıyı ürettiğini doğrulayın
  • Geçmişe göre uygulama bellek kullanımını kontrol ederek eksik StopEngine() çağrılarından kaynaklanan yerel bellek sızıntılarını doğrulayın
  • Linux üzerinde veya bir Docker konteynerinde uygulamayı çalıştırarak çapraz platform dağıtımının ikili yapılandırma olmadan çalıştığını doğrulayın

IronOCR'a Geçişin Ana Faydaları

Dağıtım Tek Bir NuGet Referansına İndirgenmiştir. Geçişten sonra her dağıtım hedefi — geliştirme iş istasyonları, aşama sunucuları, Linux konteynerleri, CI acenteleri — aynı komutla aynı paketi kurar. Hiçbir platform algılama mantığı, mimariye özgü ikili kaynak bulma yoktur ve çalışma zamanı yol yapılandırması yoktur. Önceden manuel yerel ikili KOPYA talimatları gerektiren bir Docker görüntüsü artık dotnet restore dışında hiçbir şey gerektirmez. Linux dağıtım kılavuzu ve Azure dağıtım kılavuzu, uygulanabilir olduğunda ortam spesifik notları kapsar.

Tüm Lisans Seviyeleri Sunucu Düzeyinde Dağıtımı Açıyor. $999 Lite lisansı ASP.NET Core Web API'leri, Windows Hizmetleri, Azure Fonksiyonları, AWS Lambda ve herhangi bir başka çok iş parçacıklı .NET iş yükünü destekler. Asprise'nin 2.000 $–5.000 $+ ücret talep ettiği ENTERPRISE seviyesindeki iş parçacığı yeteneği, her IronOCR seviyesinde dahildir. Asprise ENTERPRISE'den IronOCR Lite'a geçiş yapan ekipler, ENTERPRISE tarafından sağlanmayan yeteneklere sahip olurken OCR lisans maliyetlerini azaltır — yerel PDF, yapılandırılmış çıktı, arama yapılabilir PDF oluşturma ve 125 dil.

Yapılandırılmış OCR Sonuçları XML Dize Ayrıştırmasını Değiştirir. OcrResult nesne modeli, bir belgenin tam kapsamlı yapısını açığa çıkarır: sayfalar, paragraflar, satırlar, kelimeler ve karakterler, her biri piksel hassasiyetinde sınırlayıcı kutu koordinatları ve güven skorlarıyla. Daha önce XDocument veya regex ile Asprise XML dizelerini ayrıştıran kod doğrudan özelliği erişimi haline gelir. OCR sonuçları özellikleri sayfası, koordinat sistemlerini ve otomatik kalite kapılarına göre sonuçları nasıl filtreleyeceğinizi kapsar.

Yerleşik Ön İşleme Dış Görüntü Bağımlılıklarını Kaldırır. OcrInput üzerinden kullanılabilen ön işleme hattı — Deskew, DeNoise, Contrast, Binarize, Sharpen, Dilate, Erode, Scale, Invert ve DeepCleanBackgroundNoise — Asprise entegrasyonlarının gerektirdiği dış görüntü kütüphanesini ortadan kaldırır. Bu bağımlılığı kaldırmak, lisans endişesini ortadan kaldırır, derleme ayakizini azaltır ve ön işleme yapılandırmasını OCR yapılandırmasıyla aynı kod dosyasında doğrudan yan yana getirir. ön işleme özellikleri sayfası ve görüntü kalitesi düzeltme kılavuzu, her filtreyi ne zaman uygulayacağını ve her birinin düşük kaliteli taramalarda sağladığı ölçülebilir doğruluk artışlarını kapsar.

Yerel Eşzamanlılık ve Gerçek Paralellik Üretim Kapasitesini Artırır. ReadAsync, hiçbir iş parçacığı havuzu engellenmeden standart async/await deseniyle entegrasyon sağlar. Parallel.ForEach veya PLINQ ile paralel toplu işlem, mevcut çekirdeklerle orantılı olarak ölçeklenir. Asprise LITE/STANDARD tarafından sırayla çalıştırılması zorunlu olan bir belge grubu — her biri 2 saniye olan 100 belge 3 dakikadan fazla sürer —IronOCR ile 8 çekirdekli bir makinede yaklaşık 25 saniyede çalışır. çok iş parçacıklı örnek, paralel verimlilik desenlerini göstermektedir ve ConcurrentBag için iş parçacığı güvenli sonuç toplama nasıl kullanılır.

Binary Dağılım Olmadan 125'ten Fazla Dil. Dil paketleri, NuGet paketleri olarak yüklenir - dotnet add package IronOcr.Languages.Arabic, dotnet add package IronOcr.Languages.Japanese - ve her diğer bağımlılık gibi uygulama ile birlikte dağıtılır. Elle doldurulacak tessdata klasörü yok, bulunacak dil ikili dosyası yok ve hedef makinede gereken yol yapılandırması yok. diller dizini 125+'tan fazla mevcut dil paketini listeler.

Lütfen dikkate alın: Asprise OCR, PDFSharp, Tesseract ve iText kendi sahiplerinin tescilli markalarıdır. Bu site, Asprise, Google, empira Software GmbH veya iText Group ile ilişkilendirilmemiş, onaylanmamış veya desteklenmemiştir. Tüm ürün adları, logolar ve markalar kendi sahiplerinin malıdır. 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.
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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez