IRONSOFTWAREHOME
FILMY

Migracja z Aspose.OCR do IronOCR

Kannaopat Udonpant
Kannapat Udonpant
Updated: 20 czerwca 2026

Ten przewodnik przeprowadza programistów .NET przez proces pełnej migracji z Aspose.OCR do IronOCR. Obejmuje to zamianę pakietów, zmiany przestrzeni nazw, inicjalizację licencji oraz cztery konkretne przykłady migracji kodu zaczerpnięte z rzeczywistych wzorców użytkowania Aspose.OCR — konfigurację ustawień rozpoznawania, tryby wykrywania obszarów, rozpoznawanie wsadowe z filtrowaniem opartym na pewności oraz obsługę wyników strukturalnych. Każdy przykład pokazuje podejście Aspose.OCR wraz z odpowiednikiem IronOCR, dzięki czemu można przetłumaczyć istniejący kod bez zgadywania.

Dlaczego warto przejść z Aspose.OCR

Powody, dla których zespoły rezygnują z Aspose.OCR, skupiają się wokół dwóch głównych kwestii: modelu rozliczeniowego opartego na subskrypcji oraz obciążenia związanego z konfiguracją, wynikającego z ręcznego procesu rozpoznawania.

Koszty subskrypcji kumulują się bez ograniczeń. Aspose.OCR nie oferuje licencji wieczystej. Licencja Developer Small Business kosztuje 999 USD rocznie na programistę. Pięcioosobowy zespół, przedłużający umowę na trzy lata, płaci 14 985 dolarów, zanim napisze choćby jedną linię kodu logiki biznesowej. Poziom Professional w IronOCR kosztuje jednorazowo 2999 USD — ten sam zakres na zawsze, bez obowiązku odnawiania. Kwestia matematyczna staje się nieunikniona, gdy dział finansowy pyta, dlaczego zależność OCR odnawia się co roku, podobnie jak subskrypcja SaaS.

Kazde wywolanie rozpoznawania wymaga ceremonii obslugi obiektow ustawien. Aspose.OCR rozdziela swoja przestrzen konfiguracyjna na RecognitionSettings, DocumentRecognitionSettings, DetectAreasMode oraz kolekcje PreprocessingFilter. Zanim mozna wywolac RecognizeImage, nalezy skonstruowac obiekt ustawien, wypelnic go i przekazac jawnie.IronOCR sprowadza to do .Read(). Różnica jest niewielka na jedno wywołanie; gromadzi się w całym kodzie źródłowym.

Wybor trybu wykrywania obszaru jest reczny i konsekwentny. Aspose.OCR wystawia wartosci DetectAreasMode (COMBINE, DOCUMENT, TABLE, NONE), ktore programista musi wybrac dla kazdego typu dokumentu. Niewłaściwy tryb w formularzu strukturalnym obniża dokładność rozpoznawania.IronOCR automatycznie analizuje układ dokumentu i udostępnia uporządkowany wynik — akapity, wiersze, słowa — bez konieczności wcześniejszego deklarowania trybu.

Przetwarzanie wsadowe wymaga recznego zarzadzania listami wynikowymi. Zapisanie partii rozpoznanych stron jako przeszukiwalnego pliku PDF lub strukturalnego pliku danych w Aspose.OCR oznacza gromadzenie obiektow RecognitionResult do List<RecognitionResult>, a nastepnie przekazanie tej listy do SaveMultipageDocument. Za uporządkowanie listy odpowiadasz Ty.IronOCR akceptuje wiele wejsc poprzez pojedynczy obiekt OcrInput i generuje jeden OcrResult obejmujacy wszystkie strony.

Przelaczanie formatu wyjsciowego dotyka wielu powierzchni API. Eksportowanie do JSON, XML lub czystego tekstu w Aspose.OCR kazde wymaga osobnej wartosci wyliczenia SaveFormat przekazanej do SaveMultipageDocument. Filtrowanie tych wynikow wedlug pewnosci przed zapisaniem wymaga iterowania listy i sprawdzania kazdej tablicy RecognitionAreasConfidence.IronOCR wystawia result.Text, result.Confidence i result.Pages na pojedynczym obiekcie wynikowym — filtrowanie pewnosci jest jednolinijkowym wyrazeniem LINQ.

