Altbilgi içeriğine atla
VIDEOLAR

Aspose.OCR'den IronOCR'a Geçiş

Bu kılavuz .NET geliştiricilerini, Aspose.OCR'dan IronOCR'a tam bir geçişe yönlendirir. Paket değişimini, ad alanı değişikliklerini, lisans başlatmasını ve gerçek Aspose.OCR kullanım modellerinden alınan dört somut kod geçiş örneğini kapsamaktadır — tanıma ayarları konfigürasyonu, alan algılama modları, güven temelli filtrelemeyle toplu tanıma ve yapılandırılmış çıktı yönetimi. Her örnek, mevcut kodunuzu tahmin etmeden çevirebilmeniz için Aspose.OCR yaklaşımınıIronOCR eşdeğerine gösterir.

Aspose.OCR'dan Neden Geçiş Yapmalısınız

Ekiplerin Aspose.OCR'yi terk etme nedenleri iki baskı noktasında kümelenir: abonelik faturalandırma modeli ve manuel tanıma hattı tarafından getirilen yapılandırma yükü.

Abonelik maliyetleri bir tavan olmadan birleşir. Aspose.OCR'nin süresiz lisans seviyesi yoktur. Geliştirici Küçük İşletme lisansı, geliştirici başına yıllık 999 dolardır. Beş kişilik bir ekip, üç yıl boyunca yenileme yaparsa, tek bir iş mantığı yazmadan önce 14.985 dolar öder. IronOCR'nin Professional seviyesi, 2.999 dolardır — aynı kapsama, sonsuza kadar, yenileme zorunluluğu olmadan. Finansman, neden bir OCR bağımlılığının yıllık bir SaaS aboneliği gibi yenilendiğini sorduğunda matematik kaçınılmaz hale gelir.

Her tanıma çağrısı bir ayar nesneleri töreni gerektirir. Aspose.OCR, yapılandırma yüzeyini RecognitionSettings, DocumentRecognitionSettings, DetectAreasMode ve PreprocessingFilter koleksiyonuna ayırır. RecognizeImage çağırmadan önce, bir ayar nesnesi oluşturur, doldurur ve açıkça geçirirsiniz.IronOCR bunu .Read() içinde toplar. Fark, çağrı başına küçüktür; Kod tabanı boyunca birikir.

Alan algılama modu seçimi elle ve sonuç odaklıdır. Aspose.OCR, her belge türü için geliştiricinin seçmesi gereken DetectAreasMode değerlerini (COMBINE, DOCUMENT, TABLE, NONE) açığa çıkarır. Yapılandırılmış bir formda yanlış mod seçmek, tanıma doğruluğunu düşürür. IronOCR, belge düzenini otomatik olarak analiz eder ve yapılandırılmış sonucu — paragraflar, satırlar, kelimeler — öngörüleri önceden yapmayı gerektirmeden açığa çıkarır.

Toplu işlem, sonuç listelerini el ile yönetmeyi gerektirir. Aspose.OCR'de, tanınan sayfaların bir grubunu aranabilir bir PDF veya yapılandırılmış veri dosyası olarak kaydetmek, RecognitionResult nesnelerini bir List<RecognitionResult> içinde biriktirip, ardından bu listeyi SaveMultipageDocument'e geçirmek anlamına gelir. Liste iş parçacığı sizin sorumluluğunuzdadır. IronOCR, tek bir OcrInput nesnesi üzerinden birden fazla girdi kabul eder ve tüm sayfaları kapsayan bir OcrResult üretir.

Çıktı formatı değiştirme, birden çok API yüzeyine dokunur. Aspose.OCR'de JSON, XML veya düz metne dışa aktarmak, her biri SaveMultipageDocument'e geçirilen ayrı bir SaveFormat enum değeri gerektirir. Bunları kaydetmeden önce güvene göre filtrelemek, listeyi yinelemek ve her RecognitionAreasConfidence dizisini incelemek gerektirir. IronOCR, bir sonuç nesnesinde result.Text, result.Confidence ve result.Pages'i açığa çıkarır — güven filtresi, tek satırlık bir LINQ ifadesidir.

IronOCR lisanslama modeli, yenileme riskini tamamen ortadan kaldırır. Satın alınan bir lisans sizin kalıcı olarak kalır. Güncellemeler bir yıl dahil edilir; O andan sonra, alınan son sürüm, uyum maruziyeti olmadan üretimde çalışmaya devam eder. Ödenmemiş bir ödemeyle dağıtımınızı bozan bir senaryo yoktur.

Temel Sorun

Aspose.OCR, tanıma konfigürasyonunu her çağrıda oluşturulması, doldurulması ve geçirilmesi gereken bir ayar nesnesine bağlar. Mod, dil, filtreler ve alan stratejisi bu nesnenin tüm özellikleridir:

// Aspose.OCR: build a settings object for every recognition call
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT, // must choose the right mode
    RecognizeSingleLine = false,
    AutoSkew = true
};
var result = api.RecognizeImage("form.jpg", settings);
string text = result.RecognitionText;
// Aspose.OCR: build a settings object for every recognition call
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT, // must choose the right mode
    RecognizeSingleLine = false,
    AutoSkew = true
};
var result = api.RecognizeImage("form.jpg", settings);
string text = result.RecognitionText;
Imports Aspose.OCR

' Aspose.OCR: build a settings object for every recognition call
Dim api As New AsposeOcr()
Dim settings As New RecognitionSettings With {
    .Language = Language.Eng,
    .DetectAreasMode = DetectAreasMode.DOCUMENT, ' must choose the right mode
    .RecognizeSingleLine = False,
    .AutoSkew = True
}
Dim result = api.RecognizeImage("form.jpg", settings)
Dim text As String = result.RecognitionText
$vbLabelText   $csharpLabel

IronOCR, tek bir .Read() çağrısı kullanır. Yapılandırma gerektiğinde IronTesseract örneğinde yaşar, çağrı başına nesneler üzerinde değil:

// IronOCR: one call, no settings object required
var text = new IronTesseract().Read("form.jpg").Text;
// IronOCR: one call, no settings object required
var text = new IronTesseract().Read("form.jpg").Text;
Imports IronOcr

Dim text As String = New IronTesseract().Read("form.jpg").Text
$vbLabelText   $csharpLabel

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

Aşağıdaki tablo, bir geçiş kararı sırasında en çok önem arz eden boyutlar boyunca iki kütüphaneyi eşleştirir.

