Przejdź do treści stopki
PORóWNAJ Z INNYMI KOMPONENTAMI

Porównanie pomiędzy IronOCR a Aspose.OCR

Asprise OCR dostarcza bibliotekęJavaw pierwszej kolejności i traktuje.NET/jako drugorzędny cel — ta decyzja projektowa jest widoczna na każdej warstwie produktu, od dokumentacji napisanej w przykładach Javy, po natywny model wdrożenia binarnego, który wymaga platformowo-specyficznych bibliotek DLL (aocr.dll, aocr_x64.dll, libaocr.so, libaocr.dylib) na każdej maszynie, która uruchamia oprogramowanie. Model wątków dodatkowo komplikuje sprawę: licencje LITE i STANDARD są umownie ograniczone do wykonywania w jednym wątku i jednym procesie, co oznacza, że każdy punkt końcowy ASP.NET Core, usługa Windows lub funkcja Azure, która wywołuje Asprise na tych warstwach, narusza Umowę licencyjną. Dla zespołów.NET/tworzących systemy produkcyjne nie są to kwestie teoretyczne — są to przeszkody we wdrożeniu, które wymuszają albo kosztowne Licencje Enterprise, albo zmianę biblioteki przed przejściem do produkcji.

Zrozumienie Asprise OCR

Asprise OCR to komercyjny produkt OCR firmy Asprise Inc. Produkt powstał jako silnik OCR dla języka Java. Obsługa platformy.NET/została dodana później poprzez natywne biblioteki-owijki, które łączą zarządzany kod C# z bazowymi, niezarządzanymi plikami binarnymi OCR. Ta architektura mostkowa jest cechą charakterystyczną biblioteki dla programistów .NET.

Kluczowe cechy architektury:

  • Projekt zorientowany na Javę: Cała podstawowa dokumentacja, przykładowy kod i przykłady SDK są napisane w Javie. Programiści.NET/tłumaczą sobie wszystko z Javy w głowie albo polegają na skąpych materiałach dodatkowych.
  • Natywna zależność binarna: Niezarządzane biblioteki DLL specyficzne dla platformy muszą znajdować się w katalogu wdrożeniowym lub ścieżce systemowej. Poprawna biblioteka binarna musi odpowiadać architekturze procesu — 32-bitowe procesy wymagają aocr.dll, 64-bitowe procesy wymagają aocr_x64.dll.
  • Ręczny cykl życia silnika: Biblioteka udostępnia wzorzec inicjalizacji w stylu C (Ocr.SetUp(), ocr.StartEngine(), ocr.StopEngine()) odziedziczony z jego początków w Javie. Nie ma implementacji IDisposable. Zapomnienie o StopEngine() powoduje wycieki pamięci natywnej.
  • Ograniczenia dotyczące licencji: poziomy Lite (~299 USD) i STANDARD (~699 USD) pozwalają tylko na wykonywanie w jednym wątku i jednym procesie. Wielowątkowość wymaga wersji Enterprise, co wymaga skontaktowania się z działem sprzedaży.
  • Kody błędów, nie wyjątki: Niepowodzenia rozpoznawania pojawiają się jako puste zwroty lub ciągi znaków poprzedzone "ERROR:", zgodnie z konwencjami kodów błędów C/Java zamiast z wzorcami wyjątków .NET.
  • Ponad 20 języków OCR: znacznie mniej niż w przypadku alternatywnych rozwiązań stworzonych dla ekosystemu .NET.

Problem cyklu życia silnika

Każde wywołanieAsprise OCRwymaga wyraźnego zarządzania silnikiem. Schemat składa się z czterech obowiązkowych kroków: statycznej konfiguracji globalnej, utworzenia instancji, uruchomienia silnika z ciągiem językowym oraz zatrzymania silnika po zakończeniu. Silnik pomija wycieki zasobów natywnych, ponieważ moduł czyszczący pamięci nie może zwolnić pamięci niezarządzanej:

// Asprise: four required steps before reading a single image
Ocr.SetUp();                              // Static global init
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);   // Allocates native engine
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();                         // Must call — no IDisposable fallback
}
// Asprise: four required steps before reading a single image
Ocr.SetUp();                              // Static global init
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);   // Allocates native engine
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();                         // Must call — no IDisposable fallback
}
' Asprise: four required steps before reading a single image
Ocr.SetUp()                              ' Static global init
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)   ' Allocates native engine
    Dim text As String = ocr.Recognize( _
        imagePath, _
        Ocr.RECOGNIZE_TYPE_TEXT, _
        Ocr.OUTPUT_FORMAT_PLAINTEXT)
    Return text
Finally
    ocr.StopEngine()                         ' Must call — no IDisposable fallback
End Try
$vbLabelText   $csharpLabel

Ten wzorzec cicho zawodzi w trzech typowych sytuacjach: nieobłyszony wyjątek przed wywołaniem StopEngine(), zrefaktoryzowana ścieżka kodu pomijająca sprzątanie oraz równoczesne użycie w LITE/STANDARD, gdzie licencja zabrania wątkowania, które pozwalałoby na równoległość. Blok finally ogranicza pierwszy problem, ale ograniczenie licencji czyni wzorzec bezużytecznym dla obciążeń serwerowych w każdym razie.

Zrozumienie IronOCR

IronOCR to komercyjna biblioteka OCR stworzona od podstaw dla platformy .NET. Zawiera zoptymalizowany silnik Tesseract 5 z automatycznym przetwarzaniem wstępnym, natywną obsługą plików PDF oraz zarządzanym interfejsem API, który w całości jest zgodny ze standardowymi konwencjami platformy.NET/Standard.

