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

Tesseract C# a IronOCR: Którą bibliotekę OCR należy używać w .NET?

Jeśli Twoja baza kodu .NET Framework 4.5 nadal korzysta z warstwy OCR, a niedawno odkryłeś, że Tesseract.Net.SDK firmy Patagames nie kompiluje się z .NET 6,.NET 8ani żadnym obrazem Docker dla systemu Linux, to znalazłeś się dokładnie w sytuacji, którą omawia ten artykuł. Tesseract.Net.SDK jest przeznaczony dla platformy .NET Framework w wersjach od 2.0 do 4.5, zawiera natywne pliki binarne tylko dla systemu Windows i wymaga uiszczenia opłaty za licencję komercyjną oprócz bezpłatnego silnika Tesseract — takie połączenie ogranicza zespoły do kurczącej się wyspy starszej infrastruktury w momencie, gdy większość organizacji przechodzi na konteneryzację obciążeń i aktualizuje środowiska uruchomieniowe.

Zrozumienie Tesseract.Net.SDK

Tesseract.Net.SDK to komercyjna nakładka .NET na silnik OCR Tesseract typu open source, sprzedawana przez firmę Patagames. Produkt pakuje wstępnie skompilowane pliki binarne Tesseract dla Windows x86 i x64, otacza C/C++ API Tesseract w zarządzanej powierzchni .NET i dostarcza ten pakiet przez NuGet pod ID pakietu Tesseract.Net.SDK.

Produkt został stworzony w czasach, gdy .NET Framework 4.5 stanowił podstawę wdrożeń, a Windows Server był jedyną platformą docelową. Dla większości zespołów ta era dobiegła końca, ale SDK nie nadąża za zmianami. Oficjalna matryca wsparcia obejmuje .NET Framework 2.0, 3.0, 3.5, 4.0 i 4.5. .NET Core, .NET Standard, .NET 5, .NET 6, .NET 7,.NET 8i.NET 9nie są obsługiwane. System Linux nie jest obsługiwany. SystemmacOSnie jest obsługiwany. Kontenery Docker — które działają prawie wyłącznie na obrazach bazowych systemu Linux — nie są obsługiwane.

Kluczowe cechy architektury Tesseract.Net.SDK:

  • Środowisko uruchomieniowe: wyłącznie .NET Framework 2.0–4.5; bez środowisk uruchomieniowych .NET Core lub nowoczesnego .NET
  • Platforma: wyłącznie Windows x86 i x64; Wywołania P/Invoke do natywnych bibliotek specyficznych dla Windows będą rzucać DllNotFoundException na dowolnym gospodarzu nie-Windows.
  • Zarządzanie danymi Tessdata: Języki nie są dołączone; deweloperzy pobierają pliki .traineddata z repozytorium Tesseract na GitHubie, umieszczają je w folderze bin/tessdata/ i konfigurują akcję budowy każdego pliku w Visual Studio.
  • Bezpieczeństwo wątków: instancje OcrApi nie są bezpieczne w wątkach; Równoległe obciążenia wymagają jednej instancji silnika na wątek, z których każda ładuje do pamięci 40–100 MB danych językowych.
  • Przetwarzanie wstępne: Brak wbudowanych funkcji; Obrazy przekrzywione, zaszumione lub o niskiej rozdzielczości wymagają użycia zewnętrznej biblioteki, takiej jak OpenCV lub ImageMagick
  • Wejście PDF: Nieobsługiwane natywnie; programiści instalują drugą bibliotekę, taką jak PdfiumViewer, aby renderować strony PDF do tymczasowych plików graficznych przed OCR
  • Twórca: Patagames jest prowadzone przez indywidualnego programistę; nie ma umowy SLA, poziomu wsparcia dla Enterprise ani redundancji, jeśli programista stanie się niedostępny

Wykorzystanie starszych wersji platformy .NET Framework w praktyce

Sztywna granica w .NET Framework 4.5 to nie tylko pole wyboru — kształtuje ona każdą późniejszą decyzję architektoniczną. Projekt, który zależy od Tesseract.Net.SDK, nie może celować w <TargetFramework>net8.0</TargetFramework> w swoim .csproj. Nie można go zbudować przez runner GitHub Actions z użyciem mcr.microsoft.com/dotnet/sdk:8.0. Nie można go wdrożyć w podzie Kubernetes z uruchomionym kontenerem Linux. W momencie, gdy reszta organizacji przekroczy tę granicę, usługa OCR staje się sierotą.

Własny kod inicjalizacyjny SDK bezpośrednio to ujawnia. Podstawowy wzorzec użycia w tesseract-net-sdk-basic-ocr.cs obejmuje jawny strażnik platformy Windows:

// Install: Install-Package Tesseract.Net.SDK
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
using Patagames.Ocr;

public string ExtractTextSimple(string imagePath)
{
    // Platform check — Tesseract.Net.SDK is Windows-only
    if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        throw new PlatformNotSupportedException(
            "Tesseract.Net.SDK only supports Windows.");
    }

    // Verify tessdata exists
    if (!Directory.Exists(@".\tessdata"))
    {
        throw new DirectoryNotFoundException(
            "tessdata folder not found. Download traineddata files from GitHub.");
    }

    using (var api = OcrApi.Create())
    {
        api.Init(Languages.English);       // loads eng.traineddata (~40 MB)
        return api.GetTextFromImage(imagePath);
    }
}
// Install: Install-Package Tesseract.Net.SDK
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
using Patagames.Ocr;

public string ExtractTextSimple(string imagePath)
{
    // Platform check — Tesseract.Net.SDK is Windows-only
    if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
    {
        throw new PlatformNotSupportedException(
            "Tesseract.Net.SDK only supports Windows.");
    }

    // Verify tessdata exists
    if (!Directory.Exists(@".\tessdata"))
    {
        throw new DirectoryNotFoundException(
            "tessdata folder not found. Download traineddata files from GitHub.");
    }

    using (var api = OcrApi.Create())
    {
        api.Init(Languages.English);       // loads eng.traineddata (~40 MB)
        return api.GetTextFromImage(imagePath);
    }
}
Imports Patagames.Ocr
Imports System.Runtime.InteropServices
Imports System.IO