Özellik Aspose.OCR IronOCR
Lisans modeli Yıllık abonelik (süresiz seçenek yok) Tek seferlik süresiz satın alma
1-geliştirici maliyeti $999/yıl $999 bir kez
10-geliştirici maliyeti Yıllık 4.995 $ (Site lisansı) Tek seferlik 2.999 $ (Professional)
Lisans bitişinin sonucu Yeni derlemeler dağıtılamaz, güvenlik yamaları yok Hiçbiri - satın alınan sürüm süresiz çalışır
Birincil OCR sınıfı AsposeOcr IronTesseract
Ayarlar nesnesi gerekli Evet (RecognitionSettings veya DocumentRecognitionSettings) Hayır — gelişmiş senaryolar için isteğe bağlı OcrInput
Alan tespiti Elle DetectAreasMode enum seçimi Otomatik düzen analizi
Ön işlem Elle PreprocessingFilter koleksiyonu Otomatik, opsiyonel açıkça geçersiz kılma ile
PDF girişi RecognizePdf() aracılığıyla standart PDF'ler .Read() veya OcrInput.LoadPdf() aracılığıyla yerel
Şifre korumalı PDF Aspose.PDF gerektirir (ayrı lisans) Yerleşik Password: parametresi
Aranabilir PDF çıktısı SaveMultipageDocument(path, SaveFormat.Pdf, list) result.SaveAsSearchablePdf(path)
Güven değer result.RecognitionAreasConfidence.Average() (dizi) result.Confidence (tek çift, 0-100)
Kelime seviyesinde yapısal veri RecognitionAreasRectangles üzerinden alan düzeyinde geometri X, Y, Genişlik, Yükseklik, Güven ile result.Words
Sayfa seviyesinde yapısal veri Açığa çıkarılmamış result.Pages ile paragraflar, satırlar, kelimeler, karakterler
Çok dillilik aynı anda Çağrı başına tek dil OcrLanguage.French + OcrLanguage.German
Dahil edilen diller Ana pakette 130+ 125+ NuGet dil paketleri aracılığıyla
Barkod okuma Mevcut değil Yerleşik (ocr.Configuration.ReadBarCodes = true)
Thread güvenliği İş parçacığı başına yeni örnek önerilir Tamamen iş parçacığı güvenli, tek bir paylaşılan örnek
TIFF çoklu çerçeve Yerel olarak değil input.LoadImageFrames("file.tiff")
hOCR ihracat Sınırlı result.SaveAsHocrFile(path)
Platformlar arası NuGet Evet Evet (Windows, Linux, macOS, Docker, Azure, AWS)
NuGet paket sayısı 1 ana + isteğe bağlı dil paketleri 1 ana + isteğe bağlı dil paketleri

Hızlı Başlangıç: Aspose.OCR'dan IronOCR'a Geçiş

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

Aspose.OCR'yi kaldırın:

dotnet remove package Aspose.OCR
dotnet remove package Aspose.OCR
SHELL

NuGet kullanarak IronOCR'u yükleyin:

dotnet add package IronOcr

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

Tüm Aspose.OCR ad alanı içe aktarımlarını değiştirin:

// Before (Aspose.OCR)
using Aspose.OCR;
using Aspose.OCR.Models;
using Aspose.OCR.Models.PreprocessingFilters;

// After (IronOCR)
using IronOcr;
// Before (Aspose.OCR)
using Aspose.OCR;
using Aspose.OCR.Models;
using Aspose.OCR.Models.PreprocessingFilters;

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

Adım 3: Lisansa İzin Verin

Aspose dosya tabanlı lisans çağrısını kaldırın ve yerine IronOCR dize anahtarını koyun. Bu işlemi uygulama başlatıldığında yerleştirin — işlem başına bir kere, istek başına değil:

// Remove Aspose license setup
// var license = new Aspose.OCR.License();
// license.SetLicense("Aspose.OCR.lic");

// Add IronOCR license at startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

// Production pattern: read from environment variable
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
// Remove Aspose license setup
// var license = new Aspose.OCR.License();
// license.SetLicense("Aspose.OCR.lic");

// Add IronOCR license at startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";

// Production pattern: read from environment variable
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE");
' Remove Aspose license setup
' Dim license As New Aspose.OCR.License()
' license.SetLicense("Aspose.OCR.lic")

' Add IronOCR license at startup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"

' Production pattern: read from environment variable
IronOcr.License.LicenseKey = Environment.GetEnvironmentVariable("IRONOCR_LICENSE")
$vbLabelText   $csharpLabel

Kod Göç Örnekleri

Tanıma Ayarları Yapılandırması

Aspose.OCR, tüm tanıma davranışını RecognitionSettings nesnesinde merkezileştirir. Dil, alan tespit modu, tek satır bayrağı ve eşik orada özellik olarak bulunur. Her doküman türü veya çağrı deseni için taze şekilde oluşturursunuz.

Aspose.OCR Yaklaşımı:

// Configuring recognition settings for a structured form
var api = new AsposeOcr();

var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    RecognizeSingleLine = false,
    AutoSkew = true,
    RecognitionAreas = new List<Rectangle>
    {
        new Rectangle(0, 0, 800, 100)  // header zone
    }
};

var result = api.RecognizeImage("structured-form.jpg", settings);
Console.WriteLine(result.RecognitionText);
// Configuring recognition settings for a structured form
var api = new AsposeOcr();

var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    RecognizeSingleLine = false,
    AutoSkew = true,
    RecognitionAreas = new List<Rectangle>
    {
        new Rectangle(0, 0, 800, 100)  // header zone
    }
};

var result = api.RecognizeImage("structured-form.jpg", settings);
Console.WriteLine(result.RecognitionText);
Imports System
Imports System.Collections.Generic
Imports AsposeOcr

' Configuring recognition settings for a structured form
Dim api As New AsposeOcr()

Dim settings As New RecognitionSettings With {
    .Language = Language.Eng,
    .DetectAreasMode = DetectAreasMode.DOCUMENT,
    .RecognizeSingleLine = False,
    .AutoSkew = True,
    .RecognitionAreas = New List(Of Rectangle) From {
        New Rectangle(0, 0, 800, 100)  ' header zone
    }
}

Dim result = api.RecognizeImage("structured-form.jpg", settings)
Console.WriteLine(result.RecognitionText)
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

// Recognition behavior configured once on the IronTesseract instance
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

// Region targeting replaces RecognitionAreas in RecognitionSettings
var headerRegion = new CropRectangle(0, 0, 800, 100);
using var input = new OcrInput();
input.LoadImage("structured-form.jpg", headerRegion);

var result = ocr.Read(input);
Console.WriteLine(result.Text);
// Recognition behavior configured once on the IronTesseract instance
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

// Region targeting replaces RecognitionAreas in RecognitionSettings
var headerRegion = new CropRectangle(0, 0, 800, 100);
using var input = new OcrInput();
input.LoadImage("structured-form.jpg", headerRegion);

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

' Recognition behavior configured once on the IronTesseract instance
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English

' Region targeting replaces RecognitionAreas in RecognitionSettings
Dim headerRegion As New CropRectangle(0, 0, 800, 100)
Using input As New OcrInput()
    input.LoadImage("structured-form.jpg", headerRegion)

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

Çağrı başına bir ayar nesnesi oluşturulmasına gerek yok. Dil IronTesseract örneğinde bulunur; bölge hedefleme yükleme zamanında OcrInput üzerinde bulunur. DetectAreasMode ve RecognizeSingleLine kararları otomatik olarak motor tarafından yönetilir. Bölge tabanlı OCR ile ilgili ayrıntılı rehberlik için, bölge tabanlı OCR nasıl yapılır rehberine bakın.

Alan Tespit Modu Geçişi

