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
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
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
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
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")
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)
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
Ç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
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
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}")
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}")
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
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
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
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
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
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
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
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)
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" .
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
- Çözümdeki tüm projelerden
Aspose.OCRNuGet paketini kaldırın - Tüm projelere
IronOcrNuGet paketini yükleyin using Aspose.OCR;veusing Aspose.OCR.Models;'yiusing IronOcr;ile değiştirin- Uygulama başlangıcında
new Aspose.OCR.License().SetLicense("file.lic")ileIronOcr.License.LicenseKey = "key"yer değiştirin new AsposeOcr()ilenew IronTesseract()yer değiştirin- Tüm
RecognitionSettingsveDocumentRecognitionSettingsyapım bloklarını kaldırın - Tüm
DetectAreasModeenum referanslarını kaldırın — hiçbir eşdeğer gerekmez api.RecognizeImage(path, settings)ileocr.Read(path)yer değiştirinapi.RecognizePdf(path, settings)'yiocr.Read(path)veyaocr.Read(input)ileinput.LoadPdf()kullanarak değiştirinresult.RecognitionTextileresult.Textyer değiştirinresult.RecognitionAreasConfidence.Average()'yiresult.Confidenceile değiştirin ve eski eşiği %100 ile çarpınapi.SaveMultipageDocument(path, SaveFormat.Pdf, list)ileresult.SaveAsSearchablePdf(path)yer değiştirinapi.SaveMultipageDocument(path, SaveFormat.Json, list)'yiresult.Pages'ın doğrudan seri hale getirilmesi ile değiştirin- Tüm
PreprocessingFilterzincirleriniOcrInputyöntem çağrılarına dönüştürün (API eşleme tablosuna bakın) DocumentRecognitionSettings.StartPage'ü 0 tabanlıdan 1 tabanlıya güncelleyin (her değere 1 ekleyin)- Her iş parçacığında
AsposeOcrinstansı oluşturmayı kaldırın — tek birIronTesseractö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
DetectAreasModeiçin beklenen çıktıylaresult.Texteş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.
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.