Public Function ExtractTextSimple(ByVal imagePath As String) As String
    ' Platform check — Tesseract.Net.SDK is Windows-only
    If Not RuntimeInformation.IsOSPlatform(OSPlatform.Windows) Then
        Throw New PlatformNotSupportedException("Tesseract.Net.SDK only supports Windows.")
    End If

    ' Verify tessdata exists
    If Not Directory.Exists(".\tessdata") Then
        Throw New DirectoryNotFoundException("tessdata folder not found. Download traineddata files from GitHub.")
    End If

    Using api = OcrApi.Create()
        api.Init(Languages.English) ' loads eng.traineddata (~40 MB)
        Return api.GetTextFromImage(imagePath)
    End Using
End Function
$vbLabelText   $csharpLabel

Przed każdą linią przetworzoną przez OCR pojawiają się dwa zabezpieczenia: potwierdź Windows, potwierdź tessdata. Na każdym hoście innym niż Windows metoda ta generuje wyjątek przed dotarciem do silnika. Na każdym komputerze, na którym folder tessdata nie został skopiowany podczas wdrażania, generuje ona wyjątek ponownie. Żadna z tych kontroli nie jest standardowa — obie reprezentują tryby awarii, z którymi programiści spotykają się w środowisku produkcyjnym.

Zrozumienie IronOCR

IronOCR to komercyjna biblioteka OCR dla platformy .NET, oparta na zoptymalizowanym silniku Tesseract 5 z automatycznym przetwarzaniem wstępnym obrazów, natywnym wczytywaniem plików PDF oraz obsługą wielu platform, w tym Windows, Linux, macOS, Docker, Azure i AWS. Jest dostarczany jako pojedynczy pakiet NuGet bez zewnętrznej konfiguracji bibliotek natywnych, bez zarządzania folderem tessdata i bez skryptów wdrożeniowych specyficznych dla platformy.

Kluczowe cechy:

  • Obsługa środowisk uruchomieniowych: .NET Framework 4.6.2 i nowsze, .NET Core 2.0 i nowsze, .NET 5, 6, 7, 8 oraz 9; Pojedynczy plik binarny działa we wszystkich obsługiwanych środowiskach uruchomieniowych
  • Obsługiwane platformy: Windows x86/x64, Linux x64, macOS; wdraża się identycznie jak kontenery Docker, Azure App Service,AWS Lambdai pody Kubernetes
  • Przetwarzanie wstępne: Wbudowane filtry — Deskew(), DeNoise(), Contrast(), Binarize(), EnhanceResolution(), Sharpen(), Rotate() i więcej — zastosowane przez obiekt OcrInput przed wykonaniem silnika.
  • Wejście PDF: Natywne; input.LoadPdf() akceptuje zeskanowane i cyfrowe PDFy bez potrzeby użycia drugiej biblioteki; Pliki PDF chronione hasłem przekazują hasło jako parametr
  • Wyjście PDF z możliwością wyszukiwania: result.SaveAsSearchablePdf() konwertuje dowolny zeskanowany dokument do PDF z możliwością wyszukiwania tekstu w jednym wywołaniu.
  • Bezpieczeństwo wątków: instancje IronTesseract są bezpieczne w wątkach; Pojedyncza instancja obsługuje wszystkie wątki bez zwiększania alokacji pamięci
  • Obsługa języków: ponad 125 języków zainstalowanych jako oddzielne pakiety językowe NuGet, pobierane automatycznie przy pierwszym użyciu, bez konieczności ręcznego umieszczania plików
  • Licencjonowanie: Wieczysta jednorazowa opłata od $999 dla poziomu Lite; no per-document or per-transaction billing

Porównanie funkcji

Funkcja Tesseract.Net.SDK IronOCR
Obsługa platformy .NET Framework Tylko wersje 2.0–4.5 4.6.2+
Nowoczesny .NET (5/6/7/8/9) Nie Tak
Wdrażanie w systemie Windows Tak Tak
Wdrożenie w systemie Linux Nie Tak
Kontenery Docker Nie Tak
Wejście PDF (natywne) Nie Tak
Automatyczne przetwarzanie wstępne Nie Tak
Silnik bezpieczny dla wątków Nie Tak

Szczegółowe porównanie funkcji

Funkcja Tesseract.Net.SDK IronOCR
Kompatybilność środowiska uruchomieniowego
.NET Framework 2.0–4.5 Tak Nie
.NET Framework 4.6.2+ Nie Tak
.NET Core 2.x/3.x Nie Tak
.NET 5 Nie Tak
.NET 6 Nie Tak
.NET 7 Nie Tak
.NET 8 Nie Tak
.NET 9 Nie Tak
Obsługa platform
Windows x86/x64 Tak Tak
Linux x64 Nie Tak
macOS Nie Tak
Docker (obraz dla systemu Linux) Nie Tak
Azure App Service (Linux) Nie Tak
AWS Lambda Nie Tak
Pod Kubernetes Nie Tak
Źródła danych wejściowych
Pliki graficzne (BMP, PNG, JPEG, TIFF) Tak Tak
Wejście PDF (natywne) Nie Tak
Plik PDF chroniony hasłem Nie Tak
Tablica bajtów / Strumień Tak Tak
Przetwarzanie wstępne
Wyrównanie Nie (biblioteka zewnętrzna) Wbudowane
DeNoise Nie (biblioteka zewnętrzna) Wbudowane
Wzmocnienie kontrastu Nie (biblioteka zewnętrzna) Wbudowane
Binarize Nie (biblioteka zewnętrzna) Wbudowane
Poprawa rozdzielczości Nie (biblioteka zewnętrzna) Wbudowane
Wynik
Zwykły tekst Tak Tak
PDF z funkcją wyszukiwania Nie Tak
eksport hOCR Nie Tak
Dane ustrukturyzowane (słowa, wiersze, akapity z współrzędnymi) Nie Tak
Wskaźnik pewności Tak (GetMeanConfidence()) Tak (result.Confidence)
Obsługa języków
Liczba słów 120+ (pobieranie ręczne) Ponad 125 (pakiety NuGet)
Automatyczne pobieranie języka Nie Tak
Wątkowanie
Instancja silnika bezpieczna dla wątków Nie Tak
Wbudowane przetwarzanie równoległe Nie Tak
Obciążenie pamięci na wątek ~40–100 MB na silnik Wspólna pojedyncza instancja
Licencjonowanie
Model licencji Jednorazowe zlecenie komercyjne Wieczyste jednorazowe
Cena wywoławcza ~20–50 USD $999
Rozliczenie za każdy dokument Nie Nie
Wsparcie dla przedsiębiorstw / SLA Nie Tak