Aspose.OCR, her tanıma çağrısında DetectAreasMode değerini seçmenizi gerektirir. COMBINE, metni farklı düzen bölgelerinden birleştirir, DOCUMENT, resmi standart bir belge olarak ele alır, TABLE, ızgara düzenleri için optimize eder. Yanlış modu belge türü için seçmek yanlış hizalanmış veya eksik çıktılara neden olur.

Aspose.OCR Yaklaşımı:

// Three separate calls with different modes for different document types
var api = new AsposeOcr();

// For a document with mixed prose and table content
var docSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.COMBINE,
    Language = Language.Eng
};

// For a pure tabular document
var tableSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.TABLE,
    Language = Language.Eng
};

// For a single-column text document
var linearSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    Language = Language.Eng
};

string mixedResult = api.RecognizeImage("mixed-layout.jpg", docSettings).RecognitionText;
string tableResult = api.RecognizeImage("data-table.jpg", tableSettings).RecognitionText;
string linearResult = api.RecognizeImage("text-document.jpg", linearSettings).RecognitionText;
// Three separate calls with different modes for different document types
var api = new AsposeOcr();

// For a document with mixed prose and table content
var docSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.COMBINE,
    Language = Language.Eng
};

// For a pure tabular document
var tableSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.TABLE,
    Language = Language.Eng
};

// For a single-column text document
var linearSettings = new RecognitionSettings
{
    DetectAreasMode = DetectAreasMode.DOCUMENT,
    Language = Language.Eng
};

string mixedResult = api.RecognizeImage("mixed-layout.jpg", docSettings).RecognitionText;
string tableResult = api.RecognizeImage("data-table.jpg", tableSettings).RecognitionText;
string linearResult = api.RecognizeImage("text-document.jpg", linearSettings).RecognitionText;
Imports AsposeOcr

' Three separate calls with different modes for different document types
Dim api As New AsposeOcr()

' For a document with mixed prose and table content
Dim docSettings As New RecognitionSettings With {
    .DetectAreasMode = DetectAreasMode.COMBINE,
    .Language = Language.Eng
}

' For a pure tabular document
Dim tableSettings As New RecognitionSettings With {
    .DetectAreasMode = DetectAreasMode.TABLE,
    .Language = Language.Eng
}

' For a single-column text document
Dim linearSettings As New RecognitionSettings With {
    .DetectAreasMode = DetectAreasMode.DOCUMENT,
    .Language = Language.Eng
}

Dim mixedResult As String = api.RecognizeImage("mixed-layout.jpg", docSettings).RecognitionText
Dim tableResult As String = api.RecognizeImage("data-table.jpg", tableSettings).RecognitionText
Dim linearResult As String = api.RecognizeImage("text-document.jpg", linearSettings).RecognitionText
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

// Single API surface handles all layout types automatically
var ocr = new IronTesseract();

// Same code path for every document type
var mixedResult = ocr.Read("mixed-layout.jpg").Text;
var tableResult = ocr.Read("data-table.jpg").Text;
var linearResult = ocr.Read("text-document.jpg").Text;

// For table documents, structured data is immediately available
var result = ocr.Read("data-table.jpg");
foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Block at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}");
    }
}
// Single API surface handles all layout types automatically
var ocr = new IronTesseract();

// Same code path for every document type
var mixedResult = ocr.Read("mixed-layout.jpg").Text;
var tableResult = ocr.Read("data-table.jpg").Text;
var linearResult = ocr.Read("text-document.jpg").Text;

// For table documents, structured data is immediately available
var result = ocr.Read("data-table.jpg");
foreach (var page in result.Pages)
{
    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Block at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}");
    }
}
Imports System

' Single API surface handles all layout types automatically
Dim ocr As New IronTesseract()

' Same code path for every document type
Dim mixedResult As String = ocr.Read("mixed-layout.jpg").Text
Dim tableResult As String = ocr.Read("data-table.jpg").Text
Dim linearResult As String = ocr.Read("text-document.jpg").Text

' For table documents, structured data is immediately available
Dim result = ocr.Read("data-table.jpg")
For Each page In result.Pages
    For Each paragraph In page.Paragraphs
        Console.WriteLine($"Block at ({paragraph.X}, {paragraph.Y}): {paragraph.Text}")
    Next
Next
$vbLabelText   $csharpLabel

IronOCR mod seçme kararını tamamen ortadan kaldırır. Motor, düzeni analiz eder ve sonucu Pages, Paragraphs, Lines ve Words hiyerarşisi aracılığıyla açığa çıkarır. Sonuçları okuma rehberi, belge düzeni ayrıştırma için tam yapılandırılmış sonuç modelini nasıl gezileceğini kapsar. Tabloya özel çıkarım desenleri için, tablo okuma nasıl yapılır rehberine bakın.

Güven Tabanlı Filtreleme ile Toplu Tanıma

Aspose.OCR toplu iş akışları, bir listede RecognitionResult nesneleri biriktirir. Güven filtresi, bu listeyi yinelemek ve bir sonuç kabul etmeden önce bölge başına ortalamayı hesaplamayı gerektirir. Liste, açıkça yönetilmeli ve birden fazla sayfası tek bir dosya olarak çıktılama istemeniz halinde SaveMultipageDocument'e geçirilmelidir.

Aspose.OCR Yaklaşımı:

// Batch recognition with confidence filtering before output
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT
};

string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");
var acceptedResults = new List<RecognitionResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = api.RecognizeImage(path, settings);

    // Confidence is an array of per-region values — must average manually
    float avgConfidence = result.RecognitionAreasConfidence != null
        ? result.RecognitionAreasConfidence.Average()
        : 0f;

    if (avgConfidence >= 0.70f)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({avgConfidence:P0} confidence)");
    }
}

// Save accepted pages as a single searchable PDF
if (acceptedResults.Any())
{
    api.SaveMultipageDocument("high-confidence-invoices.pdf",
        SaveFormat.Pdf, acceptedResults);
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");
// Batch recognition with confidence filtering before output
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.DOCUMENT
};

string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");
var acceptedResults = new List<RecognitionResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = api.RecognizeImage(path, settings);

    // Confidence is an array of per-region values — must average manually
    float avgConfidence = result.RecognitionAreasConfidence != null
        ? result.RecognitionAreasConfidence.Average()
        : 0f;

    if (avgConfidence >= 0.70f)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({avgConfidence:P0} confidence)");
    }
}

// Save accepted pages as a single searchable PDF
if (acceptedResults.Any())
{
    api.SaveMultipageDocument("high-confidence-invoices.pdf",
        SaveFormat.Pdf, acceptedResults);
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");
Imports System
Imports System.IO
Imports System.Linq
Imports Aspose.OCR

' Batch recognition with confidence filtering before output
Dim api As New AsposeOcr()
Dim settings As New RecognitionSettings With {
    .Language = Language.Eng,
    .DetectAreasMode = DetectAreasMode.DOCUMENT
}

Dim documentPaths As String() = Directory.GetFiles("invoice-archive", "*.jpg")
Dim acceptedResults As New List(Of RecognitionResult)()
Dim rejectedPaths As New List(Of String)()

For Each path In documentPaths
    Dim result = api.RecognizeImage(path, settings)

    ' Confidence is an array of per-region values — must average manually
    Dim avgConfidence As Single = If(result.RecognitionAreasConfidence IsNot Nothing,
                                     result.RecognitionAreasConfidence.Average(),
                                     0.0F)

    If avgConfidence >= 0.70F Then
        acceptedResults.Add(result)
    Else
        rejectedPaths.Add(path)
        Console.WriteLine($"Rejected: {path} ({avgConfidence:P0} confidence)")
    End If
Next

' Save accepted pages as a single searchable PDF
If acceptedResults.Any() Then
    api.SaveMultipageDocument("high-confidence-invoices.pdf",
                              SaveFormat.Pdf, acceptedResults)
End If

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}")
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