Model licencjonowania IronOCR całkowicie eliminuje ryzyko związane z odnowieniem. Zakupiona licencja należy do Ciebie na stałe. Aktualizacje są dostępne przez rok; Następnie ostatnia otrzymana wersja nadal działa w środowisku produkcyjnym bez narażania zgodności. Nie ma sytuacji, w której brak płatności uniemożliwiłby wdrożenie.

Podstawowy problem

Aspose.OCR wiąże konfigurację rozpoznawania z obiektem ustawień, który musi być utworzony, wypełniony i przekazany przy każdym wywołaniu. Tryb, język, filtry i strategia obszarowa są właściwościami tego obiektu:

// 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;

IronOCR uzywa pojedynczego wywolania .Read(). Konfiguracja odbywa sie na instancji IronTesseract, gdy jest potrzebna, a nie na obiekcie pojedynczego wywolania:

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

##IronOCR a Aspose.OCR: porównanie funkcji

Poniższa tabela przedstawia porównanie obu bibliotek pod kątem czynników, które mają największe znaczenie przy podejmowaniu decyzji o migracji.

FunkcjaAspose.OCRIronOCR
Model licencjiRoczna subskrypcja (brak opcji wieczystej)Wieczyste, jednorazowe zakupy
Koszt 1 programisty999 USD/rok$999 raz
Koszt 10 programistów4995 USD/rok (licencja na witrynę)2999 USD jednorazowo (wersja Professional)
Konsekwencje wygaśnięcia licencjiNie można wdrażać nowych kompilacji, brak poprawek bezpieczeństwaBrak — wersja zakupiona działa bezterminowo
Główna klasa OCRAsposeOcrIronTesseract
Wymagany obiekt SettingsTak (RecognitionSettings lub DocumentRecognitionSettings)Nie — opcjonalne OcrInput dla zaawansowanych scenariuszy
Wykrywanie obszarówRęczny wybor wyliczenia DetectAreasModeAutomatyczna analiza układu
Przetwarzanie wstępneRęczna kolekcja PreprocessingFilterAutomatyczne z opcjonalnym jawnym nadpisaniem
Plik wejściowy PDFStandardowe PDF-y za posrednictwem RecognizePdf()Natywne za pomoca .Read() lub OcrInput.LoadPdf()
Plik PDF chroniony hasłemWymaga Aspose.PDF (oddzielna licencja)Wbudowany parametr Password:
Wynik w formacie PDF z możliwością wyszukiwaniaSaveMultipageDocument(path, SaveFormat.Pdf, list)result.SaveAsSearchablePdf(path)
Wartość pewnościresult.RecognitionAreasConfidence.Average() (tablica)result.Confidence (pojedyncza wartosc zmiennoprzecinkowa, 0–100)
Dane strukturalne na poziomie słówGeometria poziomu obszaru za pomoca RecognitionAreasRectanglesresult.Words z X, Y, Szerokosc, Wysokosc, Pewnosc
Dane strukturalne na poziomie stronyNieujawnioneresult.Pages z akapitami, liniami, slowami, znakami
Wielojęzyczne tłumaczenie symultaniczneJeden język na wywołanieOcrLanguage.French + OcrLanguage.German
Obsługiwane językiPonad 130 w pakiecie głównymPonad 125 pakietów językowych dostępnych za pośrednictwem NuGet
Odczytywanie BarCodeNiedostępneWbudowane (ocr.Configuration.ReadBarCodes = true)
Bezpieczeństwo wątkówZalecane jest utworzenie nowej instancji dla każdego wątkuW pełni bezpieczna dla wątków, pojedyncza wspólna instancja
TIFF wieloklatkowyNie jest to język ojczystyinput.LoadImageFrames("file.tiff")
eksport hOCROgraniczoneresult.SaveAsHocrFile(path)
Wielopłatformowy NuGetTakTak (Windows, Linux, macOS, Docker, Azure, AWS)
Liczba pakietów NuGet1 główny + opcjonalne pakiety językowe1 główny + opcjonalne pakiety językowe

Szybki start: Migracja z Aspose.OCR do IronOCR