Kluczowe cechy:

  • Pojedyncza paczka NuGet: dotnet add package IronOcr instaluje wszystko — brak zarządzania natywnymi binarnymi, brak folderów tessdata, brak platformowo-specyficznej konfiguracji.
  • Zarządzanie zasobami IDisposable: OcrInput implementuje IDisposable. Instrukcja using automatycznie zajmuje się sprzątaniem.
  • Bezpieczeństwo wątków we wszystkich poziomach licencji: brak sztucznych ograniczeń dotyczących wątków. Instancje IronTesseract są bezpieczne do użycia równoległego na licencji $999 Lite.
  • Automatyczne przetwarzanie wstępne: Wbudowane metody Deskew(), DeNoise(), Contrast(), Binarize() i EnhanceResolution() usuwają potrzebę korzystania z zewnętrznych bibliotek przetwarzania obrazów.
  • Natywne wprowadzanie plików PDF: Przekaż ścieżkę do pliku PDF bezpośrednio — nie jest wymagana żadna zewnętrzna biblioteka renderująca do konwersji stron na obrazy.
  • 125+ języków: Dostępne jako oddzielne paczki NuGet (IronOcr.Languages.French itp.), instalowane tylko wtedy, gdy są potrzebne.
  • Wynik PDF z możliwością przeszukiwania: result.SaveAsSearchablePdf() generuje zgodny z PDF/A wynik z dowolnego wyniku OCR.
  • Dostęp do danych strukturalnych: Wyniki przedstawiają tekst na poziomie słów, wierszy i akapitów wraz ze współrzędnymi pikselowymi oraz wynikami pewności dla poszczególnych słów.

Porównanie funkcji

Funkcja Asprise OCR IronOCR
Główna platforma Java .NET
Wdrożenie NuGet Wrapper + natywne biblioteki DLL Pojedynczy pakiet, bez dodatków
Wątkowanie (wszystkie poziomy) TYLKO DLA ENTERPRISE Wszystkie poziomy
Wykorzystanie na serwerze/w aplikacji internetowej TYLKO DLA ENTERPRISE Wszystkie poziomy
Natywne wprowadzanie plików PDF Nie Tak
Wbudowane przetwarzanie wstępne Nie Tak
Języki OCR 20+ 125+
Wynik w formacie PDF z możliwością wyszukiwania Nie Tak

Szczegółowe porównanie funkcji

Funkcja Asprise OCR IronOCR
Architektura
Pochodzenie projektu Java,.NETjako języki dodatkowe .NET natywne
Styl API Styl C# z stałymi całkowitoliczbowymi Biegła znajomość języka C#
IDisposable / wzorzec using Nie zaimplementowano Tak (OcrInput)
Obsługa błędów Zwraca wartość null / ciąg błędu Wyjątki.NET
Propagacja wyjątków z języka natywnego Luki w interoperacyjności Wyjątki obsługiwane
Wątki i wykorzystanie serwera
Wielowątkowość — poziom Lite Zabronione Dopuszczalne
Wielowątkowość — poziom STANDARD Zabronione Dopuszczalne
Wielowątkowość — Enterprise/wyższy poziom Dopuszczalne Dopuszczalne
ASP.NET Core Web API Wymagany poziom Enterprise Dowolny poziom
Funkcje Azure / AWS Lambda Wymagany poziom Enterprise Dowolny poziom
Partia Parallel.ForEach Wymagany poziom Enterprise Dowolny poziom
Obsługa danych wejściowych
Pliki graficzne (JPG, PNG, TIFF) Tak Tak
Natywne wprowadzanie plików PDF Nie (wymagana biblioteka zewnętrzna) Tak
Plik PDF chroniony hasłem Nie Tak
Tablica bajtów / Wejście strumieniowe Ograniczone Tak
Wielostronicowy plik TIFF Ograniczone Tak
Przetwarzanie wstępne
Wyrównanie Podręcznik / zewnętrzny Wbudowane
Denoize Podręcznik / zewnętrzny Wbudowane
Wzmocnienie kontrastu Podręcznik / zewnętrzny Wbudowane
Binaryzacja Podręcznik / zewnętrzny Wbudowane
Skalowanie rozdzielczości (DPI) Podręcznik / zewnętrzny Wbudowane
Wynik
Zwykły tekst Tak Tak
Wynik w formacie PDF z możliwością wyszukiwania Nie Tak
Słowa kluczowe w WORD Ograniczone Tak
Wyniki pewności dla poszczególnych słów Nie Tak
eksport hOCR Nie Tak
Języki
Liczba słów 20+ 125+
Instalacja języka W pakiecie Pakiety NuGet
Wyliczenie w języku silnie typowanym Nie (kody łańcuchów) Tak (OcrLanguage)
Wdrożenie
Wymagany plik binarny w formacie natywnym Tak (biblioteka DLL specyficzna dla platformy) Nie
Zarządzanie folderami Tessdata Nie Nie
Docker Ręczna konfiguracja plików binarnych Działa od razu po uruchomieniu
Linux Wymaga libaocr.so NuGet obsługuje
Ceny
Cena wywoławcza kontaktuj się z Asprise w celu uzyskania wyceny (LITE, tylko jedno wątkowanie) $999 (Lite, wszystkie funkcje)
Cena wejściowa za korzystanie z serwera Enterprise (kontakt z działem sprzedaży) $999 (Lite)

Architektura natywna.NET/a architektura mostkowa Java

Podstawowym pytaniem dla zespołów.NET/nie jest to, która biblioteka ma więcej funkcji na papierze — chodzi o to, która z nich zachowuje się jak pełnoprawny element środowiska.NET/w środowiskach wdrożeniowych i operacyjnych, z których faktycznie korzystają.

Podejście Asprise

Asprise komunikuje się między zarządzanym kodem.NET/a swoim niezarządzanym silnikiem OCR za pośrednictwem marshalingu P/Invoke. Źródło asprise-vs-ironocr-examples.cs pokazuje podstawowy mechanizm:

// Asprise interop layer — bridging managed C# to native OCR engine
[DllImport("aocr.dll")]
private static extern IntPtr OCR(string imagePath, int type);

public string ExtractText(string imagePath)
{
    // P/Invoke call into unmanaged DLL
    IntPtr result = OCR(imagePath, 0);
    return Marshal.PtrToStringAnsi(result);  // Manual string marshal
}
// Asprise interop layer — bridging managed C# to native OCR engine
[DllImport("aocr.dll")]
private static extern IntPtr OCR(string imagePath, int type);

public string ExtractText(string imagePath)
{
    // P/Invoke call into unmanaged DLL
    IntPtr result = OCR(imagePath, 0);
    return Marshal.PtrToStringAnsi(result);  // Manual string marshal
}
Imports System.Runtime.InteropServices