// Batch recognition with confidence filtering using unified result model
var ocr = new IronTesseract();
string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");

var acceptedResults = new List<OcrResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = ocr.Read(path);

    // Single confidence value — no averaging required
    if (result.Confidence >= 70.0)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({result.Confidence:F1}% confidence)");
    }
}

// Save accepted pages — each result becomes a page in the output PDF
if (acceptedResults.Any())
{
    using var outputInput = new OcrInput();
    foreach (var path in documentPaths
        .Where(p => !rejectedPaths.Contains(p)))
    {
        outputInput.LoadImage(path);
    }
    var combined = ocr.Read(outputInput);
    combined.SaveAsSearchablePdf("high-confidence-invoices.pdf");
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");
// Batch recognition with confidence filtering using unified result model
var ocr = new IronTesseract();
string[] documentPaths = Directory.GetFiles("invoice-archive", "*.jpg");

var acceptedResults = new List<OcrResult>();
var rejectedPaths = new List<string>();

foreach (var path in documentPaths)
{
    var result = ocr.Read(path);

    // Single confidence value — no averaging required
    if (result.Confidence >= 70.0)
    {
        acceptedResults.Add(result);
    }
    else
    {
        rejectedPaths.Add(path);
        Console.WriteLine($"Rejected: {path} ({result.Confidence:F1}% confidence)");
    }
}

// Save accepted pages — each result becomes a page in the output PDF
if (acceptedResults.Any())
{
    using var outputInput = new OcrInput();
    foreach (var path in documentPaths
        .Where(p => !rejectedPaths.Contains(p)))
    {
        outputInput.LoadImage(path);
    }
    var combined = ocr.Read(outputInput);
    combined.SaveAsSearchablePdf("high-confidence-invoices.pdf");
}

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}");
Imports IronTesseract
Imports System.IO
Imports System.Linq

' Batch recognition with confidence filtering using unified result model
Dim ocr As New IronTesseract()
Dim documentPaths As String() = Directory.GetFiles("invoice-archive", "*.jpg")

Dim acceptedResults As New List(Of OcrResult)()
Dim rejectedPaths As New List(Of String)()

For Each path In documentPaths
    Dim result = ocr.Read(path)

    ' Single confidence value — no averaging required
    If result.Confidence >= 70.0 Then
        acceptedResults.Add(result)
    Else
        rejectedPaths.Add(path)
        Console.WriteLine($"Rejected: {path} ({result.Confidence:F1}% confidence)")
    End If
Next

' Save accepted pages — each result becomes a page in the output PDF
If acceptedResults.Any() Then
    Using outputInput As New OcrInput()
        For Each path In documentPaths.Where(Function(p) Not rejectedPaths.Contains(p))
            outputInput.LoadImage(path)
        Next
        Dim combined = ocr.Read(outputInput)
        combined.SaveAsSearchablePdf("high-confidence-invoices.pdf")
    End Using
End If

Console.WriteLine($"Accepted: {acceptedResults.Count}, Rejected: {rejectedPaths.Count}")
$vbLabelText   $csharpLabel

result.Confidence, 0 ile 100 arasında değişen tek bir double'dir. Aspose RecognitionAreasConfidence dizisi ortalaması, sürüme göre değişen bir aralıkta bir float döndürür — karşılaştırma eşiği, taşınma sırasında ayarlanmalıdır. Güven puanları rehberi, belge doğrulama iş akışları için kelime başına, satır başına ve sayfa başına güven değerlerini belgelendirir. Yüksek hacimli toplu desenler için, çoklu iş parçacığı örneğine bakın.

Yapılandırılmış Çıktı İşleme

Aspose.OCR, formatna özgü SaveFormat enum değerleriyle SaveMultipageDocument aracılığıyla yapılandırılmış veri çıktısı verir. JSON çıktısı, makine tarafından okunabilir bir dosya yazar; XML çıktısı, açıklamalı bir belge dosyası yazar. Ham yapılandırılmış veriye — kelime konumlarına, satır sınırlarına — erişmek, RecognitionAreasRectangles dizisinin yinelemesini gerektirir, bu da kelime düzeyinde değil, bölge düzeyinde geometri döndürür.

Aspose.OCR Yaklaşımı:

// Structured output: JSON and XML via SaveMultipageDocument
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.COMBINE
};

var results = new List<RecognitionResult>();
foreach (var path in new[] { "page1.jpg", "page2.jpg", "page3.jpg" })
{
    results.Add(api.RecognizeImage(path, settings));
}

// Export as JSON
api.SaveMultipageDocument("output.json", SaveFormat.Json, results);

// Export as XML
api.SaveMultipageDocument("output.xml", SaveFormat.Xml, results);

// Accessing area-level geometry (not word-level)
foreach (var result in results)
{
    var areas = result.RecognitionAreasRectangles;
    if (areas != null)
    {
        foreach (var area in areas)
        {
            Console.WriteLine($"Area at ({area.X},{area.Y}): {area.Width}x{area.Height}");
        }
    }
    // No direct word-level collection with individual confidence values
}
// Structured output: JSON and XML via SaveMultipageDocument
var api = new AsposeOcr();
var settings = new RecognitionSettings
{
    Language = Language.Eng,
    DetectAreasMode = DetectAreasMode.COMBINE
};

var results = new List<RecognitionResult>();
foreach (var path in new[] { "page1.jpg", "page2.jpg", "page3.jpg" })
{
    results.Add(api.RecognizeImage(path, settings));
}

// Export as JSON
api.SaveMultipageDocument("output.json", SaveFormat.Json, results);

// Export as XML
api.SaveMultipageDocument("output.xml", SaveFormat.Xml, results);

// Accessing area-level geometry (not word-level)
foreach (var result in results)
{
    var areas = result.RecognitionAreasRectangles;
    if (areas != null)
    {
        foreach (var area in areas)
        {
            Console.WriteLine($"Area at ({area.X},{area.Y}): {area.Width}x{area.Height}");
        }
    }
    // No direct word-level collection with individual confidence values
}
Imports System
Imports System.Collections.Generic
Imports AsposeOcr

' Structured output: JSON and XML via SaveMultipageDocument
Dim api As New AsposeOcr()
Dim settings As New RecognitionSettings With {
    .Language = Language.Eng,
    .DetectAreasMode = DetectAreasMode.COMBINE
}

Dim results As New List(Of RecognitionResult)()
For Each path In New String() {"page1.jpg", "page2.jpg", "page3.jpg"}
    results.Add(api.RecognizeImage(path, settings))
Next

' Export as JSON
api.SaveMultipageDocument("output.json", SaveFormat.Json, results)