Krok 1: Zastąp pakiet NuGet

Usuń Aspose.OCR:

dotnet remove package Aspose.OCR
SHELL

Zainstaluj IronOCR z NuGet:

dotnet add package IronOcr

Krok 2: Aktualizacja przestrzeni nazw

Zamień wszystkie importy przestrzeni nazw Aspose.OCR:

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

// After (IronOCR)
using IronOcr;

Krok 3: Inicjalizacja licencji

Usuń odniesienie do licencji opartej na pliku Aspose i zastąp je kluczem IronOCR. Umieść to przy uruchomieniu aplikacji — raz na proces, a nie raz na żądanie:

// 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");

Przykłady migracji kodu

Konfiguracja ustawień rozpoznawania

Aspose.OCR centralizuje cale zachowanie w rozpoznawaniu w obiekcie RecognitionSettings. Język, tryb wykrywania obszaru, flaga pojedynczej linii i próg są tam dostępne jako właściwości. Tworzysz go od nowa dla każdego typu dokumentu lub wzorca wywołania.

Podejście Aspose.OCR:

// 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);

Podejście IronOCR:

// 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);

Nie ma obiektu ustawień do utworzenia dla każdego wywołania. Jezyk jest ustawiany na instancji IronTesseract; celowanie regionu odbywa sie na OcrInput w chwili ladowania. Decyzje DetectAreasMode i RecognizeSingleLine sa podejmowane automatycznie przez silnik. Szczegółowe wskazówki dotyczące OCR opartego na regionach można znaleźć w przewodniku dotyczącym OCR opartego na regionach.

Migracja trybu wykrywania obszaru

Aspose.OCR wymaga wybrania wartosci DetectAreasMode przed kazdym wywolaniem rozpoznawania. COMBINE laczy tekst z roznych regionow ukladu, DOCUMENT traktuje obraz jako standardowy dokument, TABLE optymalizuje dla ukladow siatkowych. Wybranie niewłaściwego trybu dla danego typu dokumentu powoduje nieprawidłowe wyrównanie lub brak wyników.

Podejście Aspose.OCR:

// 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;

Podejście IronOCR:

// 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}");
    }
}

IronOCR całkowicie eliminuje konieczność wyboru trybu. Silnik analizuje uklad i wystawia wynik poprzez hierarchie Pages, Paragraphs, Lines i Words. Przewodnik po wynikach odczytu opisuje, jak poruszać się po pełnym modelu wyników strukturalnych w celu analizy układu dokumentu. W przypadku wzorców ekstrakcji dotyczących tabel zapoznaj się z instrukcją odczytu tabel.

Rozpoznawanie partii z filtrowaniem opartym na pewności

Przeplywy pracy wsadowej Aspose.OCR akumuluja obiekty RecognitionResult w liscie. Filtrowanie pewnosci wymaga iterowania tej listy i obliczenia sredniej dla kazdego regionu przed zaakceptowaniem wyniku. Lista musi byc zarzadzana jawnie i przekazana do SaveMultipageDocument, jesli chcesz wyprowadzic wiele stron jako pojedynczy plik.

Podejście Aspose.OCR:

// 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}");

Podejście IronOCR:

// 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}");

result.Confidence jest pojedynczym double w zakresie od 0 do 100. Srednia dla tablicy RecognitionAreasConfidence w Aspose zwraca float w zakresie zmieniajacym sie w zaleznosci od wersji — prog porownawczy wymaga dostosowania podczas migracji. Wskaźniki pewności określają wartości pewności dla poszczególnych słów, wierszy i stron w procesach walidacji dokumentów. W przypadku wzorców przetwarzania dużych partii danych zobacz przykład wielowątkowości.

Obsługa wyników w formacie strukturalnym

Aspose.OCR wyprowadza strukturalne dane przez SaveMultipageDocument z wartosciami wyliczenia SaveFormat specyficznymi dla formatu. Wyjscie JSON zapisuje plik czytelny maszynowo; wyjscie XML zapisuje plik dokumentu z adnotacjami. Dostep do surowych danych strukturalnych — polozenia slow, granic linii — wymaga iterowania RecognitionAreasRectangles, co zwraca geometrie na poziomie regionu, a nie slowa.