' Asprise interop layer — bridging managed VB.NET to native OCR engine
Private Class OCRInterop
    <DllImport("aocr.dll")>
    Private Shared Function OCR(imagePath As String, type As Integer) As IntPtr
    End Function

    Public Function ExtractText(imagePath As String) As String
        ' P/Invoke call into unmanaged DLL
        Dim result As IntPtr = OCR(imagePath, 0)
        Return Marshal.PtrToStringAnsi(result)  ' Manual string marshal
    End Function
End Class
$vbLabelText   $csharpLabel

Na wyższym poziomie API programiści wywołują ten sam most poprzez klasę opakowującą, ale wymagania dotyczące wdrożenia nie ulegają zmianie: każda maszyna docelowa wymaga odpowiedniego pliku binarnego, umieszczonego w odpowiedniej ścieżce i dopasowanego do właściwej architektury procesowej. Wdrożenie 64-bitowe, które dostarcza z aocr.dll zamiast aocr_x64.dll, powoduje wyrzucenie BadImageFormatException podczas uruchamiania. KontenerDockerLinux bez libaocr.so w LD_LIBRARY_PATH wyrzuca DllNotFoundException. Żaden z tych błędów nie jest wykrywany w czasie kompilacji.

Podejście IronOCR

IronOCR instaluje się jako pojedyncze odwołanie NuGet. Pakiet obsługuje wszystkie natywne zależności wewnętrznie poprzez mechanizm wyboru pakietów specyficzny dla platformy NuGet:

// Installation — one command, all platforms
// dotnet add package IronOcr

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

// Basic OCR — no native binary setup, no tessdata, no config files
var text = new IronTesseract().Read("document.jpg").Text;
// Installation — one command, all platforms
// dotnet add package IronOcr

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

// Basic OCR — no native binary setup, no tessdata, no config files
var text = new IronTesseract().Read("document.jpg").Text;
Imports IronOcr

' Installation — one command, all platforms
' dotnet add package IronOcr

' License setup
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"

' Basic OCR — no native binary setup, no tessdata, no config files
Dim text As String = New IronTesseract().Read("document.jpg").Text
$vbLabelText   $csharpLabel

Instrukcja using na OcrInput zastępuje ręczne wywołania cyklu życia silnika. Nie ma StartEngine() do wywołania i nie ma StopEngine(), które można by było zapomnieć. Kolektor śmieci i wzorzec IDisposable poprawnie zajmują się sprzątaniem w scenariuszach wyjątkowych, nie wymagając rusztowania try/finally wokół każdego wywołania OCR.

Szczegółowe wskazówki dotyczące konfiguracji można znaleźć w przewodniku konfiguracji IronTesseract.

Model wątków

Ograniczenie dotyczące wątków jest najważniejszą różnicą między Asprise a alternatywnymi rozwiązaniami dla programistów serwerów .NET. Nie jest to kwestia wydajności — jest to kwestia zgodności z licencją.

Podejście Asprise

Licencje Lite i STANDARD wyraźnie zabraniają wykonywania wielowątkowego i wieloprocesowego. Każdy kod, który wywołuje Asprise z więcej niż jednego wątku jednocześnie, narusza Umowę licencyjną na tych poziomach..NETCore domyślnie przetwarza żądania w puli wątków. To sprawia, że każdy standardowy kontroler Web API, który wywołuje Asprise, stanowi naruszenie licencji w wersjach Lite/STANDARD:

// ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
// Web server thread pool = multiple concurrent threads = prohibited
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Two concurrent requests = two threads = license violation
        var ocr = new Ocr();
        ocr.StartEngine("eng", Ocr.SPEED_FAST);
        var text = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        ocr.StopEngine();
        return Ok(text);
    }
}
// ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
// Web server thread pool = multiple concurrent threads = prohibited
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Two concurrent requests = two threads = license violation
        var ocr = new Ocr();
        ocr.StartEngine("eng", Ocr.SPEED_FAST);
        var text = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        ocr.StopEngine();
        return Ok(text);
    }
}
Imports Microsoft.AspNetCore.Mvc

' ASPRISE LITE/STANDARD — violates license in ASP.NET Core context
' Web server thread pool = multiple concurrent threads = prohibited
<ApiController>
Public Class OcrController
    Inherits ControllerBase

    <HttpPost("extract")>
    Public Function ExtractText(file As IFormFile) As IActionResult
        ' Two concurrent requests = two threads = license violation
        Dim ocr As New Ocr()
        ocr.StartEngine("eng", Ocr.SPEED_FAST)
        Dim text As String = ocr.Recognize(tempPath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        ocr.StopEngine()
        Return Ok(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Przetwarzanie wsadowe w wersjach Lite/STANDARD jest wymuszone sekwencyjnie, niezależnie od dostępnych rdzeni procesora:

// ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var path in imagePaths)  // Cannot use Parallel.ForEach — license violation
    {
        string text = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        results.Add(text);
    }
}
finally
{
    ocr.StopEngine();
}
// ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    foreach (var path in imagePaths)  // Cannot use Parallel.ForEach — license violation
    {
        string text = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        results.Add(text);
    }
}
finally
{
    ocr.StopEngine();
}
' ASPRISE LITE/STANDARD — sequential only (100 docs at 2 sec each = 3+ minutes)
Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    For Each path In imagePaths ' Cannot use Parallel.ForEach — license violation
        Dim text As String = ocr.Recognize(path, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        results.Add(text)
    Next
Finally
    ocr.StopEngine()
End Try
$vbLabelText   $csharpLabel

ENTERPRISE usuwa ograniczenia wątkowe, ale ENTERPRISE wymaga kontaktu z działem sprzedaży Asprise, bez opublikowanej ceny.

Podejście IronOCR

IronTesseract jest bezpieczny wątkowo i nie ma żadnych ograniczeń dotyczących wątków na żadnym poziomie licencji. Równoległe przetwarzanie wsadowe na licencji $999 Lite jest w pełni obsługiwane:

//IronOCR— parallel batch on any license tier
// 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
var results = imagePaths
    .AsParallel()
    .Select(path => new IronTesseract().Read(path).Text)
    .ToList();
//IronOCR— parallel batch on any license tier
// 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
var results = imagePaths
    .AsParallel()
    .Select(path => new IronTesseract().Read(path).Text)
    .ToList();
Imports System.Linq

'IronOCR— parallel batch on any license tier
' 100 docs at 2 sec each, 8 cores = ~25 seconds vs 200 seconds sequential
Dim results = imagePaths _
    .AsParallel() _
    .Select(Function(path) New IronTesseract().Read(path).Text) _
    .ToList()
$vbLabelText   $csharpLabel

Kontrolery ASP.NET Core działają bez żadnej specjalnej konfiguracji:

//IronOCR— concurrent requests on any license tier
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        var text = new IronTesseract().Read(tempPath).Text;
        return Ok(text);
    }
}
//IronOCR— concurrent requests on any license tier
[ApiController]
public class OcrController : ControllerBase
{
    [HttpPost("extract")]
    public IActionResult ExtractText(IFormFile file)
    {
        // Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        var text = new IronTesseract().Read(tempPath).Text;
        return Ok(text);
    }
}
Imports Microsoft.AspNetCore.Mvc

<ApiController>
Public Class OcrController
    Inherits ControllerBase

    <HttpPost("extract")>
    Public Function ExtractText(file As IFormFile) As IActionResult
        ' Thread-safe on Lite, Plus, Professional, Unlimited — all tiers
        Dim text = New IronTesseract().Read(tempPath).Text
        Return Ok(text)
    End Function
End Class
$vbLabelText   $csharpLabel

Zobacz przykład wielowątkowości, aby zapoznać się z wzorcami przepustowości równoległej w obciążeniach wsadowych.

Wstępne przetwarzanie obrazów

Asprise przekazuje obrazy do swojego natywnego silnika bez wstępnego przetwarzania. Skanowanie niskiej jakości — przekrzywione strony, zakłócenia, niski kontrast — bezpośrednio obniża dokładność OCR, ponieważ nie ma warstwy przetwarzania wstępnego, która korygowałaby wady obrazu przed uruchomieniem rozpoznawania.

Podejście Asprise

Przetwarzanie wstępne wymaga zewnętrznej biblioteki obrazów. Programista pracujący z Asprise dodaje zależność, taką jak ImageMagick, SkiaSharp lub System.Drawing, ręcznie wykonuje operacje przetwarzania wstępnego, zapisuje przetworzony obraz w pliku tymczasowym, a następnie przekazuje ten plik do Asprise:

// Asprise preprocessing: external dependency required
// 1. Load with external library
// 2. Apply corrections (deskew, denoise, contrast) with external library
// 3. Save to temp file
// 4. Pass temp file to Asprise

var ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);
// preprocessedImagePath comes from your external preprocessing pipeline
string text = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();
// Asprise preprocessing: external dependency required
// 1. Load with external library
// 2. Apply corrections (deskew, denoise, contrast) with external library
// 3. Save to temp file
// 4. Pass temp file to Asprise

var ocr = new Ocr();
ocr.StartEngine("eng", Ocr.SPEED_FAST);
// preprocessedImagePath comes from your external preprocessing pipeline
string text = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
ocr.StopEngine();
' Asprise preprocessing: external dependency required
' 1. Load with external library
' 2. Apply corrections (deskew, denoise, contrast) with external library
' 3. Save to temp file
' 4. Pass temp file to Asprise

Dim ocr As New Ocr()
ocr.StartEngine("eng", Ocr.SPEED_FAST)
' preprocessedImagePath comes from your external preprocessing pipeline
Dim text As String = ocr.Recognize(preprocessedImagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
ocr.StopEngine()
$vbLabelText   $csharpLabel

Powoduje to dodanie zależności kompilacji, zwiększa obciążenie środowiska uruchomieniowego z powodu dodatkowej biblioteki oraz wymaga od programisty wystarczającej znajomości przetwarzania obrazów, aby wprowadzić skuteczne poprawki.

Podejście IronOCR

Przetwarzanie wstępne jest wbudowane w OcrInput. Ten sam proces, który przy użyciu biblioteki zewnętrznej i starannego dostrajania parametrów zajmował 50–100 wierszy kodu, sprowadza się teraz do pięciu wywołań metod:

//IronOCR— preprocessing built in, no external dependencies
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();               // Correct page rotation
input.DeNoise();              // Remove scanner artifacts
input.Contrast();             // Improve text/background separation
input.Binarize();             // Convert to black/white for cleaner engine input
input.EnhanceResolution(300); // Scale to optimal DPI

var result = new IronTesseract().Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
//IronOCR— preprocessing built in, no external dependencies
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
input.Deskew();               // Correct page rotation
input.DeNoise();              // Remove scanner artifacts
input.Contrast();             // Improve text/background separation
input.Binarize();             // Convert to black/white for cleaner engine input
input.EnhanceResolution(300); // Scale to optimal DPI

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

' IronOCR— preprocessing built in, no external dependencies
Using input As New OcrInput()
    input.LoadImage("low-quality-scan.jpg")
    input.Deskew()               ' Correct page rotation
    input.DeNoise()              ' Remove scanner artifacts
    input.Contrast()             ' Improve text/background separation
    input.Binarize()             ' Convert to black/white for cleaner engine input
    input.EnhanceResolution(300) ' Scale to optimal DPI

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

W przypadku skanów, w których obrót jest nieprzewidywalny, funkcja automatycznego prostowania radzi sobie z dowolnymi kątami bez konieczności wykrywania lub określania wartości obrotu przez programistę. Przewodnik po korekcji jakości obrazu obejmuje pełny zestaw filtrów oraz informacje o tym, kiedy należy stosować każdy z nich.

Przetwarzanie plików PDF

Wprowadzanie danych z plików PDF jest częstym wymaganiem w procesach przetwarzania dokumentów. Asprise nie zapewnia natywnej obsługi plików PDF — biblioteka działa na plikach graficznych. Przetwarzanie pliku PDF za pomocą Asprise wymaga najpierw konwersji każdej strony na obraz przy użyciu zewnętrznej biblioteki, a następnie indywidualnego przetworzenia każdego pliku obrazu.

Podejście Asprise

// Asprise PDF workaround — external library required to render PDF pages
var images = ExternalPdfLibrary.RenderPages("invoice.pdf");

Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    var allText = new System.Text.StringBuilder();
    foreach (var imagePath in images)
    {
        string pageText = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.Append(pageText);
    }
    return allText.ToString();
}
finally
{
    ocr.StopEngine();
}
// Also: clean up temp image files
// Asprise PDF workaround — external library required to render PDF pages
var images = ExternalPdfLibrary.RenderPages("invoice.pdf");

Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    var allText = new System.Text.StringBuilder();
    foreach (var imagePath in images)
    {
        string pageText = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT);
        allText.Append(pageText);
    }
    return allText.ToString();
}
finally
{
    ocr.StopEngine();
}
// Also: clean up temp image files
Imports System.Text

' Asprise PDF workaround — external library required to render PDF pages
Dim images = ExternalPdfLibrary.RenderPages("invoice.pdf")

Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    Dim allText As New StringBuilder()
    For Each imagePath In images
        Dim pageText As String = ocr.Recognize(imagePath, Ocr.RECOGNIZE_TYPE_TEXT, Ocr.OUTPUT_FORMAT_PLAINTEXT)
        allText.Append(pageText)
    Next
    Return allText.ToString()
Finally
    ocr.StopEngine()
End Try
' Also: clean up temp image files
$vbLabelText   $csharpLabel

To podejście dodaje zależność od renderowania PDF (zwykle iText, PDFSharp lub komercyjny renderer), wymaga zarządzania plikami tymczasowymi i traci metadane PDF oraz strukturę, które natywny czytnik PDF by zachował. Pliki PDF chronione hasłem wymagają trzeciego komponentu.

Podejście IronOCR

IronOCR odczytuje pliki PDF bezpośrednio. Metoda OcrInput.LoadPdf() zajmuje się renderingiem wewnętrznie, w tym dokumentami wielostronicowymi i plikami chronionymi hasłem:

//IronOCR— native PDF input, no external rendering library
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// Password-protected PDFs — same API, one parameter
using var secureInput = new OcrInput();
secureInput.LoadPdf("confidential.pdf", Password: "secret");
var secureResult = new IronTesseract().Read(secureInput);

// Generate searchable PDF from a scanned document
var scanResult = new IronTesseract().Read("scanned-contract.pdf");
scanResult.SaveAsSearchablePdf("searchable-contract.pdf");
//IronOCR— native PDF input, no external rendering library
using var input = new OcrInput();
input.LoadPdf("invoice.pdf");
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);

// Password-protected PDFs — same API, one parameter
using var secureInput = new OcrInput();
secureInput.LoadPdf("confidential.pdf", Password: "secret");
var secureResult = new IronTesseract().Read(secureInput);

// Generate searchable PDF from a scanned document
var scanResult = new IronTesseract().Read("scanned-contract.pdf");
scanResult.SaveAsSearchablePdf("searchable-contract.pdf");
Imports IronOcr

' IronOCR— native PDF input, no external rendering library
Using input As New OcrInput()
    input.LoadPdf("invoice.pdf")
    Dim result = New IronTesseract().Read(input)
    Console.WriteLine(result.Text)
End Using

' Password-protected PDFs — same API, one parameter
Using secureInput As New OcrInput()
    secureInput.LoadPdf("confidential.pdf", Password:="secret")
    Dim secureResult = New IronTesseract().Read(secureInput)
End Using

' Generate searchable PDF from a scanned document
Dim scanResult = New IronTesseract().Read("scanned-contract.pdf")
scanResult.SaveAsSearchablePdf("searchable-contract.pdf")
$vbLabelText   $csharpLabel

Przewodnik dotyczący OCR plików PDF obejmuje wybór zakresu stron, obsługę mieszanych typów plików PDF oraz tworzenie plików PDF z możliwością wyszukiwania na potrzeby procesów archiwizacji.

Przewodnik po mapowaniu API

Asprise OCR Odpowiednik IronOCR
Ocr.SetUp() Nie jest wymagane
new Ocr() new IronTesseract()
ocr.StartEngine("eng", Ocr.SPEED_FAST) Nie jest wymagane (silnik inicjuje się przy pierwszym użyciu)
ocr.Recognize(path, type, format) ocr.Read(path)
Ocr.RECOGNIZE_TYPE_TEXT Domyślne zachowanie
Ocr.RECOGNIZE_TYPE_BARCODE ocr.Configuration.ReadBarCodes = true
Ocr.RECOGNIZE_TYPE_ALL ocr.Configuration.ReadBarCodes = true
Ocr.OUTPUT_FORMAT_PLAINTEXT result.Text
Ocr.OUTPUT_FORMAT_XML result.Words / wynik strukturalny
Ocr.OUTPUT_FORMAT_PDF result.SaveAsSearchablePdf()
Ocr.SPEED_FASTEST ocr.Configuration ustawienia prędkości
Ocr.SPEED_FAST Konfiguracja domyślna
Ocr.SPEED_SLOW Konfiguracja wyższej dokładności
ocr.StopEngine() Nie wymagane (using zajmuje się sprzątaniem)
Ciąg językowy "eng+fra" ocr.Language = OCRLanguage.English; ocr.AddSecondaryLanguage(OcrLanguage.French)
Ręczne czyszczenie try/finally using var input = new OcrInput()
Wartość zwracana ciągu błędu Standardowe wyjątki.NET/Standard

Kiedy zespoły rozważają przejście z Asprise na IronOCR

Przeszkoda w gotowości produkcyjnej

Ograniczenie dotyczące wątków stanowi poważną przeszkodę dla większości produkcyjnych obciążeń .NET. Zespół tworzy funkcję OCR przy użyciu Asprise Lite podczas rozwoju — testy jednowątkowe przebiegają pomyślnie, wszystko działa. Następnie funkcja trafia do środowiska stagingowego za interfejsem API.NET/Core, pojawiają się równoczesne żądania testowe, a aplikacja albo generuje błędy, albo działa w stanie niezgodnym z wymaganiami technicznymi. Rozwiązaniem jest albo przejście na wersję Enterprise (z związanymi z tym kosztami i zaangażowaniem działu sprzedaży), albo wymiana biblioteki. Zespoły, które osiągają ten etap podczas testów, a nie w środowisku produkcyjnym, mają szczęście; osoby, które odkryją to po uruchomieniu, staną przed koniecznością pilniejszej migracji.IronOCR usuwa całą tę klasę problemów — licencja $999 Lite wspiera przetwarzanie żądań jednoczesnych, równoległość wsadową, Usługi Windows i funkcje chmurowe bez ograniczeń.

Koszt złożoności wdrożenia

Zespoły działające w nowoczesnych środowiskach wdrożeniowych — kontenerach Docker, maszynach wirtualnych Linux, podach Kubernetes — ponoszą w ramach Asprise stałe koszty utrzymania, które nie występują w przypadku samych pakietów NuGet. Każda kompilacja obrazu kontenera musi zawierać poprawny plik binarny dla architektury docelowej. Każdy potok CI/CD przeznaczony dla wielu platform musi obsługiwać dołączanie plików specyficznych dla danej platformy. Brak biblioteki natywnej w produkcyjnym kontenerzeLinuxjest wykrywany w czasie wykonywania, a nie jest błędem kompilacji. Zespoły, które spędziły wiele godzin na debugowaniu 32-bitowej biblioteki DLL załadowanej do procesu 64-bitowego, doskonale rozumieją, ile to kosztuje. Wdrożenie IronOCR wyłącznie za pośrednictwem NuGet eliminuje całą tę kategorię niepowodzeń wdrożeniowych.

Problem z dokumentacją Java

Zespoły tworzące aplikacje.NET/potrzebują przykładów w języku C#, a nie w Javie. Podstawowa dokumentacja Asprise, Dokumentacja API i zasoby społeczności są skierowane do programistów Java. Programista.NET/czytający dokumentację Asprise przekłada składnię Javy, konwencje pakietówJavaoraz wzorce specyficzne dla Javy na odpowiedniki w języku C# — czasami tłumaczenie nie jest bezpośrednie, ponieważ opakowanie.NET/nie udostępnia wszystkich funkcji po stronie Javy. Dokumentacja, samouczki i przykłady kodu IronOCRsą przeznaczone dla programistów C#. Samouczek dotyczący odczytywania tekstu z obrazów oraz pełne centrum samouczków zawierają działające przykłady w języku C# dla każdej funkcji, bez dodatkowych kosztów związanych z tłumaczeniem.

Luka w procesie przetwarzania plików PDF

Zespoły przetwarzające zeskanowane dokumenty, faktury, umowy lub formularze w formacie PDF nie mogą korzystać z Asprise bez dodania biblioteki renderującej pliki PDF do swojego wykresu zależności. Ta biblioteka renderująca wiąże się z własnymi kwestiami licencyjnymi, obciążeniem związanym z utrzymaniem oraz potencjalnymi niezgodnościami. Dla zespołów, które potrzebują OCR + PDF w jednym pakiecie,IronOCR obsługuje obie funkcje natywnie. Możliwość tworzenia plików PDF z funkcją wyszukiwania na podstawie zeskanowanych danych — powszechny wymóg w procesach archiwizacji i zapewniania zgodności — nie ma odpowiednika w żadnym poziomie licencji Asprise.

Luka w pokryciu językowym

Asprise obsługuje ponad 20 języków OCR.IronOCR obsługuje ponad 125 narzędzi, z których każde można zainstalować jako niezależny pakiet NuGet. Zespoły przetwarzające dokumenty w języku arabskim, hindi, tajskim lub w jednym z kilkudziesięciu innych języków obsługiwanych przez IronOCR, ale nie przez Asprise, nie mają dostępu do obsługi wielojęzycznej za pośrednictwem Asprise. Przewodnik dotyczący wielu języków obejmuje instalację i łączenie pakietów językowych, w tym rozpoznawanie jednoczesne w wielu alfabetach.

Typowe kwestie związane z migracją

Zastępowanie kodu cyklu życia silnika

Największą mechaniczną zmianą podczas migracji jest usunięcie wzorca cyklu życia silnika Asprise i zastąpienie go bezpośrednią inicjalizacją IronTesseract. Każde wystąpienie sekwencji SetUp() / StartEngine() / Recognize() / StopEngine() staje się jednym wywołaniem Read():

// Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();
}

// After:IronOCR(1 line)
return new IronTesseract().Read(imagePath).Text;
// Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp();
Ocr ocr = new Ocr();
try
{
    ocr.StartEngine("eng", Ocr.SPEED_FAST);
    string text = ocr.Recognize(
        imagePath,
        Ocr.RECOGNIZE_TYPE_TEXT,
        Ocr.OUTPUT_FORMAT_PLAINTEXT);
    return text;
}
finally
{
    ocr.StopEngine();
}

// After:IronOCR(1 line)
return new IronTesseract().Read(imagePath).Text;
' Before: Asprise lifecycle (15 lines, manual cleanup)
Ocr.SetUp()
Dim ocr As New Ocr()
Try
    ocr.StartEngine("eng", Ocr.SPEED_FAST)
    Dim text As String = ocr.Recognize( _
        imagePath, _
        Ocr.RECOGNIZE_TYPE_TEXT, _
        Ocr.OUTPUT_FORMAT_PLAINTEXT)
    Return text
Finally
    ocr.StopEngine()
End Try

' After: IronOCR (1 line)
Return New IronTesseract().Read(imagePath).Text
$vbLabelText   $csharpLabel

Dla kodu wrażliwego na wydajność, który przetwarza wiele dokumentów sekwencyjnie, ponownie użyj instancji IronTesseract zamiast tworzyć nową dla każdego wywołania — inicjalizacja silnika niesie ze sobą narzut, a pojedyncza instancja używana w sposób sekwencyjny jest bardziej efektywna niż tworzenie i usuwanie jednej dla każdego dokumentu.

Zastępowanie kodów językowych opartych na ciągach znaków

Asprise używa parametrów ciągów znaków do wyboru języka ("eng", "fra", "eng+fra").IronOCR używa mocno typizowanego enumeratora OcrLanguage z API języka drugorzędnego. Przewodnik po wielu językach zawiera dostępne identyfikatory języków oraz pakiety NuGet wymagane dla każdego z nich:

// Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST);

// After:IronOCR strongly-typed language enum
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
var result = ocr.Read(imagePath);
// Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST);

// After:IronOCR strongly-typed language enum
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.French);
var result = ocr.Read(imagePath);
Imports IronOcr

' Before: Asprise string-based language
ocr.StartEngine("eng+fra", Ocr.SPEED_FAST)

' After: IronOCR strongly-typed language enum
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.French)
Dim result = ocr.Read(imagePath)
$vbLabelText   $csharpLabel

Zastępowanie sprawdzania ciągów błędów

W przypadku niepowodzenia rozpoznawania Asprise zwraca wartość null lub ciąg znaków poprzedzony prefiksem błędu.IronOCR generuje wyjątki .NET. Zastąp kontrolę null i prefiksów ciągów znaków standardowymi blokami try/catch. Dzięki temu obsługa błędów OCR jest spójna z pozostałą częścią modelu obsługi wyjątków.NET/i zapewnia dostęp do pełnych śladów stosu oraz hierarchii typów wyjątków, a nie tylko do przeanalizowanych ciągów błędów.

Włączanie przetwarzania równoległego

Po migracji, istniejące pętle wsadowe foreach mogą być przekonwertowane na Parallel.ForEach lub PLINQ bez żadnych obaw licencyjnych. W przypadku partii dokumentów, które wcześniej były przetwarzane sekwencyjnie w trybie Lite/STANDARD, równoległość stanowi bezpośredni mnożnik przepustowości. Przewodnik po asynchronicznym OCR obejmuje wzorce asynchroniczne dla kontekstów aplikacji internetowych, w których nieblokujące OCR jest preferowane w stosunku do nasycenia puli wątków.

Dodatkowe możliwości IronOCR

Oprócz obszarów objętych tym porównaniem,IronOCR oferuje funkcje, które nie mają odpowiednika w Asprise:

  • Odczyt kodów kreskowych podczas OCR: Włącz ocr.Configuration.ReadBarCodes = true, aby wyodrębnić kody kreskowe i kody QR z dokumentów w tym samym przebiegu co rozpoznawanie tekstu — nie jest wymagana druga biblioteka.
  • OCR oparte na regionach: Użyj CropRectangle do wyodrębniania tekstu z określonych obszarów dokumentu, przydatne dla nagłówków faktur, pól formularzy i stref danych strukturalnych.
  • Wyniki pewności: Dostęp do wartości pewności rozpoznawania poszczególnych WORD-ów oraz ogólnej pewności rozpoznawania, aby oznaczyć fragmenty o niskiej pewności do weryfikacji przez człowieka.
  • Pobieranie danych ustrukturyzowanych: Przeglądaj obiekty wyników według stron, akapitów, wierszy i słów, z których każdy zawiera współrzędne pikselowe — umożliwiając analizę dokumentów z uwzględnieniem układu, wykraczającą poza zwykły tekst.
  • Eksport hOCR: Eksport wyników rozpoznawania w formacie hOCR w celu integracji z narzędziami do dalszego przetwarzania dokumentów.
  • Specjalistyczne rozpoznawanie dokumentów: specjalnie zaprojektowane procesy dla paszportów, czeków MICR, tablic rejestracyjnych i pisma ręcznego, wykraczające poza ogólne możliwości rozpoznawania Tesseract.
  • Śledzenie postępów: Subskrybuj zdarzenia postępu podczas długotrwałych operacji wsadowych w celu uzyskania informacji zwrotnej i monitorowania interfejsu użytkownika.

Zgodność z platformą.NETi gotowość na przyszłość

IronOCR jest przeznaczony dla platformy.NET/Standard 2.0, która obejmuje.NET/Framework 4.6.1+,.NETCore 2.0+ oraz wszystkie wersje od.NET5 do.NET9 i nowsze. Biblioteka jest regularnie aktualizowana zgodnie z cyklami wydawniczymi platformy.NET/i jest testowana na systemach Windows x64, Windows x86,Linuxx64, macOS, Docker, Azure App Service oraz AWS Lambda. Kompatybilność Asprise z platformą.NETjest ograniczona przez natywny model binarny — nowe platformy docelowe (ARM64, WASM) wymagają nowych kompilacji natywnych od Asprise Inc., a rytm wydawania nowych wersji oparty na Javie oznacza, że aktualizacje platformy.NET/mogą pozostawać w tyle. Dla zespołów, które obecnie korzystają z.NET8 i.NET9, a planują przejść na.NET10 w 2026 r., zarządzana architektura NuGet firmy IronOCR zapewnia prostą ścieżkę kompatybilności bez obaw związanych z natywnymi plikami binarnymi.

Wnioski

Asprise OCR to biblioteka OCR dla językaJavaz nakładką .NET. Dziedzictwo Javy nie jest przypadkowe — określa ono model wdrażania (natywne biblioteki DLL specyficzne dla platformy), styl API (metody cyklu życia w stylu C z stałymi całkowitoliczbowymi), język dokumentacji (przykłady w Javie wymagające tłumaczenia) oraz ograniczenia dotyczące wątków (LITE/STANDARD jednowątkowe zgodnie z umową licencyjną). Dla zespołów Java, które realizują projekt .NET, wielojęzyczne pozycjonowanie Asprise ma sens. Dla zespołów.NET/tworzących systemy produkcyjne te same cechy powodują utrudnienia na każdym etapie.

Szczególną uwagę należy zwrócić na ograniczenie dotyczące wątków. Dwa najtańsze poziomy Asprise — które obejmują większość zespołów oceniających produkt — nie pozwalają na wykonywanie wielowątkowe i wieloprocesowe. Każde ASP.NET Core Web API, każda Usługa Windows z kolejką zadań oraz każda funkcja Azure obsługująca jednoczesne wyzwalacze: to są standardowe wzorce produkcyjne .NET, a wszystkie z nich wymagają licencji ENTERPRISE od Asprise. Licencja IronOCR$999 Lite obejmuje je wszystkie bez ograniczeń.

Złożoność wdrożenia to druga kwestia praktyczna. Zespoły uruchamiające kontenery Docker, budujące na Linuxie lub wykorzystujące międzyplatformowe CI/CD muszą zarządzać platformowo-specyficznymi binariami natywnymi z Asprise. Te błędy — DllNotFoundException, BadImageFormatException — pojawiają się podczas uruchamiania na docelowej infrastrukturze, nie podczas budowy.IronOCR wdraża się przez standardowe zarządzanie pakietami NuGet, a mechanizm wyboru pakietów zajmuje się wewnętrznie platformowo-specyficznymi binariami. Powierzchnia wdrożeniowa to pojedyncze odwołanie NuGet.

Dla zespołów.NET/rozpoczynających nową integrację OCR, punkt startowy jest jasny: pojedynczy dotnet add package IronOcr, przypisanie klucza licencyjnego jednoliniowe i new IronTesseract().Read("document.jpg").Text dla pierwszego wyniku. Brak inicjalizacji silnika, brak pozyskiwania natywnych plików binarnych, brak audytu licencji dotyczących wątków.

Zwróć uwagęAsprise OCR, PDFSharp, Tesseract i iText są zarejestrowanymi znakami towarowymi ich odpowiednich właścicieli. Ta strona nie jest związana z, wspierana ani sponsorowana przez Asprise, Google, empira Software GmbH ani iText Group. Wszystkie nazwy produktów, loga 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.

Często Zadawane Pytania

Czym jest Asprise OCR SDK?

Asprise OCR SDK to rozwiązanie OCR wykorzystywane przez programistów i przedsiębiorstwa do wyodrębniania tekstu z obrazów i dokumentów. Jest to jedna z kilku opcji OCR ocenianych obok IronOCR for .NET pod kątem tworzenia aplikacji .NET.

Jak IronOCR wypada w porównaniu z Asprise OCR SDK dla programistów .NET?

IronOCR to natywna dla NuGet biblioteka OCR dla platformy .NET, wykorzystująca IronTesseract jako główny silnik. W porównaniu z Asprise OCR SDK oferuje prostsze wdrożenie (brak instalatorów SDK), ryczałtowe ceny oraz przejrzysty interfejs API w języku C# bez interoperacyjności COM i zależności od chmury.

Czy IronOCR jest łatwiejszy w konfiguracji niż Asprise OCR SDK?

IronOCR instaluje się za pomocą jednego pakietu NuGet. Nie ma żadnych instalatorów SDK, plików licencyjnych do skopiowania, komponentów COM do zarejestrowania ani oddzielnych plików binarnych środowiska uruchomieniowego, którymi trzeba by zarządzać. Cały silnik OCR jest zawarty w pakiecie.

Jakie różnice w dokładności występują między Asprise OCR SDK a IronOCR?

IronOCR osiąga wysoką dokładność rozpoznawania standardowych dokumentów biznesowych, faktur, paragonów i zeskanowanych formularzy. W przypadku dokumentów o bardzo niskiej jakości lub rzadkich skryptów dokładność zależy od jakości źródła. IronOCR zawiera filtry wstępnego przetwarzania obrazu, które poprawiają rozpoznawanie danych wejściowych o niskiej jakości.

Czy IronOCR obsługuje wyodrębnianie tekstu z plików PDF?

Tak. IronOCR wyodrębnia tekst zarówno z natywnych plików PDF, jak i ze skanowanych obrazów PDF za pomocą jednego wywołania. Obsługuje również wielostronicowe pliki TIFF, obrazy i strumienie. W przypadku skanowanych plików PDF OCR jest stosowany strona po stronie, z obiektami wynikowymi dla każdej strony.

Jak wygląda licencjonowanie Asprise OCR SDK w porównaniu z IronOCR?

IronOCR korzysta z licencji wieczystej o stałej stawce, bez opłat za stronę lub skan. Organizacje przetwarzające duże ilości dokumentów płacą ten sam koszt licencji niezależnie od ilości. Szczegóły i ceny hurtowe znajdują się na stronie licencji IronOCR.

Jakie języki obsługuje IronOCR?

IronOCR obsługuje 127 języków za pośrednictwem oddzielnych pakietów językowych NuGet. Dodanie języka wymaga wykonania pojedynczego polecenia „dotnet add package IronOcr.Languages.{Language}”. Nie jest wymagane ręczne umieszczanie plików ani konfiguracja ścieżek.

Jak zainstalować IronOCR w projekcie .NET?

Instalacja przez NuGet: „Install-Package IronOcr” w konsoli menedżera pakietów lub „dotnet add package IronOcr” w CLI. Dodatkowe pakiety językowe instaluje się w ten sam sposób. Nie jest wymagany natywny instalator SDK.

Czy IronOCR nadaje się do wdrożeń w Dockerze i kontenerach, w przeciwieństwie do Asprise OCR?

Tak. IronOCR działa w kontenerach Docker za pośrednictwem pakietu NuGet. Klucz licencyjny jest ustawiany za pomocą zmiennej środowiskowej. Silnik OCR nie wymaga żadnych plików licencyjnych, ścieżek SDK ani montowania woluminów.

Czy mogę wypróbować IronOCR przed zakupem, w porównaniu z Asprise OCR?

Tak. Tryb próbny IronOCR przetwarza dokumenty i zwraca wyniki OCR z nakładką znaku wodnego na wyjściu. Przed zakupem licencji można sprawdzić dokładność na własnych dokumentach.

Czy IronOCR obsługuje odczytywanie kodów kreskowych oprócz wyodrębniania tekstu?

IronOCR koncentruje się na wyodrębnianiu tekstu i OCR. Do odczytu kodów kreskowych firma Iron Software udostępnia bibliotekę IronBarcode jako dodatek. Obie biblioteki są dostępne osobno lub w ramach pakietu Iron Suite.

Czy łatwo jest przejść z Asprise OCR SDK na IronOCR?

Migracja z Asprise OCR SDK do IronOCR zazwyczaj obejmuje zastąpienie sekwencji inicjalizacyjnych instancjonowaniem IronTesseract, usunięcie zarządzania cyklem życia COM oraz aktualizację wywołań API. Większość migracji znacznie zmniejsza złożoność kodu.

Kannaopat Udonpant
Inżynier oprogramowania
Zanim stał się inżynierem oprogramowania, Kannapat ukończył doktorat z zasobów środowiskowych na Uniwersytecie Hokkaido w Japonii. W czasie studiowania, Kannapat również został członkiem Laboratorium Robotyki Pojazdów, które jest częścią Wydziału Inżynierii Bioprodukcji. W 2022 roku wykorzystał swoje umiejętności w ...
Czytaj więcej

Zespół wsparcia Iron

Jesteśmy online 24 godziny, 5 dni w tygodniu.
Czat
E-mail
Zadzwoń do mnie