' Export as XML
api.SaveMultipageDocument("output.xml", SaveFormat.Xml, results)

' Accessing area-level geometry (not word-level)
For Each result In results
    Dim areas = result.RecognitionAreasRectangles
    If areas IsNot Nothing Then
        For Each area In areas
            Console.WriteLine($"Area at ({area.X},{area.Y}): {area.Width}x{area.Height}")
        Next
    End If
    ' No direct word-level collection with individual confidence values
Next
$vbLabelText   $csharpLabel

IronOCR Yaklaşımı:

// Structured output: navigate a rich result object model
var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("page1.jpg");
input.LoadImage("page2.jpg");
input.LoadImage("page3.jpg");

var result = ocr.Read(input);

// Export as searchable PDF (preserves layout)
result.SaveAsSearchablePdf("output.pdf");

// Export as hOCR (XHTML with bounding box coordinates — feeds downstream tools)
result.SaveAsHocrFile("output.hocr");

// Word-level structured access — direct collection, no indirection
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words, " +
                      $"{page.Confidence:F1}% confidence");

    foreach (var word in page.Words)
    {
        Console.WriteLine($"  '{word.Text}' at ({word.X},{word.Y}) " +
                          $"size {word.Width}x{word.Height} — {word.Confidence:F1}%");
    }
}

// Paragraph-level layout for document structure analysis
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Paragraph at ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}
// Structured output: navigate a rich result object model
var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("page1.jpg");
input.LoadImage("page2.jpg");
input.LoadImage("page3.jpg");

var result = ocr.Read(input);

// Export as searchable PDF (preserves layout)
result.SaveAsSearchablePdf("output.pdf");

// Export as hOCR (XHTML with bounding box coordinates — feeds downstream tools)
result.SaveAsHocrFile("output.hocr");

// Word-level structured access — direct collection, no indirection
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words, " +
                      $"{page.Confidence:F1}% confidence");

    foreach (var word in page.Words)
    {
        Console.WriteLine($"  '{word.Text}' at ({word.X},{word.Y}) " +
                          $"size {word.Width}x{word.Height} — {word.Confidence:F1}%");
    }
}

// Paragraph-level layout for document structure analysis
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Paragraph at ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}
Imports IronTesseract

' Structured output: navigate a rich result object model
Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadImage("page1.jpg")
    input.LoadImage("page2.jpg")
    input.LoadImage("page3.jpg")

    Dim result = ocr.Read(input)

    ' Export as searchable PDF (preserves layout)
    result.SaveAsSearchablePdf("output.pdf")

    ' Export as hOCR (XHTML with bounding box coordinates — feeds downstream tools)
    result.SaveAsHocrFile("output.hocr")

    ' Word-level structured access — direct collection, no indirection
    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber}: {page.Words.Length} words, " &
                          $"{page.Confidence:F1}% confidence")

        For Each word In page.Words
            Console.WriteLine($"  '{word.Text}' at ({word.X},{word.Y}) " &
                              $"size {word.Width}x{word.Height} — {word.Confidence:F1}%")
        Next
    Next

    ' Paragraph-level layout for document structure analysis
    For Each paragraph In result.Pages(0).Paragraphs
        Console.WriteLine($"Paragraph at ({paragraph.X},{paragraph.Y}): {paragraph.Text}")
    Next
End Using
$vbLabelText   $csharpLabel

IronOCR, her sayfadaki doğrudan bir Words koleksiyonu olarak kelime düzeyinde veriyi açığa çıkarır ve kelime başına bireysel Confidence değerleriyle sağlar. Aspose.OCR'nin RecognitionAreasRectangles'ı, kelime düzeyinde güven çözümlemesi yapmadan bölge geometrisini sağlar. hOCR ihracatı, çerçeve kutusu açıklamalı çıktı tüketen araçlarla uyumlu XHTML üretir — format ayrıntıları için hOCR ihracat rehberine bakın. Tam yapılandırılmış sonuç modeli için OcrResult API referansı, OcrResult.Page, OcrResult.Paragraph, OcrResult.Line ve OcrResult.Word üzerindeki her özelliği belgeler.

Aspose.OCR API'den IronOCR'a Haritalama Referansı

Aspose.OCR IronOCR Karşılığı
AsposeOcr IronTesseract
RecognitionSettings IronTesseract ve OcrInput üzerindeki özellikler
DocumentRecognitionSettings OcrInput ile LoadPdf() / LoadPdfPages()
api.RecognizeImage(path, settings) ocr.Read(path) veya ocr.Read(input)
api.RecognizePdf(path, settings) ocr.Read(path) veya ocr.Read(input)
result.RecognitionText result.Text
result.RecognitionAreasConfidence.Average() result.Confidence (tek çift, 0-100)
result.RecognitionAreasRectangles result.Words (X, Y, Genişlik, Yükseklik, Güven ile)
RecognitionResult OcrResult
Language.Eng OcrLanguage.English
DetectAreasMode.COMBINE Otomatik — enum gerekli değil
DetectAreasMode.TABLE Otomatik — düzen için result.Pages[n].Paragraphs kullanın
DetectAreasMode.DOCUMENT Otomatik — motor düzen analizi yapar
settings.RecognizeSingleLine = true ocr.Configuration.WhiteListCharacters veya tek bölge kırpma
settings.RecognitionAreas = new List<Rectangle> { r } input.LoadImage(path, cropRectangle)
settings.AutoSkew = true Otomatik ya da açık input.Deskew()
PreprocessingFilter.AutoSkew() input.Deskew()
PreprocessingFilter.AutoDenoising() input.DeNoise()
PreprocessingFilter.ContrastCorrectionFilter() input.Contrast()
PreprocessingFilter.Binarize() input.Binarize()
PreprocessingFilter.Threshold(value) input.Binarize() (otomatik eşik)
PreprocessingFilter.Median() input.DeNoise()
PreprocessingFilter.Scale(factor) input.Scale(percent)
PreprocessingFilter.Invert() input.Invert()
PreprocessingFilter.Rotate(angle) input.Rotate(angle)
api.SaveMultipageDocument(path, SaveFormat.Pdf, list) result.SaveAsSearchablePdf(path)
api.SaveMultipageDocument(path, SaveFormat.Docx, list) hOCR dışa aktarımı aracılığıyla: result.SaveAsHocrFile(path)
api.SaveMultipageDocument(path, SaveFormat.Json, list) result.Pages gezin ve doğrudan seri hale getirin
api.PreprocessImage(path, filters) input.GetPages()[0].SaveAsImage(path)
api.CalculateSkew(imagePath) input.Deskew() (tıespit edilen açıyı otomatik olarak uygular)
new Aspose.OCR.License().SetLicense("file.lic") IronOcr.License.LicenseKey = "key"
settings.ThreadsCount = n Varsayılan olarak iş parçacığı güvenli; Parallel.ForEach kullanın

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

Sorun 1: DetectAreasMode Doğrudan Eşdeğere Sahip Değil

Aspose.OCR: Kod, belirli düzen davranışı bekleyen settings.DetectAreasMode = DetectAreasMode.TABLE veya DetectAreasMode.COMBINE ayarlar. Enumu kaldırmak, IronOCR'nin aynı düzeni nasıl ele aldığını sorusunu bırakar.

Çözüm: Enum tamamen kaldırılmalıdır.IronOCR düzen analizini otomatik olarak gerçekleştirir. Algılanan düzen yapısını incelemeniz gerekiyorsa, result.Pages[n].Paragraphs gezin — her paragraf bir X, Y, Genişlik, Yükseklik sınır kutusunu ve içerdiği metni taşır. Açıkça tablo çıkarımı için, tablo okuma nasıl yapılır rehberine bakın.

// No mode to set — read directly and inspect the structure
var result = new IronTesseract().Read("data-table.jpg");
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Block ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}
// No mode to set — read directly and inspect the structure
var result = new IronTesseract().Read("data-table.jpg");
foreach (var paragraph in result.Pages[0].Paragraphs)
{
    Console.WriteLine($"Block ({paragraph.X},{paragraph.Y}): {paragraph.Text}");
}
Imports IronTesseract

Dim result = New IronTesseract().Read("data-table.jpg")
For Each paragraph In result.Pages(0).Paragraphs
    Console.WriteLine($"Block ({paragraph.X},{paragraph.Y}): {paragraph.Text}")
Next
$vbLabelText   $csharpLabel

Sorun 2: RecognitionAreasConfidence Eşik Uyumsuzluğu

Aspose.OCR: Mevcut kod result.RecognitionAreasConfidence.Average()'i, 0.75f gibi bir eşik ile karşılaştırır. IronOCR'in result.Confidence farklı bir ölçeğe sahiptir.

Çözüm: result.Confidence, 0-100 arası bir yüzde. Ölçeği dönüştürmek için Aspose eşiğinizi 100 ile çarpın: 0.75f 75.0 haline gelir. Sonra tüm karşılaştırma mantığını güncelleyin:

// Aspose.OCR threshold pattern
// if (result.RecognitionAreasConfidence.Average() >= 0.75f)

//IronOCR equivalent — multiply old threshold by 100
var result = new IronTesseract().Read("document.jpg");
if (result.Confidence >= 75.0)
{
    Console.WriteLine($"High confidence result: {result.Text}");
}
// Aspose.OCR threshold pattern
// if (result.RecognitionAreasConfidence.Average() >= 0.75f)

//IronOCR equivalent — multiply old threshold by 100
var result = new IronTesseract().Read("document.jpg");
if (result.Confidence >= 75.0)
{
    Console.WriteLine($"High confidence result: {result.Text}");
}
Imports IronOcr

Dim result = New IronTesseract().Read("document.jpg")
If result.Confidence >= 75.0 Then
    Console.WriteLine($"High confidence result: {result.Text}")
End If
$vbLabelText   $csharpLabel

Sorun 3: SaveMultipageDocument JSON/XML Çıktısının Doğrudan Bir Yöntemi Yok

Aspose.OCR: api.SaveMultipageDocument("out.json", SaveFormat.Json, results), tanıma meta verisi ile bir JSON dosyası yazar. Bu çıktıyı alt takımlar tarafından tüketen ekipler denk eşdeğer bulmalıdır.

Çözüm: IronOCR'nin bir SaveFormat.Json eşdeğer yöntemi yoktur. Yerine result.Pages gezin ve System.Text.Json ile seri hale getirin. Bu, şema üzerinde tam kontrol sağlar:

using var input = new OcrInput();
input.LoadImage("document.jpg");
var result = new IronTesseract().Read(input);

// Build your own structured JSON from the result model
var pageData = result.Pages.Select(p => new
{
    PageNumber = p.PageNumber,
    Confidence = p.Confidence,
    Text = p.Text,
    Words = p.Words.Select(w => new
    {
        Text = w.Text,
        X = w.X,
        Y = w.Y,
        Width = w.Width,
        Height = w.Height,
        Confidence = w.Confidence
    }).ToArray()
}).ToArray();

File.WriteAllText("output.json",
    System.Text.Json.JsonSerializer.Serialize(pageData,
        new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));
using var input = new OcrInput();
input.LoadImage("document.jpg");
var result = new IronTesseract().Read(input);

// Build your own structured JSON from the result model
var pageData = result.Pages.Select(p => new
{
    PageNumber = p.PageNumber,
    Confidence = p.Confidence,
    Text = p.Text,
    Words = p.Words.Select(w => new
    {
        Text = w.Text,
        X = w.X,
        Y = w.Y,
        Width = w.Width,
        Height = w.Height,
        Confidence = w.Confidence
    }).ToArray()
}).ToArray();

File.WriteAllText("output.json",
    System.Text.Json.JsonSerializer.Serialize(pageData,
        new System.Text.Json.JsonSerializerOptions { WriteIndented = true }));
Imports IronOcr
Imports System.IO
Imports System.Text.Json

Using input As New OcrInput()
    input.LoadImage("document.jpg")
    Dim result = New IronTesseract().Read(input)

    ' Build your own structured JSON from the result model
    Dim pageData = result.Pages.Select(Function(p) New With {
        .PageNumber = p.PageNumber,
        .Confidence = p.Confidence,
        .Text = p.Text,
        .Words = p.Words.Select(Function(w) New With {
            .Text = w.Text,
            .X = w.X,
            .Y = w.Y,
            .Width = w.Width,
            .Height = w.Height,
            .Confidence = w.Confidence
        }).ToArray()
    }).ToArray()

    File.WriteAllText("output.json",
        JsonSerializer.Serialize(pageData,
            New JsonSerializerOptions With {.WriteIndented = True}))
End Using
$vbLabelText   $csharpLabel

Gömülü koordinatlarla birlikte araçların ayrıştırabileceği XHTML çıktısı için, result.SaveAsHocrFile("output.hocr") daha yakın bir anlamsal eşdeğeridir.

Sorun 4: DocumentRecognitionSettings.StartPage 0 Based Index Kullanıyor

Aspose.OCR: DocumentRecognitionSettings.StartPage = 2, üçüncü sayfa anlamına gelir (0 tabanlıdır). Bu, Aspose'dan IronOCR'ye geçişlerde en yaygın bir ters of-by-one hatasıdır.

Çözüm: IronOCR, her yerde 1-tabanlı sayfa indeksleme kullanır. Her StartPage değerine 1 ekleyin ve bitiş sayfasını buna göre yeniden hesaplayın. Üretimden önce bunu yakalamak için bilinen çok sayfalı bir PDF'ye karşı hedefli bir test yazın:

// Aspose.OCR: StartPage = 2 means the 3rd page (0-based)
// var settings = new DocumentRecognitionSettings { StartPage = 2, PagesNumber = 3 };

// IronOCR: page 3 is index 3 (1-based), range of 3 ends at page 5
using var input = new OcrInput();
input.LoadPdfPages("document.pdf", 3, 5);
var result = new IronTesseract().Read(input);
// Aspose.OCR: StartPage = 2 means the 3rd page (0-based)
// var settings = new DocumentRecognitionSettings { StartPage = 2, PagesNumber = 3 };

// IronOCR: page 3 is index 3 (1-based), range of 3 ends at page 5
using var input = new OcrInput();
input.LoadPdfPages("document.pdf", 3, 5);
var result = new IronTesseract().Read(input);
Imports IronOcr

' Aspose.OCR: StartPage = 2 means the 3rd page (0-based)
' Dim settings As New DocumentRecognitionSettings With {.StartPage = 2, .PagesNumber = 3}

' IronOCR: page 3 is index 3 (1-based), range of 3 ends at page 5
Using input As New OcrInput()
    input.LoadPdfPages("document.pdf", 3, 5)
    Dim result = New IronTesseract().Read(input)
End Using
$vbLabelText   $csharpLabel

Sorun 5: RecognizeSingleLine Doğrudan Bayrağı Yok

Aspose.OCR: settings.RecognizeSingleLine = true, motoru tüm görüntüyü tek bir metin satırı olarak ele alması için yönlendirir. Bu, etiket tanıma, alan çıkarma ve diğer sabit formatlı girdiler için kullanılır.

Çözüm: Motorun tek satırlık bir görüntü üzerinde tam düzen algılamasını engelleyen @--CODE-3329--@@ kullanarak metin satırını kesin olarak izole edin. Makine tarafından okunabilir bölgeler veya etiket formatları için, belirli belgeleri okuma rehberi uygun yaklaşımı kapsar:

// Aspose.OCR: single-line flag
// var settings = new RecognitionSettings { RecognizeSingleLine = true };

// IronOCR: crop to the line region — layout detection skips automatically
var lineRegion = new CropRectangle(10, 45, 600, 30); // x, y, width, height
using var input = new OcrInput();
input.LoadImage("label.jpg", lineRegion);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text.Trim());
// Aspose.OCR: single-line flag
// var settings = new RecognitionSettings { RecognizeSingleLine = true };

// IronOCR: crop to the line region — layout detection skips automatically
var lineRegion = new CropRectangle(10, 45, 600, 30); // x, y, width, height
using var input = new OcrInput();
input.LoadImage("label.jpg", lineRegion);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text.Trim());
Imports IronOcr

Dim lineRegion As New CropRectangle(10, 45, 600, 30) ' x, y, width, height
Using input As New OcrInput()
    input.LoadImage("label.jpg", lineRegion)
    Dim result = New IronTesseract().Read(input)
    Console.WriteLine(result.Text.Trim())
End Using
$vbLabelText   $csharpLabel

Sorun 6: Her İş Parçacığı için Gerekmeyen Aspose.OCR Örnekleri

Aspose.OCR: Belge, paralel işlemde iş parçacığı güvenliği sorunlarından kaçınmak için her iş parçacığı başına yeni bir AsposeOcr() örneği oluşturmanızı önerir. Mevcut kod, örnekleri Parallel.ForEach lamdaları içinde oluşturur.

Çözüm: IronTesseract iş parçacığı güvenlidir. Tek bir örnek paralel iş yüklerini taşır. İş parçacığı başına başlangıçtan kaldırın ve bir örneği paylaşın:

// Aspose.OCR: per-thread instance due to thread-safety concerns
// Parallel.ForEach(paths, path => { var api = new AsposeOcr(); ... });

// IronOCR: single shared instance, fully thread-safe
var ocr = new IronTesseract();

Parallel.ForEach(documentPaths, path =>
{
    var result = ocr.Read(path);
    Console.WriteLine($"{Path.GetFileName(path)}: {result.Confidence:F1}%");
});
// Aspose.OCR: per-thread instance due to thread-safety concerns
// Parallel.ForEach(paths, path => { var api = new AsposeOcr(); ... });

// IronOCR: single shared instance, fully thread-safe
var ocr = new IronTesseract();

Parallel.ForEach(documentPaths, path =>
{
    var result = ocr.Read(path);
    Console.WriteLine($"{Path.GetFileName(path)}: {result.Confidence:F1}%");
});
Imports System.IO
Imports IronOcr
Imports System.Threading.Tasks

Dim ocr As New IronTesseract()

Parallel.ForEach(documentPaths, Sub(path)
    Dim result = ocr.Read(path)
    Console.WriteLine($"{Path.GetFileName(path)}: {result.Confidence:F1}%")
End Sub)
$vbLabelText   $csharpLabel

Aspose.OCR Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanındaki tüm Aspose.OCR referanslarını denetleyin:

grep -rn "using Aspose.OCR" --include="*.cs" .
grep -rn "AsposeOcr\|RecognitionSettings\|DocumentRecognitionSettings" --include="*.cs" .
grep -rn "DetectAreasMode\|SaveFormat\|RecognitionResult" --include="*.cs" .
grep -rn "RecognitionAreasConfidence\|RecognitionText\|RecognizePdf" --include="*.cs" .
grep -rn "PreprocessingFilter\|SaveMultipageDocument" --include="*.cs" .
grep -rn "Aspose.OCR.License\|SetLicense" --include="*.cs" .
grep -rn "using Aspose.OCR" --include="*.cs" .
grep -rn "AsposeOcr\|RecognitionSettings\|DocumentRecognitionSettings" --include="*.cs" .
grep -rn "DetectAreasMode\|SaveFormat\|RecognitionResult" --include="*.cs" .
grep -rn "RecognitionAreasConfidence\|RecognitionText\|RecognizePdf" --include="*.cs" .
grep -rn "PreprocessingFilter\|SaveMultipageDocument" --include="*.cs" .
grep -rn "Aspose.OCR.License\|SetLicense" --include="*.cs" .
SHELL

Her birini kategorisine göre belgeleyin: tanıma çağrıları, ayarlar nesneleri, ön işleme hatları, çıktı çağrıları ve lisans başlatma. Kullanılan tüm DetectAreasMode değerlerini not edin — bunlar, hangi düzen geçiş yolunun uygulanacağını belirler. Tüm SaveFormat enum değerlerini kaydedin — her PDF olmayan format, yukarıda Sorun 3'teki özel seri hale getirme yaklaşımını gerektirir.

Kod Geçişi

  1. Çözümdeki tüm projelerden Aspose.OCR NuGet paketini kaldırın
  2. Tüm projelere IronOcr NuGet paketini yükleyin
  3. using Aspose.OCR; ve using Aspose.OCR.Models;'yi using IronOcr; ile değiştirin
  4. Uygulama başlangıcında new Aspose.OCR.License().SetLicense("file.lic") ile IronOcr.License.LicenseKey = "key" yer değiştirin
  5. new AsposeOcr() ile new IronTesseract() yer değiştirin
  6. Tüm RecognitionSettings ve DocumentRecognitionSettings yapım bloklarını kaldırın
  7. Tüm DetectAreasMode enum referanslarını kaldırın — hiçbir eşdeğer gerekmez
  8. api.RecognizeImage(path, settings) ile ocr.Read(path) yer değiştirin
  9. api.RecognizePdf(path, settings)'yi ocr.Read(path) veya ocr.Read(input) ile input.LoadPdf() kullanarak değiştirin
  10. result.RecognitionText ile result.Text yer değiştirin
  11. result.RecognitionAreasConfidence.Average()'yi result.Confidence ile değiştirin ve eski eşiği %100 ile çarpın
  12. api.SaveMultipageDocument(path, SaveFormat.Pdf, list) ile result.SaveAsSearchablePdf(path) yer değiştirin
  13. api.SaveMultipageDocument(path, SaveFormat.Json, list)'yi result.Pages'ın doğrudan seri hale getirilmesi ile değiştirin
  14. Tüm PreprocessingFilter zincirlerini OcrInput yöntem çağrılarına dönüştürün (API eşleme tablosuna bakın)
  15. DocumentRecognitionSettings.StartPage'ü 0 tabanlıdan 1 tabanlıya güncelleyin (her değere 1 ekleyin)
  16. Her iş parçacığında AsposeOcr instansı oluşturmayı kaldırın — tek bir IronTesseract örneği paylaşın