Podejście Aspose.OCR:

// 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
}

Podejście IronOCR:

// 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}");
}

IronOCR wystawia dane na poziomie slowa jako bezposrednia kolekcje Words na kazdej stronie, z indywidualnymi wartosciami Confidence na slowo. Aspose.OCR's RecognitionAreasRectangles zapewnia geometrie regionu bez podzialu pewnosci na poziomie slowa. Eksport hOCR generuje kod XHTML zgodny z narzędziami wykorzystującymi dane wyjściowe opatrzone adnotacjami o ramkach ograniczających — szczegóły dotyczące formatu można znaleźć w przewodniku po eksporcie hOCR. Dla pelnego strukturalnego modelu wynikow Odnosnik do API OcrResult dokumentuje kazda wlasciwosc na OcrResult.Page, OcrResult.Paragraph, OcrResult.Line i OcrResult.Word.

Odnośnik do dokumentacji API Aspose.OCR do IronOCR

Aspose.OCROdpowiednik IronOCR
AsposeOcrIronTesseract
RecognitionSettingsWlasciwosci na IronTesseract + OcrInput
DocumentRecognitionSettingsOcrInput z LoadPdf() / LoadPdfPages()
api.RecognizeImage(path, settings)ocr.Read(path) lub ocr.Read(input)
api.RecognizePdf(path, settings)ocr.Read(path) lub ocr.Read(input)
result.RecognitionTextresult.Text
result.RecognitionAreasConfidence.Average()result.Confidence (pojedyncza wartosc zmiennoprzecinkowa, 0–100)
result.RecognitionAreasRectanglesresult.Words (z X, Y, Szerokosc, Wysokosc, Pewnosc)
RecognitionResultOcrResult
Language.EngOcrLanguage.English
DetectAreasMode.COMBINEAutomatyczne — nie jest wymagana enum
DetectAreasMode.TABLEAutomatyczne — uzyj result.Pages[n].Paragraphs dla ukladu
DetectAreasMode.DOCUMENTAutomatyczne — silnik obsługuje analizę układu
settings.RecognizeSingleLine = trueocr.Configuration.WhiteListCharacters lub przyciecie pojedynczego regionu
settings.RecognitionAreas = new List<Rectangle> { r }input.LoadImage(path, cropRectangle)
settings.AutoSkew = trueAutomatyczne, lub jawne input.Deskew()
PreprocessingFilter.AutoSkew()input.Deskew()
PreprocessingFilter.AutoDenoising()input.DeNoise()
PreprocessingFilter.ContrastCorrectionFilter()input.Contrast()
PreprocessingFilter.Binarize()input.Binarize()
PreprocessingFilter.Threshold(value)input.Binarize() (prog automatyczny)
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)Poprzez eksport hOCR: result.SaveAsHocrFile(path)
api.SaveMultipageDocument(path, SaveFormat.Json, list)Nawigacja result.Pages i bezposrednia serializacja
api.PreprocessImage(path, filters)input.GetPages()[0].SaveAsImage(path)
api.CalculateSkew(imagePath)input.Deskew() (automatycznie stosuje wykryty kat)
new Aspose.OCR.License().SetLicense("file.lic")IronOcr.License.LicenseKey = "key"
settings.ThreadsCount = nDomyślnie bezpieczne dla wątków; uzyj Parallel.ForEach

Typowe problemy związane z migracją i ich rozwiązania

Problem 1: DetectAreasMode nie ma bezpośredniego odpowiednika

Aspose.OCR: Kod ustawia settings.DetectAreasMode = DetectAreasMode.TABLE lub DetectAreasMode.COMBINE oczekujac specyficznego zachowania ukladu. Usunięcie enum pozostawia pytanie, w jaki sposób IronOCR radzi sobie z tym samym układem.

Rozwiązanie: Całkowicie usunąć wyliczenie.IronOCR automatycznie przeprowadza analizę układu. Jesli musisz zbadac wykryta strukture ukladu, nawiguj przez result.Pages[n].Paragraphs — kazdy akapit zawiera X, Y, Szerokosc, Wysokosc ramki granicznej i tekst, ktory zawiera. Aby uzyskać informacje na temat ekstrakcji tabel, zapoznaj się z instrukcją odczytu tabel:

// 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}");
}

Problem 2: Niezgodność progu pewności obszarów rozpoznawania

Aspose.OCR: Istniejacy kod porownuje result.RecognitionAreasConfidence.Average() z progiem takim jak 0.75f. Skala result.Confidence w IronOCR jest inna.

Rozwiazanie: result.Confidence to procent od 0 do 100. Pomnoz prog Aspose przez 100, aby przeksztalcic: 0.75f staje sie 75.0. Następnie zaktualizuj całą logikę porównawczą:

// 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}");
}
C#

Problem 3: Wyjście JSON/XML funkcji SaveMultipageDocument nie ma bezpośredniej metody

Aspose.OCR: api.SaveMultipageDocument("out.json", SaveFormat.Json, results) tworzy plik JSON z metadanymi rozpoznawania. Zespoły korzystające z tych wyników na dalszych etapach muszą znaleźć odpowiedniki.

**Rozwiazanie:**IronOCR nie ma odpowiednika metody SaveFormat.Json. Zastepstwo to nawigacja do result.Pages i serializacja za pomoca System.Text.Json. Daje to pełną kontrolę nad schematem:

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 }));

Dla wyjscia XHTML z wbudowanymi wspolrzednymi, ktore narzedzia downstream moga analizowac, result.SaveAsHocrFile("output.hocr") jest blizszym odpowiednikiem semantycznym.

Problem 4: DocumentRecognitionSettings.StartPage używa indeksu zaczynającego się od 0

Aspose.OCR: DocumentRecognitionSettings.StartPage = 2 oznacza trzecia strone (indeksowana od zera). Jest to najczęstszy błąd typu "off-by-one" występujący podczas migracji z Aspose do IronOCR.

**Rozwiązanie:**IronOCR stosuje indeksowanie stron oparte na numeracji 1. Dodaj 1 do kazdej wartosci StartPage i odpowiednio przelicz koncowa strone. Napisz test ukierunkowany na znany wielostronicowy plik PDF, aby wykryć ten błąd przed wprowadzeniem do produkcji:

// 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);

Problem 5: Funkcja RecognizeSingleLine nie ma bezpośredniego znacznika

Aspose.OCR: settings.RecognizeSingleLine = true kaze silnikowi traktowac caly obraz jako pojedyncza linie tekstu. Jest to uzywane do rozpoznawania etykiet, ekstrakcji pol i innych stalych-formatow wejsciowych.

Rozwiazanie: Uzyj CropRectangle, aby precyzyjnie odseparowac linie tekstu, co zapobiega uruchamianiu przez silnik pelnego wykrywania ukladu na obrazie z pojedyncza linia. W przypadku stref czytelnych dla maszyn lub formatów etykiet odpowiednie podejście opisano w przewodniku dotyczącym odczytu określonych dokumentów:

// 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());

Problem 6: Niekonieczne Instancje Aspose.OCR na Wątek

Aspose.OCR: Dokumentacja zaleca tworzenie nowej instancji AsposeOcr() na watek, aby uniknac problemow z bezpieczenstwem watkow w przetwarzaniu rownoleglym. Istniejacy kod tworzy instancje wewnatrz lambd Parallel.ForEach.

Rozwiazanie: IronTesseract jest bezpieczny dla watkow. Pojedyncza instancja obsługuje równoległe obciążenia. Usuń instancjonowanie na wątek i współdziel jedną instancję:

// 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}%");
});

Lista kontrolna migracji Aspose.OCR

Zadania przed migracją

Sprawdź wszystkie odniesienia do Aspose.OCR w kodzie źródłowym:

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

Opisz każde wystąpienie według kategorii: wywołania rozpoznawania, obiekty ustawień, potoki przetwarzania wstępnego, wywołania wyjściowe oraz inicjalizacja licencji. Zanotuj wszystkie wartosci DetectAreasMode w uzyciu — to okresla, ktora sciezka migracji ukladu ma zastosowanie. Zarejestruj wszystkie wartosci wyliczenia SaveFormat — kazdy format inny niz PDF wymaga niestandardowego podejscia do serializacji z kwestii 3 powyzej.

