IRONSOFTWAREHOME
PORÓWNAJ Z INNYMI KOMPONENTAMI

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

Kannaopat Udonpant
Kannapat Udonpant
Updated: 28 czerwca 2026

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

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

FunkcjaTesseract.Net.SDKIronOCR
Obsługa platformy .NET FrameworkTylko wersje 2.0–4.54.6.2+
Nowoczesny .NET (5/6/7/8/9)NieTak
Wdrażanie w systemie WindowsTakTak
Wdrożenie w systemie LinuxNieTak
Kontenery DockerNieTak
Wejście PDF (natywne)NieTak
Automatyczne przetwarzanie wstępneNieTak
Silnik bezpieczny dla wątkówNieTak

Szczegółowe porównanie funkcji

FunkcjaTesseract.Net.SDKIronOCR
Kompatybilność środowiska uruchomieniowego
.NET Framework 2.0–4.5TakNie
.NET Framework 4.6.2+NieTak
.NET Core 2.x/3.xNieTak
.NET 5NieTak
.NET 6NieTak
.NET 7NieTak
.NET 8NieTak
.NET 9NieTak
Obsługa platform
Windows x86/x64TakTak
Linux x64NieTak
macOSNieTak
Docker (obraz dla systemu Linux)NieTak
Azure App Service (Linux)NieTak
AWS LambdaNieTak
Pod KubernetesNieTak
Źródła danych wejściowych
Pliki graficzne (BMP, PNG, JPEG, TIFF)TakTak
Wejście PDF (natywne)NieTak
Plik PDF chroniony hasłemNieTak
Tablica bajtów / StrumieńTakTak
Przetwarzanie wstępne
WyrównanieNie (biblioteka zewnętrzna)Wbudowane
DeNoiseNie (biblioteka zewnętrzna)Wbudowane
Wzmocnienie kontrastuNie (biblioteka zewnętrzna)Wbudowane
BinarizeNie (biblioteka zewnętrzna)Wbudowane
Poprawa rozdzielczościNie (biblioteka zewnętrzna)Wbudowane
Wynik
Zwykły tekstTakTak
PDF z funkcją wyszukiwaniaNieTak
eksport hOCRNieTak
Dane ustrukturyzowane (słowa, wiersze, akapity z współrzędnymi)NieTak
Wskaźnik pewnościTak (GetMeanConfidence())Tak (result.Confidence)
Obsługa języków
Liczba słów120+ (pobieranie ręczne)Ponad 125 (pakiety NuGet)
Automatyczne pobieranie językaNieTak
Wątkowanie
Instancja silnika bezpieczna dla wątkówNieTak
Wbudowane przetwarzanie równoległeNieTak
Obciążenie pamięci na wątek~40–100 MB na silnikWspólna pojedyncza instancja
Licencjonowanie
Model licencjiJednorazowe zlecenie komercyjneWieczyste jednorazowe
Cena wywoławcza~20–50 USD$999
Rozliczenie za każdy dokumentNieNie
Wsparcie dla przedsiębiorstw / SLANieTak

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

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

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

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

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
Text

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

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
}
C#

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

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.SDKOdpowiednik IronOCRUwagi
Install-Package Tesseract.Net.SDKdotnet add package IronOcrIronOCR 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.EnglishIronOCR 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").TextPołą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).TextOcrInput jest odpowiednikiem SetImage
api.GetMeanConfidence()result.ConfidenceZwró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.PagesWspół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;

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.

Powiązane artykuły

Key in blue circle

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

Your trial license will be sent to your email address

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

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