Geçiş Sonrası Testler

  • Üretimde kullanmakta olan her doküman türünden temsil edici bir örnek üzerinde OCR çalıştırın ve karakter sayılarını temel Aspose.OCR çıktısı ile karşılaştırın.
  • Güven değerlerini doğrulayın:IronOCR 0–100 döndürür; tüm eşik karşılaştırmalarının yeni skalayı kullandığından emin olun
  • 10+ sayfalık bir PDF üzerinde sayfa aralığı seçim testini, 1-tabanlı sayfa numarası kullanarak yapın ve doğru sayfaların döndürüldüğünü doğrulayın.
  • Aspose.PDF yüklü olmadan şifre korumalı PDF içe alımını test edin — bağımlılık istisnası olmadığını doğrulayın.
  • Her kullanılan DetectAreasMode için beklenen çıktıyla result.Text eşleşmesini doğrulayın (COMBINE, TABLE, DOCUMENT)
  • JSON çıktı yolunu test edin: result.Pages'ı seri hale getirip herhangi bir sonraki tüketiciye karşı şemayı doğrulayın
  • Paralel toplu işlemciyi çalıştırın ve iş parçacığı istisnası olmadığını doğrulayın (paylaşılan IronTesseract örneği)
  • Aranabilir PDF çıktısının bir PDF görüntüleyicide açıldığını doğrulayın ve metinlerin doğru konumlarda seçilebilir olduğunu
  • Her dağıtım ortamında lisans anahtarının hatasız başlatıldığını doğrulayın (ASP.NET başlangıcı, Azure İşlevi, Docker konteyneri)
  • Önceden işlenmiş TIFF girdilerinin input.LoadImageFrames() üzerinden beklenen çıktıyı hâlâ ürettiğinden emin olun

IronOCR'a Geçişin Ana Faydaları

İlk günden itibaren öngörülebilir toplam sahip olma maliyeti. 2.999 $ Professional lisansı, 10 geliştirici ve 10 proje arasında yıllık yenileme olmadan kapsamaktadır. Finans, OCR çizgi kalemini bir kere kapatır. Mühendis eklemek, yeni projeler başlatmak veya ürün ömrünü uzatmak bütçe etkisi sıfırdır — takip edilecek lisans katmanı matematiği, yenileme tarihi yok ve kaçırılan bir ödeme yüzünden uyumluluk risk yoktur. IronOCR lisanslama sayfası her seviyenin ne kapsadığını belgeler.

Niyet ifade eden, altyapı değil, tanıma çağrıları. Geçişten sonra, her tanıma çağrısı ocr.Read("document") olur. Her Aspose.OCR çağrısının öncesinde yer alan RecognitionSettings yapımı, DetectAreasMode seçimi ve PreprocessingFilter doldurması tamamen ortadan kalkar. Kod tabanının OCR katmanını okuyan yeni mühendisler, iş niyetini — "bu belgenin okunması" — ve iş başlamadan önce monte edilen bir yapılandırma nesnesi yerine görüyor. IronTesseract API referansı, kullanılabilir her yapılandırma özelliği belgeler.

İkinci bir ürün olmadan şifreli PDF desteği. Kurumsal belge hatları rutin olarak şifre korumalı PDF'lerle ilgilenir. Geçişten sonra, input.LoadPdf("doc.pdf", Password: "secret") onları yerel olarak işler. Yönetilecek bir Aspose.PDF aboneliği yok, bakım gerektiren bir şifre çözme-görüntü hattı yok ve izlenecek ikinci bir yenileme tarihi yok. Hattaki her PDF formatı bir paketten geçer, bir lisans ve bir kod yolu. PDF giriş nasıl yapılır sayfa aralıklarını, bitişik olmayan seçimi ve akış girişini kapsar.

Kelime ve karakter düzeyinde yapılandırılmış sonuç verileri. result.Pages[n].Words, her kelimenin kendi sınır kutusunu, metnini ve bireysel güven puanını taşıdığı bir koleksiyon döndürür. Aspose.OCR'nin alan seviyesi geometrisi bölgeleri kapsar, bireysel jetonları değil. Geçişten sonra, belge düzeni ayrıştırıcılar, form alan çıkarıcıları ve fatura işleme hatları, ek işlem adımları olmadan kelime başına konumlandırmaya erişim sağlayabilir. Tüm sonuç hiyerarşisi için, OCR sonuç özellikleri sayfasına bakın.

Tüm platformlarda tek paket dağıtımı. IronOCR, Windows, Linux, macOS, Docker, Azure App Service ve AWS Lambda üzerinde çalışır, platform-özel yapılandırma olmadan, tek bir NuGet paketi olarak piyasaya sunulur. Aspose.OCR platformlar arasında çalışır ancak konteyner ortamlarında yerel kütüphane ayarlamaları gerektirebilir. Geçişten sonra, bir OCR hizmeti için Dockerfile, paket yüklemenin ötesinde OCR-özel kurulum adımları olmadan standart bir .NET temel görüntüsüdür. Dağıtım rehberleri Docker, Azure, AWS ve Linux kapsar.

OCR ile aynı geçişte barkod okuma. ocr.Configuration.ReadBarCodes = true ayarlandığında, aynı görüntüden bir motor geçişiyle barkodlar, QR kodlar ve Kod 128 sembolleri çıkarır. Aspose.OCR'nin barkod yeteneği yoktur — ayrı bir barkod kütüphanesi gereklidir. Geçişten sonra, basılı metin ile barkodları karıştıran belgeler (gönderi etiketleri, envanter formları, etkinlik biletleri) tek bir çağrı ile ve result.Barcodes üzerinde sonuçlarla ele alınır. Desteklenen sembolojiler için barkod OCR nasıl yapılır rehberine bakın.

Lütfen dikkate alınAspose ve Tesseract kendi sahiplerinin tescilli markalarıdır. Bu site, Aspose Pty Ltd veya Google ile ilişkilendirilmemiş, onaylanmamış veya desteklenmemiştir. 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

Aspose.OCR for .NET'ten neden 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.

Aspose.OCR for .NET'ten IronOCR'a geçişteki ana kod değişiklikleri nelerdir?

Aspose.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, Aspose.OCR for .NET'in 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, Aspose.OCR for .NET'in 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.

Aspose.OCR for .NET'ten IronOCR'a geçiş, dağıtım altyapısında değişiklikler gerektirir mi?

IronOCR, Aspose.OCR for .NET'ten 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 Aspose.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ı, Aspose.OCR for .NET'ten 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.

Aspose.OCR for .NET'ten 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