Migracja kodu

  1. Usun pakiet NuGet Aspose.OCR ze wszystkich projektow w rozwiazaniu
  2. Zainstaluj pakiet NuGet IronOcr we wszystkich projektach
  3. Zastap using Aspose.OCR; i using Aspose.OCR.Models; using IronOcr;
  4. Zastap new Aspose.OCR.License().SetLicense("file.lic") IronOcr.License.LicenseKey = "key" przy starcie aplikacji
  5. Zastap new AsposeOcr() new IronTesseract()
  6. Usun wszystkie bloki konstrukcyjne RecognitionSettings i DocumentRecognitionSettings
  7. Usun wszystkie odniesienia do wyliczen DetectAreasMode — zadne odpowiedniki nie sa potrzebne
  8. Zastap api.RecognizeImage(path, settings) ocr.Read(path)
  9. Zastap api.RecognizePdf(path, settings) ocr.Read(path) lub ocr.Read(input) uzywajac input.LoadPdf()
  10. Zastap result.RecognitionText result.Text
  11. Zastap result.RecognitionAreasConfidence.Average() result.Confidence i pomnoz stary prog przez 100
  12. Zastap api.SaveMultipageDocument(path, SaveFormat.Pdf, list) result.SaveAsSearchablePdf(path)
  13. Zastap api.SaveMultipageDocument(path, SaveFormat.Json, list) bezposrednia serializacja result.Pages
  14. Przeksztalc wszystkie lancuchy PreprocessingFilter w wywolania metod OcrInput (zobacz tabele mapowania API)
  15. Zaktualizuj DocumentRecognitionSettings.StartPage z indeksowanego od zera na indeksowany od jeden (dodaj 1 do kazdej wartosci)
  16. Usun instancje per-watek AsposeOcr — dziel sie jedna instancja IronTesseract

Testy po migracji

  • Uruchom OCR na reprezentatywnej próbce każdego typu dokumentu używanego w środowisku produkcyjnym i porównaj liczbę znaków z wynikami bazowymi Aspose.OCR
  • Sprawdź wartości pewności:IronOCR zwraca wartości w zakresie 0–100; potwierdź, że wszystkie porównania progów używają nowej skali
  • Przetestuj wybór zakresu stron w pliku PDF liczącym ponad 10 stron, używając numeracji stron zaczynającej się od 1, i sprawdź, czy zwracane są właściwe strony
  • Przetestuj pobieranie plików PDF chronionych hasłem bez zainstalowanego Aspose.PDF — upewnij się, że nie występuje wyjątek zależności
  • Potwierdz, ze result.Text odpowiada oczekiwanym wynikom dla kazdego uzywanego DetectAreasMode (COMBINE, TABLE, DOCUMENT)
  • Przetestuj sciezke wyjscia JSON: zserializuj result.Pages i zweryfikuj schemat w stosunku do wszystkich odbiorcow downstream
  • Uruchom rownolegly proces wsadowy i sprawdz, czy nie wystepuja zadne wyjatki zwiazane z watkami (dzielona instancja IronTesseract)
  • Sprawdź, czy plik PDF z możliwością wyszukiwania otwiera się w przeglądarce PDF, a tekst można zaznaczyć w odpowiednich miejscach
  • Sprawdź, czy klucz licencyjny inicjuje się bez błędów w każdym środowisku wdrożeniowym (uruchomienie ASP.NET, Azure Function, kontener Docker)
  • Sprawdz, czy przetwarzane wstepnie wejscia TIFF nadal produkuja oczekiwane wyniki przez input.LoadImageFrames()

Kluczowe korzyści z migracji do IronOCR

Przewidywalny całkowity koszt posiadania od pierwszego dnia. Professional License w cenie 2999 USD obejmuje 10 programistów w 10 projektach bez konieczności corocznego odnawiania. Dział finansowy zamyka pozycję OCR jednorazowo. Dodanie inżynierów, uruchomienie nowych projektów lub przedłużenie cyklu życia produktu nie ma żadnego wpływu na budżet — nie ma żadnych obliczeń dotyczących poziomów licencji, nie trzeba śledzić dat odnowienia ani martwić się o ryzyko związane z brakiem zgodności wynikające z opóźnienia w płatności. Strona licencyjna IronOCR zawiera informacje o tym, co obejmuje każdy poziom.