Obsługa wersji .NET i kompatybilność środowiska uruchomieniowego

Najistotniejszą różnicą między tymi dwiema bibliotekami nie jest projekt API ani dokładność — jest to kompatybilność środowiska uruchomieniowego.

Podejście Tesseract.Net.SDK

Tesseract.Net.SDK jest przeznaczony dla platformy .NET Framework w wersjach od 2.0 do 4.5. Każdy projekt, który z niego korzysta, musi sam być przeznaczony dla jednej z tych wersji platformy. Plik porównania migracji potwierdza to ograniczenie w sekcji konfiguracji:

// Install: Install-Package Tesseract.Net.SDK
// License: Commercial (Patagames)
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
//
// Requirements:
//   - tessdata folder must exist in bin/Debug/or bin/Release/
//   - Download traineddata files from https://github.com/tesseract-ocr/tessdata
//   - Windows operating system (no Linux/macOS support)

using Patagames.Ocr;

// Multi-language setup — all traineddata files must be manually downloaded
using (var api = OcrApi.Create())
{
    // Combine languages with bitwise OR
    api.Init(Languages.English | Languages.German | Languages.French);

    string text = api.GetTextFromImage(imagePath);
    return text;
}
// Install: Install-Package Tesseract.Net.SDK
// License: Commercial (Patagames)
// Platform: Windows ONLY (.NET Framework 2.0-4.5)
//
// Requirements:
//   - tessdata folder must exist in bin/Debug/or bin/Release/
//   - Download traineddata files from https://github.com/tesseract-ocr/tessdata
//   - Windows operating system (no Linux/macOS support)

using Patagames.Ocr;

// Multi-language setup — all traineddata files must be manually downloaded
using (var api = OcrApi.Create())
{
    // Combine languages with bitwise OR
    api.Init(Languages.English | Languages.German | Languages.French);

    string text = api.GetTextFromImage(imagePath);
    return text;
}
Imports Patagames.Ocr

' Install: Install-Package Tesseract.Net.SDK
' License: Commercial (Patagames)
' Platform: Windows ONLY (.NET Framework 2.0-4.5)
'
' Requirements:
'   - tessdata folder must exist in bin/Debug/or bin/Release/
'   - Download traineddata files from https://github.com/tesseract-ocr/tessdata
'   - Windows operating system (no Linux/macOS support)

' Multi-language setup — all traineddata files must be manually downloaded
Using api = OcrApi.Create()
    ' Combine languages with bitwise OR
    api.Init(Languages.English Or Languages.German Or Languages.French)

    Dim text As String = api.GetTextFromImage(imagePath)
    Return text
End Using
$vbLabelText   $csharpLabel

Wzorzec using (var api = OcrApi.Create()) jest idiomatyczny dla .NET Framework 2.0. Wykorzystuje instrukcję C# 1.0 using zamiast deklaracji C# 8.0 using var. Namespace to Patagames.Ocr. W tej kombinacji językowej stosuje się operację bitową OR na wyliczeniu. Żadna z tego kodu nie kompiluje się przeciwko któremukolwiek net6.0 albo net8.0 target framework w pliku projektu stylu SDK, ponieważ samo Tesseract.Net.SDK nie produkuje kompatybilnego zestawu.

Zespoły, które utknęły na .NET Framework 4.5, nie zrobiły tego z własnego wyboru. Znajdują się tam, ponieważ nie można zaktualizować zależności — czasami obejmujących bibliotekę OCR. Wybór Tesseract.Net.SDK pogłębia ten łańcuch zależności.

Podejście IronOCR

IronOCR obsługuje platformę .NET Framework 4.6.2 oraz wszystkie nowoczesne środowiska uruchomieniowe .NET aż do wersji .NET 9. Ten sam plik binarny pakietu działa na wszystkich z nich. Aktualizacja projektu z .NET Framework 4.8 do.NET 8nie wymaga wymiany biblioteki OCR.

// Works on .NET Framework 4.6.2, .NET Core, .NET 5/6/7/8/9
// Same NuGet package, same API, same results
using IronOcr;

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

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.German);
ocr.AddSecondaryLanguage(OcrLanguage.French);

var result = ocr.Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// Works on .NET Framework 4.6.2, .NET Core, .NET 5/6/7/8/9
// Same NuGet package, same API, same results
using IronOcr;

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

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
ocr.AddSecondaryLanguage(OcrLanguage.German);
ocr.AddSecondaryLanguage(OcrLanguage.French);

var result = ocr.Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr

' Works on .NET Framework 4.6.2, .NET Core, .NET 5/6/7/8/9
' Same NuGet package, same API, same results

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

Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
ocr.AddSecondaryLanguage(OcrLanguage.German)
ocr.AddSecondaryLanguage(OcrLanguage.French)

Dim result = ocr.Read("document.jpg")
Console.WriteLine(result.Text)
Console.WriteLine($"Confidence: {result.Confidence}%")
$vbLabelText   $csharpLabel

Nie stosować operatora bitowego OR w wyliczeniach językowych. Brak folderu tessdata. Brak sprawdzania platformy. Podręcznik konfiguracji IronTesseract zawiera opcje konfiguracyjne dla wszystkich obsługiwanych środowisk uruchomieniowych w jednym dokumencie.

Praktyczna konsekwencja dla zespołów w trakcie migracji: projekt ASP.NET Core 8 i starszy projekt .NET Framework 4.8 mogą korzystać z tej samej warstwy usług IronOCR. Bez kompilacji warunkowej, bez oddzielnych wersji bibliotek, bez warstwy abstrakcji maskującej niekompatybilne interfejsy API.

Obsługa platform i wdrażanie w kontenerach

Podejście Tesseract.Net.SDK

Tesseract.Net.SDK zawiera natywne pliki binarne dla systemów Windows x86 i x64. Wywołania P/Invoke, które inicjują silnik Tesseract, odwołują się do tych bibliotek DLL systemu Windows. Na hosta Linux — w tym dowolnym kontenerze Docker opartym na mcr.microsoft.com/dotnet/aspnet:8.0, ubuntu lub alpine — biblioteka DLL nie może być załadowana, a aplikacja rzuca DllNotFoundException podczas uruchomienia.

Przykład przetwarzania równoległego z tesseract-net-sdk-pdf-processing.cs ilustruje, co to znaczy dla obciążeń wsadowych na samym Windows przed rozważeniem Linuxa:

// Windows-only: Parallel.ForEach with separate engine per thread
// Each engine loads ~40-100 MB per language
Parallel.ForEach(
    imagePaths,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    imagePath =>
    {
        // WARNING: Must create separate OcrApi for each thread!
        // Memory usage: 4 threads × 100MB = 400MB minimum
        using (var api = OcrApi.Create())
        {
            api.Init(Languages.English);
            string text = api.GetTextFromImage(imagePath);
            results[imagePath] = text;
        }
    });
// Windows-only: Parallel.ForEach with separate engine per thread
// Each engine loads ~40-100 MB per language
Parallel.ForEach(
    imagePaths,
    new ParallelOptions { MaxDegreeOfParallelism = 4 },
    imagePath =>
    {
        // WARNING: Must create separate OcrApi for each thread!
        // Memory usage: 4 threads × 100MB = 400MB minimum
        using (var api = OcrApi.Create())
        {
            api.Init(Languages.English);
            string text = api.GetTextFromImage(imagePath);
            results[imagePath] = text;
        }
    });
$vbLabelText   $csharpLabel

Cztery wątki równoległe, cztery instancje silnika, 400 MB danych językowych ładowanych jednocześnie — i to tylko dla języka angielskiego. Dodaj niemiećki i francuski, a ta liczba się podwoi. SDK nie oferuje żadnego mechanizmu grupowania, który mógłby to złagodzić. Architektura jest niezgodna z nowoczesnymi limitami zasobów kontenerów, które zazwyczaj narzucają ograniczenia pamięci na pod.

Nie ma również ścieżki do Azure Functions w planie taryfowym Linux Consumption Plan, ścieżki doAWS Lambda(która działa na Amazon Linux) ani ścieżki do Google Cloud Run. Każda główna platforma bezserwerowa domyślnie korzysta z systemu Linux. Tesseract.Net.SDK jest z założenia wyłączony ze wszystkich tych projektów.

Podejście IronOCR

IronOCR wdraża się do Dockera bez dodatkowej konfiguracji poza jedną linią apt-get dla libgdiplus na obrazach opartych na Debianie. Przewodnik wdrażania Docker obejmuje zarówno kontenery Linux, jak i Windows. To samo dotyczy wdrożeń w systemie Linux, Azure i AWS.

Bezpieczeństwo wątków jest wbudowane w IronTesseract. Jedna instancja obsługuje wszystkich równoległych pracowników:

// Cross-platform: Windows, Linux, macOS, Docker
// Single instance — thread-safe
using IronOcr;

var ocr = new IronTesseract();

// Single engine instance shared across all threads
// Nie memory multiplication
Parallel.ForEach(imagePaths, imagePath =>
{
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    var result = ocr.Read(input);
    SaveResult(imagePath, result.Text);
});
// Cross-platform: Windows, Linux, macOS, Docker
// Single instance — thread-safe
using IronOcr;

var ocr = new IronTesseract();

// Single engine instance shared across all threads
// Nie memory multiplication
Parallel.ForEach(imagePaths, imagePath =>
{
    using var input = new OcrInput();
    input.LoadImage(imagePath);
    var result = ocr.Read(input);
    SaveResult(imagePath, result.Text);
});
Imports IronOcr

' Cross-platform: Windows, Linux, macOS, Docker
' Single instance — thread-safe
Dim ocr As New IronTesseract()

' Single engine instance shared across all threads
' Nie memory multiplication
Parallel.ForEach(imagePaths, Sub(imagePath)
    Using input As New OcrInput()
        input.LoadImage(imagePath)
        Dim result = ocr.Read(input)
        SaveResult(imagePath, result.Text)
    End Using
End Sub)
$vbLabelText   $csharpLabel

Cztery wątki, jedna instancja silnika, jedna kopia danych językowych w pamięci. Przykład wielowątkowości z testami wydajności można znaleźć w dokumentacji IronOCR, która szczegółowo opisuje opcje konfiguracyjne.

Przetwarzanie plików PDF

Podejście Tesseract.Net.SDK

Tesseract.Net.SDK nie obsługuje plików PDF. Plik tesseract-net-sdk-pdf-processing.cs jest szczery co do tego ograniczenia w swoim nagłówku:

// ISTOTNE OGRANICZENIE:
// Tesseract.Net.SDK NIE obsługuje natywnie plików PDF.
// Najpierw musisz użyć osobnej biblioteki, aby przekonwertować strony PDF na obrazy.
// W tym przykładzie wykorzystano PdfiumViewer, ale alternatywami są:
// - iTextSharp
// - Ghostscript.NET
// - Docnet.Core

Rezultatem jest potok wielobiblioteczny. Zainstaluj PdfiumViewer. Przeanalizuj każdą stronę PDF do Bitmap przy 200–300 DPI. Zapisz tę bitmapę do pliku tymczasowego. Uruchom api.GetTextFromImage() na pliku tymczasowym. Usuń plik tymczasowy. Powtórz dla każdej strony. Zaimplementuj obsługę błędów w przypadku częściowych niepowodzeń w trakcie przetwarzania dokumentu. Zarządzaj pamięcią jawnie — przykład ProcessLargeTiff wymusza GC.Collect() co dziesięć stron, aby zapobiec błędom braku pamięci na dużych dokumentach.

To jest rzeczywisty kod produkcyjny, a nie uproszczony przykład. Działa wyłącznie w systemie Windows, wyłącznie w środowisku .NET Framework i wymaga dodatkowej komercyjnej lub open-source'owej biblioteki, która sama w sobie wymaga zarządzania wdrożeniem.

Podejście IronOCR

IronOCR odczytuje pliki PDF w sposób natywny. Bez dodatkowych bibliotek, bez plików tymczasowych, bez pętli renderowania stron:

// Native PDF OCR — no PdfiumViewer, no temp files
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");   // native PDF support
var result = ocr.Read(input);

// Access page-by-page results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
}

// Or produce a searchable PDF output
result.SaveAsSearchablePdf("searchable-report.pdf");
// Native PDF OCR — no PdfiumViewer, no temp files
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadPdf("scanned-report.pdf");   // native PDF support
var result = ocr.Read(input);

// Access page-by-page results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}: {page.Text}");
}

// Or produce a searchable PDF output
result.SaveAsSearchablePdf("searchable-report.pdf");
Imports IronOcr

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadPdf("scanned-report.pdf") ' native PDF support
    Dim result = ocr.Read(input)

    ' Access page-by-page results
    For Each page In result.Pages
        Console.WriteLine($"Page {page.PageNumber}: {page.Text}")
    Next

    ' Or produce a searchable PDF output
    result.SaveAsSearchablePdf("searchable-report.pdf")
End Using
$vbLabelText   $csharpLabel

PDFy chronione hasłem wymagają jednego dodatkowego parametru: input.LoadPdf("encrypted.pdf", Password: "secret"). Konkretne zakresy stron używają input.LoadPdfPages("document.pdf", 1, 10). Przewodnik w formacie PDF oraz instrukcja obsługi z funkcją wyszukiwania obejmują wszystkie warianty.

Przykład OCR pliku PDF pokazuje pełny wzorzec, w tym sprawdzanie pewności i uporządkowany wynik. Przykład pliku PDF z funkcją wyszukiwania ilustruje przypadek użycia archiwum dokumentów, w którym zeskanowane pliki PDF są indeksowane i można je przeszukiwać.

Wstępne przetwarzanie obrazów i jakość dokumentów w rzeczywistych warunkach

Podejście Tesseract.Net.SDK

Silniki Tesseract są wrażliwe na jakość obrazu. Dokumenty, które są przekrzywione, mają niską rozdzielczość lub zawierają zakłócenia, dają znacznie gorszy wynik bez wstępnego przetwarzania. Tesseract.Net.SDK nie oferuje żadnych.

Plik porównawczy migracji bezpośrednio określa różnicę:

// Tesseract.Net.SDK: Nie preprocessing available
// Direct OCR on problematic image = garbage output
using (var api = OcrApi.Create())
{
    api.Init(Languages.English);

    // Direct OCR on problematic image — poor results
    string text = api.GetTextFromImage(imagePath);
    return text;

    // To preprocess, you need:
    // 1. Install Emgu CV or OpenCvSharp
    // 2. Implement Hough transform for skew detection
    // 3. Implement affine rotation for deskew
    // 4. Implement FastNlMeansDenoising for noise reduction
    // 5. Handle all the native OpenCV dependencies
    // This is often 200+ lines of code
}
// Tesseract.Net.SDK: Nie preprocessing available
// Direct OCR on problematic image = garbage output
using (var api = OcrApi.Create())
{
    api.Init(Languages.English);

    // Direct OCR on problematic image — poor results
    string text = api.GetTextFromImage(imagePath);
    return text;

    // To preprocess, you need:
    // 1. Install Emgu CV or OpenCvSharp
    // 2. Implement Hough transform for skew detection
    // 3. Implement affine rotation for deskew
    // 4. Implement FastNlMeansDenoising for noise reduction
    // 5. Handle all the native OpenCV dependencies
    // This is often 200+ lines of code
}
Imports Tesseract
Imports System

' Tesseract.Net.SDK: Nie preprocessing available
' Direct OCR on problematic image = garbage output
Using api = OcrApi.Create()
    api.Init(Languages.English)

    ' Direct OCR on problematic image — poor results
    Dim text As String = api.GetTextFromImage(imagePath)
    Return text

    ' To preprocess, you need:
    ' 1. Install Emgu CV or OpenCvSharp
    ' 2. Implement Hough transform for skew detection
    ' 3. Implement affine rotation for deskew
    ' 4. Implement FastNlMeansDenoising for noise reduction
    ' 5. Handle all the native OpenCV dependencies
    ' This is often 200+ lines of code
End Using
$vbLabelText   $csharpLabel

Ten komentarz nie jest przesadą. Implementacja funkcji prostowania obrazu o jakości produkcyjnej przy użyciu OpenCV w .NET to 100–200 linii kodu obejmujących inicjalizację, wykrywanie kąta, obliczenia macierzowe i transformację afiniczną. Kod ten musi następnie zostać przetestowany, utrzymywany i wdrożony — z własnym natywnym łańcuchem zależności, który ponownie działa wyłącznie w systemie Windows.

Podejście IronOCR

IronOCR pakuje przetwarzanie wstępne jako metody API pierwszej klasy na OcrInput. Te same operacje, które wymagają integracji OpenCV w Tesseract.Net.SDK, są tutaj pojedynczymi wywołaniami metod:

// Wbudowane preprocessing — no external library required
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("skewed-invoice-scan.jpg");

input.Deskew();               // automatic angle detection and correction
input.DeNoise();              // scanner artifact removal
input.Contrast();             // contrast enhancement
input.Binarize();             // optimal threshold conversion
input.EnhanceResolution(300); // scale low-DPI images to 300 DPI

var result = ocr.Read(input);
Console.WriteLine($"Confidence: {result.Confidence}%");
// Wbudowane preprocessing — no external library required
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("skewed-invoice-scan.jpg");

input.Deskew();               // automatic angle detection and correction
input.DeNoise();              // scanner artifact removal
input.Contrast();             // contrast enhancement
input.Binarize();             // optimal threshold conversion
input.EnhanceResolution(300); // scale low-DPI images to 300 DPI

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

Dim ocr As New IronTesseract()

Using input As New OcrInput()
    input.LoadImage("skewed-invoice-scan.jpg")

    input.Deskew()               ' automatic angle detection and correction
    input.DeNoise()              ' scanner artifact removal
    input.Contrast()             ' contrast enhancement
    input.Binarize()             ' optimal threshold conversion
    input.EnhanceResolution(300) ' scale low-DPI images to 300 DPI

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

Przewodnik po korekcji jakości obrazu oraz przewodnik po korekcji kolorów obrazu dokumentują wszystkie dostępne filtry wraz z porównaniami dokładności przed i po zastosowaniu. Przykład skanu o niskiej jakości pokazuje dane dotyczące poprawy dokładności w typowych, rzeczywistych warunkach dokumentów.

W przypadku konkretnych procesów związanych ze skanowanymi dokumentami, przewodnik po przetwarzaniu skanowanych dokumentów obejmuje w jednym artykułe wykrywanie orientacji, obsługę dokumentów wielostronicowych oraz optymalizację przepustowości przetwarzania partii.

Przewodnik po mapowaniu API

Tesseract.Net.SDK Odpowiednik IronOCR Uwagi
Install-Package Tesseract.Net.SDK dotnet add package IronOcr IronOCR obsługuje wszystkie nowoczesne środowiska uruchomieniowe
using Patagames.Ocr; using IronOcr;
OcrApi.Create() new IronTesseract() IronTesseract jest bezpieczny dla wątków; jedna instancja na aplikację
api.Init(Languages.English) ocr.Language = OcrLanguage.English IronOCR wykorzystuje przypisywanie właściwości, a nie wywołanie metody
api.Init(Languages.English \| Języki.Niemiećki) ocr.AddSecondaryLanguage(OcrLanguage.German) Nie jest wymagane bitowe OR
api.GetTextFromImage(path) ocr.Read("path.jpg").Text Połącz bezpośrednio lub użyj OcrInput
OcrImage.FromFile(path) new OcrInput("path.jpg") OcrInput akceptuje pliki, strumienie, tablice bajtów, adresy URL i mapy bitowe
OcrImage.FromBitmap(bmp) input.LoadImage(bitmap)
api.SetImage(img); api.GetText() ocr.Read(input).Text OcrInput jest odpowiednikiem SetImage
api.GetMeanConfidence() result.Confidence Zwrócono obiekt wynikowy
api.SetRectangle(x, y, w, h) new CropRectangle(x, y, w, h) podany do input.LoadImage() Przewodnik po OCR w poszczególnych regionach
api.SetVariable("tessedit_char_whitelist", x) ocr.Configuration.WhiteListCharacters = x
api.SetVariable("tessedit_char_blacklist", x) ocr.Configuration.BlackListCharacters = x
(no PDF support) input.LoadPdf("file.pdf") Nie jest wymagana żadna dodatkowa biblioteka
(no preprocessing) input.Deskew(); input.DeNoise(); itp. Wszystkie funkcje przetwarzania wstępnego wbudowane
(no structured output) result.Words, result.Lines, result.Pages Współrzędne na poziomie słów i poziom pewności
(no searchable PDF) result.SaveAsSearchablePdf("out.pdf") Wynik w postaci pliku PDF z możliwością wyszukiwania za pomocą jednego kliknięcia

Kiedy zespoły rozważają przejście z Tesseract.Net.SDK na IronOCR

Aktualizacja .NET wymusza podjęcie decyzji

Najczęstszym powodem nie jest niezadowolenie z jakości OCR — jest to planowana aktualizacja .NET Framework, która napotyka poważną przeszkodę na poziomie warstwy OCR. Zespół aktualizujący aplikację do zarządzania dokumentami z .NET Framework 4.7 do.NET 8odkrywa, że Tesseract.Net.SDK nie produkuje żadnego kompaktowego zestawu target framework. Aktualizacja albo się zawiesza, albo usługa OCR zostaje wyodrębniona do osobnego procesu działającego wyłącznie w systemie Windows i komunikującego się przez HTTP — co wprowadza dodatkowy węzeł sieciowy, oddzielny artefakt wdrożeniowy oraz nakładkę kompatybilnościową, którą trzeba utrzymywać w nieskończoność. Żaden z tych wyników nie jest akceptowalny dla większości zespołów, które są w trakcie aktualizacji. Zastąpienie Tesseract.Net.SDK przez IronOCR usuwa przeszkodę i pozwala na płynne przeprowadzenie aktualizacji, ponieważIronOCR działa jednocześnie zarówno na starym .NET Framework 4.6.2+, jak i nowym .NET 8, co oznacza, że usługa może być migrowana stopniowo.

Konteneryzacja potoku przetwarzania

Zadania związane z przetwarzaniem dokumentów są jednymi z pierwszych kandydatów do konteneryzacji: są bezstanowe, obciążają procesor i korzystają ze skalowania horyzontalnego. Zespół, który skontynuował konteneryzację pozostałej części swojego potoku, odkrywa, że Tesseract.Net.SDK zawodzi na etapie tworzenia obrazu Docker, gdy obrazem bazowym jest Linux. Do wyboru są kontenery Windows — które wiążą się z kosztami licencji, większymi rozmiarami obrazów i niekompatybilnością z większością zarządzanych usług Kubernetes, które domyślnie korzystają z pul węzłów Linux — lub biblioteka, która faktycznie obsługuje system Linux.IronOCR można wdrożyć w dowolnym kontenerze Linux przy użyciu standardowego pliku Dockerfile. Przewodnik wdrożeniowy Docker zawiera dokładną konfigurację pliku Dockerfile zarówno dla obrazów bazowych Debian, jak i Alpine.

Równoległe przetwarzanie wsadowe na dużą skalę

Potok przetwarzania faktur obsługujący 50 000 dokumentów dziennie z czterema równoległymi procesami wykorzystującymi Tesseract.Net.SDK przydziela co najmniej 400 MB tylko dla czterech instancji silnika załadowanych danymi w języku angielskim. Dodaj drugi język, a liczba ta podwoi się. Dodaj przetwarzanie wstępne za pomocą OpenCV, a zużycie pamięci jeszcze bardziej wzrośnie. Na serwerze o ograniczonych zasobach lub w środowisku kontenerowym z limitem pamięci wynoszącym 2 GB na pod, ta arytmetyka staje się przeszkodą we wdrożeniu. Model pojedynczej instancji IronOCR, bezpieczny dla wątków, eliminuje mnożenie pamięci na każdy wątek. Jedna instancja silnika obsługuje cztery, osiem lub szesnaście równoległych procesów roboczych przy użyciu jednego modelu językowego załadowanego jednorazowo. Przykład wielowątkowości ilustruje konfigurację.

Natywne procesy pracy z plikami PDF bez dodatkowych zależności

Organizacje, które otrzymują dokumenty głównie w formacie PDF — roszczenia ubezpieczeniowe, umowy, faktury, formularze podatkowe — borykają się z dodatkowym problemem związanym z Tesseract.Net.SDK: muszą utrzymywać bibliotekę renderowania PDF obok biblioteki OCR. Gdy PdfiumViewer lub iText wydają łatkę bezpieczeństwa, obie biblioteki wymagają skoordynowanych aktualizacji i testów regresyjnych. Gdy biblioteka PDF zawiera błąd powodujący nieprawidłowe renderowanie określonej wersji PDF, proces OCR generuje bezsensowny tekst bez wyraźnej przyczyny źródłowej. Natywna obsługa plików PDF przez IronOCR pozwala zredukować stos dwóch bibliotek do jednej. Jedna instalacja pakietu zastępuje obie. Strona poświęcona zastosowaniom OCR w plikach PDF obejmuje cały proces.

Wymagania dotyczące wdrożenia w Enterprise

Licencja Patagames na Tesseract.Net.SDK obejmuje wsparcie e-mail i na forum zapewniane przez jednego programistę. Nie ma umowy SLA, gwarantowanego czasu odpowiedzi ani ścieżki eskalacji. W przypadku zastosowań w branżach podlegających regulacjom — opiece zdrowotnej, finansach, administracji publicznej — zespoły ds. zamówień coraz częściej wymagają od dostawców oprogramowania udokumentowanych umów SLA, procesów ujawniania informacji dotyczących bezpieczeństwa oraz gwarancji ciągłości działania organizacji. Patagames, jako firma prowadzona przez pojedynczego programistę, nie jest w stanie spełnić tych wymagań.IronOCR został opracowany przez Iron Software, podmiot komercyjny oferujący dedykowane wsparcie, procesy bezpieczeństwa oraz warunki licencyjne zgodne z wymaganiami zakupowymi przedsiębiorstw. Strona licencyjna zawiera informacje o dostępnych poziomach wsparcia.

Typowe kwestie związane z migracją

Wzorzec przestrzeni nazw i instancji

Zmiana kodu z Tesseract.Net.SDK na IronOCR jest niewielka. Zamień using Patagames.Ocr; na using IronOcr;. Zamień OcrApi.Create() na new IronTesseract(). Zamień api.Init(Languages.English) na ocr.Language = OcrLanguage.English. Logika działania kodu wywołującego nie ulega zmianie. Prosta usługa ekstrakcji danych może zostać przeniesiona w mniej niż godzinę.

// Before: Tesseract.Net.SDK
using Patagames.Ocr;

using (var api = OcrApi.Create())
{
    api.Init(Languages.English);
    return api.GetTextFromImage(imagePath);
}

// After: IronOCR
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage(imagePath);
return ocr.Read(input).Text;
// Before: Tesseract.Net.SDK
using Patagames.Ocr;

using (var api = OcrApi.Create())
{
    api.Init(Languages.English);
    return api.GetTextFromImage(imagePath);
}

// After: IronOCR
using IronOcr;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage(imagePath);
return ocr.Read(input).Text;
Imports Patagames.Ocr

Using api = OcrApi.Create()
    api.Init(Languages.English)
    Return api.GetTextFromImage(imagePath)
End Using

Imports IronOcr

Dim ocr As New IronTesseract()
Using input As New OcrInput()
    input.LoadImage(imagePath)
    Return ocr.Read(input).Text
End Using
$vbLabelText   $csharpLabel

Samouczek dotyczący odczytywania tekstu z obrazów oraz podstawowy przykład OCR zawierają kompletne, działające przykłady z walidacją danych wejściowych i sprawdzaniem pewności wyników.

Usuwanie folderu Tessdata

Po migracji cały folder tessdata/ można usunąć z projektu.IronOCR dołącza dane językowe do swoich pakietów NuGet. Usuń wszystkie odniesienia .traineddata z .csproj, usuń katalog tessdata ze skryptów wdrażania i usuń wszelkie kroki potoku CI/CD kopiujące pliki traineddata. Pakiety NuGet IronOcr.Languages.* instalują dane językowe jako część normalnego kroku przywracania pakietu — bez oddzielnego pobierania, bez ręcznej konfiguracji folderu, bez ustawień akcji budowy w Visual Studio. Przewodnik po wielu językach obejmuje instalację pakietów językowych.

Uproszczenie procesu przetwarzania plików PDF

Każdy kod, który instalował PdfiumViewer, iText lub Ghostscript.NET w celu renderowania stron PDF przed OCR, może zostać całkowicie usunięty. Zamień całą wielokrokową linię przetwarzania renderuj-do-pliku-tymczasowego-następnie-OCR na input.LoadPdf(pdfPath). Należy przeprowadzić testy z uwzględnieniem plików PDF chronionych hasłem, określonych zakresów stron oraz dużych dokumentów liczących ponad 100 stron — są to skrajne przypadki, w których podczas walidacji najprawdopodobniej ujawnią się różnice w zachowaniu.

Model wątków i czas życia instancji

Kod Tesseract.Net.SDK zazwyczaj tworzy jedną instancję OcrApi na żądanie lub na wątek, aby uniknąć problemów z bezpieczeństwem wątków.IronOCR jest bezpieczny w wątkach, więc instancja IronTesseract powinna być tworzona raz (na starcie aplikacji lub jako singleton w kontenerze DI) i ponownie wykorzystywana we wszystkich żądaniach. Tworzenie nowego IronTesseract() na żądanie marnuje nakład związany z inicjalizacją. Zarejestruj go jako singleton w kontenerze usług .NET Core i wstrzyknij tam, gdzie jest to potrzebne.

Dodatkowe możliwości IronOCR

Oprócz funkcji bezpośrednio porównanych powyżej,IronOCR oferuje funkcje, których nie ma w Tesseract.Net.SDK:

  • Odczyt kodów kreskowych podczas OCR odczytuje kody QR i kody kreskowe liniowe osadzone w tym samym dokumencie, eliminując oddzielny etap skanowania kodów kreskowych; zobacz przykład OCR kodów kreskowych, aby zapoznać się z konfiguracją
  • Async OCR zapewnia ReadAsync() dla nieblokującej integracji z potokami żądań ASP.NET Core.
  • Wyodrębnianie tabel pozwala zidentyfikować strukturę tabelaryczną w dokumentach, umożliwiając ekstrakcję danych strukturalnych ze sprawozdań finansowych, faktur i raportów
  • Odczyt paszportów i dowodów tożsamości wykorzystuje specjalistyczne rozpoznawanie dostosowane do dokumentów podróży i dowodów tożsamości nadających się do odczytu maszynowego
  • Śledzenie postępu wyzwala zdarzenia postępu dla każdej strony podczas przetwarzania dokumentów wielostronicowych, umożliwiając dokładne wskaźniki postępu w długotrwałych zadaniach wsadowych

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

IronOCR obsługuje .NET Framework 4.6.2 poprzez bieżące wydanie.NET 9i będzie nadal obsługiwać przyszłe wydania .NET w miarę ich udostępniania. Biblioteka celuje w netstandard2.0 dla szerokiej zgodności frameworku i dostarcza natywne pliki binarne specyficzne dla platformy dla Windows, Linux imacOSw tym samym pakiecie NuGet. Zespoły aktualizujące z .NET Framework do.NET 8lub.NET 9nie muszą zmieniać biblioteki OCR — ta sama referencja pakietu IronOcr kompiluje się i działa na obu. Tesseract.Net.SDK jest przeznaczony dla platformy .NET Framework w wersjach od 2.0 do 4.5 i nie ma opublikowanego planu działania dotyczącego obsługi nowoczesnego środowiska .NET; jest strukturalnie niezgodne z obecnym cyklem wydawania Microsoft .NET, w ramach którego co roku w listopadzie pojawia się nowa główna wersja. Każdy zespół, który planuje przejść na wersję nowszą niż .NET Framework 4.5 — czy to za sześć miesięcy, czy za trzy lata — będzie musiał w momencie tej zmiany zastąpić Tesseract.Net.SDK, niezależnie od innych kryteriów oceny.

Wnioski

Tesseract.Net.SDK zajmuje specyficzną i kurczącą się niszę: jest to właściwy wybór dla zespołu, który na stałe angażuje się we wdrażanie Windows Server, .NET Framework 4.5 i przeznaczył 15–40 godzin czasu programistów na konfigurację tessdata, wdrożenie zewnętrznego przetwarzania wstępnego oraz zbudowanie potoku renderowania PDF z oddzielnej biblioteki. Opłata licencyjna to nie koszt. Koszt to wszystko, co się z tym wiąże.

Problem, od którego rozpoczął się ten artykuł — odkrycie w trakcie aktualizacji, że zależność OCR nie może być skierowana do.NET 8— nie jest przypadkiem skrajnym. Jest to przewidywalny skutek wyboru biblioteki, która wyraźnie nie obsługuje nowoczesnych środowisk uruchomieniowych .NET.IronOCR całkowicie eliminuje to ograniczenie: jeden pakiet NuGet obsługuje wszystkie środowiska uruchomieniowe od .NET Framework 4.6.2 do .NET 9, działa na systemach Windows, Linux,macOSi Docker oraz zawiera funkcje przetwarzania wstępnego i obsługę plików PDF, które w innym przypadku wymagałyby dwóch dodatkowych zależności i setek linii kodu integracyjnego.

W przypadku zespołów korzystających obecnie z Tesseract.Net.SDK w stabilnej aplikacji opartej na platformie .NET Framework 4.5, które nie planują modernizacji środowiska uruchomieniowego, status quo pozostaje niezmienne — dopóki wymóg stosowania kontenerów, migracja do systemu Linux lub aktualizacja platformy nie wymuszą zmiany. Dla zespołów aktywnie modernizujących swoje środowiska — konteneryzujących usługi, wdrażających .NET 8, przechodzących na infrastrukturę Linux lub skalujących potoki przetwarzania dokumentów — Tesseract.Net.SDK jest przeszkodą, a nie fundamentem. Przejście ze starszego API na IronOCR wymaga kilku godzin zmian w kodzie. Alternatywą jest utrzymanie usługi przeznaczonej wyłącznie dla systemu Windows jako "sieroty" na obrzeżach zmodernizowanej architektury na czas nieokreślony.

Opłata licencyjna za IronOCR jest wyższa niż opłata za Patagames SDK, ale rzeczywiste porównanie kosztów musi uwzględniać 15–40 godzin konfiguracji tessdata, integracji zewnętrznej biblioteki przetwarzania wstępnego oraz montażu potoku renderowania PDF, które Tesseract.Net.SDK wymaga przed przetworzeniem pojedynczego dokumentu w środowisku produkcyjnym. Ten nakład związany z konfiguracją został udokumentowany w powyższym porównaniu i nie zmniejsza się wraz z rozwojem zespołu ani wzrostem ilości dokumentów.

Zwróć uwagęGhostscript, PDFium, Tesseract, and iText są zarejestrowanymi znakami towarowymi ich odpowiednich właścicieli. Ta strona nie jest powiązana z, zaakceptowana przez ani sponsorowana przez Artifex Software, Chromium Project, Google 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 Tesseract .NET SDK (oficjalne)?

Tesseract .NET SDK (oficjalny) to rozwiązanie OCR używane 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 do tworzenia aplikacji .NET.

Jak IronOCR for .NET wypada w porównaniu z Tesseract .NET SDK (oficjalnym) 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 Tesseract .NET SDK (oficjalnym) oferuje prostsze wdrożenie (bez instalatorów SDK), stałą cenę oraz przejrzysty interfejs API w języku C# bez interoperacyjności COM lub zależności od chmury.

Czy IronOCR jest łatwiejszy w konfiguracji niż Tesseract .NET SDK (oficjalny)?

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 Tesseract .NET SDK (oficjalnym) 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 Tesseract .NET SDK (oficjalne) 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 Tesseract .NET SDK?

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 Tesseract .NET SDK?

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 Tesseract .NET SDK (oficjalnego) na IronOCR?

Migracja z Tesseract .NET SDK (oficjalnego) do IronOCR zazwyczaj polega na zastąpieniu sekwencji inicjalizacyjnych instancjonowaniem IronTesseract, usunięciu zarządzania cyklem życia COM oraz aktualizacji 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