Wywolania rozpoznawania wyrazajace intencje, a nie infrastrukture. Po migracji kazde wywolanie rozpoznawania to ocr.Read("document"). Konstrukcja RecognitionSettings, wybor DetectAreasMode i uzupelnianie PreprocessingFilter, ktore poprzedzaly kazde wywolanie Aspose.OCR, znikaja calkowicie. Nowi inżynierowie, zapoznając się z warstwą OCR kodu źródłowego, dostrzegają intencję biznesową — "przeczytaj ten dokument" — a nie obiekt konfiguracyjny tworzony przed rozpoczęciem właściwej pracy. Dokumentacja API IronTesseract obejmuje wszystkie dostępne właściwości konfiguracyjne.

Obsługa zaszyfrowanych plików PDF bez konieczności stosowania dodatkowego produktu. Enterprise systemy przepływu dokumentów rutynowo obsługują pliki PDF chronione hasłem. Po migracji input.LoadPdf("doc.pdf", Password: "secret") obsuguje je natywnie. Nie ma potrzeby zarządzania subskrypcją Aspose.PDF, utrzymywania procesu deszyfrowania do obrazu ani śledzenia drugiej daty odnowienia. Każdy format PDF w procesie przechodzi przez jeden pakiet, jedną licencję i jedną ścieżkę kodu. Poradnik dotyczący wprowadzania danych z plików PDF obejmuje zakresy stron, zaznaczenia nieciągłe oraz wprowadzanie strumieniowe.

Strukturalne dane wynikowe na poziomie slowa i znaku. result.Pages[n].Words zwraca kolekcje, w ktorej kazde slowo nosi swoje pole graniczne, swoj tekst i swoj indywidualny ocena pewnosci. Geometria na poziomie obszaru w Aspose.OCR obejmuje regiony, a nie pojedyncze tokeny. Po migracji parsery układu dokumentów, narzędzia do wyodrębniania pól formularzy oraz potoki przetwarzania faktur mogą uzyskać dostęp do pozycjonowania poszczególnych słów bez konieczności wykonywania dodatkowych czynności przetwarzania. Pełną hierarchię wyników można znaleźć na stronie funkcji wyników OCR.

**Wdrożenie w jednym pakiecie na wszystkich platformach.**IronOCR jest dostarczany jako jeden pakiet NuGet, który działa na systemach Windows, Linux, macOS, Docker, Azure App Service i AWS Lambda bez konieczności konfiguracji specyficznej dla danej platformy. Aspose.OCR działa na różnych platformach, ale w środowiskach kontenerowych może wymagać dostosowania bibliotek natywnych. Po migracji plik Dockerfile dla usługi OCR jest standardowym obrazem bazowym .NET Standard bez żadnych kroków konfiguracyjnych specyficznych dla OCR poza instalacją pakietu. Przewodniki wdrożeniowe obejmują platformy Docker, Azure, AWS i Linux.

Odczyt kodow kreskowych w tym samym przebiegu co OCR. Ustawienie ocr.Configuration.ReadBarCodes = true wyodrebnia kody kreskowe, kody QR oraz symbole Code 128 z tego samego obrazu w jednym przebiegu silnika. Aspose.OCR nie obsługuje kodów kreskowych — wymagana byłaby oddzielna biblioteka do obsługi kodów kreskowych. Po migracji dokumenty, ktore lacza tekst drukowany z kodami kreskowymi (etykiety wysylkowe, formularze inwentaryzacyjne, bilety na wydarzenia) sa obslugiwane przez jedno wywolanie z wynikami na result.Barcodes. Zobacz instrukcję obsługi OCR kodów kreskowych, aby zapoznać się z obsługiwanymi symbolami.

Zwróć uwagę: Aspose i Tesseract są zarejestrowanymi znakami towarowymi ich odpowiednich właścicieli. Ta strona nie jest powiązana z, wspierana ani sponsorowana przez Aspose Pty Ltd ani Google. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Otrzymaj swoją Konsultację Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta