Biblioteka OCR dla iOS (porównanie narzędzi bezpłatnych i płatnych)
PaddleSharp (Sdcb.PaddleOCR) znajduje się trzy warstwy abstrakcji od silnika OCR, na którym faktycznie działa Twój kod: Baidu trenuje modele sieci neuronowych, RapidOCR przepakowuje je w celu uzyskania lekkiej inferencji, a PaddleSharp ponownie je opakowuje do użytku w .NET. Każda warstwa zwiększa zależność od konserwacji, a łańcuch ujawnia swoje ograniczenia w momencie, gdy potrzebny jest język inny niż CJK, plik PDF jako dane wejściowe lub wdrożenie produkcyjne bez CUDA. W niniejszym porównaniu przeanalizowano, w jakich obszarach ta architektura się opłaca, a w jakich generuje koszty, których zespoły .NET rzadko przewidują z góry.
Zrozumienie PaddleSharp OCR
PaddleSharp jest owijka .NET wokół głębokiego frameworku uczenia PaddleOCR firmy Baidu, opublikowanego na NuGet jako Sdcb.PaddleOCR. Zamiast tradycyjnych algorytmów OCR, PaddleOCR wykorzystuje trzystopniowy proces sieci neuronowej: model wykrywający lokalizuje obszary tekstu na obrazie, model klasyfikujący określa orientację tekstu, a model rozpoznający przekształca każdy obszar w tekst. Każdy etap to osobny plik modelu, który można pobrać i skonfigurować niezależnie.
Oprogramowanie to zostało stworzone, aby umożliwić korzystanie z funkcji wnioskowania PaddlePaddle w środowisku .NET bez konieczności używania języka Python. Cel ten został osiągnięty pod względem technicznym, ale kosztem jest stos zależności, który obejmuje bibliotekę przetwarzania obrazów OpenCvSharp (wymagającą pakietów uruchomieniowych specyficznych dla platformy), natywne środowisko uruchomieniowe PaddleInference oraz same pliki modeli. W systemieWindowskonfiguracja wymaga co najmniej czterech pakietów NuGet, zanim będzie można rozpoznać choćby jedną literę.
Kluczowe cechy architektury PaddleSharp:
- Głębokość opakowania: trzy warstwy — PaddlePaddle (Baidu) → modele PaddleOCR → powiązania Sdcb.PaddleSharp .NET
- Zarządzanie modelami: Modele wykrywania, klasyfikacji i rozpoznawania są dostępne do pobrania osobno (odpowiednio ~3 MB, ~2 MB i ~10 MB dla chińskiego zestawu V3); zarządzasz ścieżkami i wersjami ręcznie
- Zależność OpenCV:
OpenCvSharp4jest wymagana do ładowania obrazów; zmiana platform wymaga zamiany pakietuOpenCvSharp4.runtime.* - Języki: Głównym językiem jest chiński i angielski; Obsługa innych języków jest ograniczona do pakietów modeli PaddleOCR, które są dostępne i utrzymywane.
- Przyspieszenie GPU: natywne wsparcie CUDA poprzez pakiet
Sdcb.PaddleInference.runtime.win64.cuda, który wymaga zgodnego zestawu narzędzi CUDA i instalacji cuDNN na hoście - Spadek wydajności procesora: Bez procesora graficznego wnioskowanie przebiega wolniej niż w przypadku alternatywnych rozwiązań zoptymalizowanych pod kątem procesora — 500–1500 ms na obraz w porównaniu z 100–400 ms w przypadku zoptymalizowanych silników nieopartych na uczeniu głębokim
- Zasięg społeczności: Niewielka społeczność anglojęzyczna; Większość dokumentacji, odpowiedzi na Stack Overflow i zgłoszeń na GitHubie jest w języku chińskim
Konfiguracja wnioskowania trzystopniowego
Skonfigurowanie PaddleSharp do prostego zadania ekstrakcji tekstu wymaga połączenia wszystkich trzech etapów modelu:
// Simplified — see Sdcb.PaddleOCR documentation for full API
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;
public class PaddleOcrService
{
private readonly PaddleOcrAll _ocr;
public PaddleOcrService()
{
// Three separate models, each downloaded independently
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
// GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = new PaddleOcrAll(detModel, clsModel, recModel);
}
public string ExtractText(string imagePath)
{
// OpenCV required for image loading — not System.Drawing
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
// Manual sort by position; no automatic reading-order guarantee
return string.Join("\n", result.Regions
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X)
.Select(r => r.Text));
}
}
// Simplified — see Sdcb.PaddleOCR documentation for full API
using Sdcb.PaddleOCR;
using Sdcb.PaddleOCR.Models;
using OpenCvSharp;
public class PaddleOcrService
{
private readonly PaddleOcrAll _ocr;
public PaddleOcrService()
{
// Three separate models, each downloaded independently
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
// GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = new PaddleOcrAll(detModel, clsModel, recModel);
}
public string ExtractText(string imagePath)
{
// OpenCV required for image loading — not System.Drawing
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
// Manual sort by position; no automatic reading-order guarantee
return string.Join("\n", result.Regions
.OrderBy(r => r.Rect.Center.Y)
.ThenBy(r => r.Rect.Center.X)
.Select(r => r.Text));
}
}
Imports Sdcb.PaddleOCR
Imports Sdcb.PaddleOCR.Models
Imports OpenCvSharp
Public Class PaddleOcrService
Private ReadOnly _ocr As PaddleOcrAll
Public Sub New()
' Three separate models, each downloaded independently
Dim detModel = LocalFullModels.ChineseV3.DetectionModel
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel
' GPU config: set GpuDeviceId = 0 and install CUDA runtime packages
_ocr = New PaddleOcrAll(detModel, clsModel, recModel)
End Sub
Public Function ExtractText(imagePath As String) As String
' OpenCV required for image loading — not System.Drawing
Using image = Cv2.ImRead(imagePath)
Dim result = _ocr.Run(image)
' Manual sort by position; no automatic reading-order guarantee
Return String.Join(vbLf, result.Regions _
.OrderBy(Function(r) r.Rect.Center.Y) _
.ThenBy(Function(r) r.Rect.Center.X) _
.Select(Function(r) r.Text))
End Using
End Function
End Class
Konstruktor sam wykonuje prawdziwą pracę: ładuje binaria modelu z dysku i inicjalizuje silnik wnioskowania. Ten koszt inicjalizacji ponoszony jest raz na instancję PaddleOcrAll, co sprawia, że obiekt jest kosztowny w tworzeniu i wymaga ostrożnego zarządzania cyklem życia w aplikacjach zorientowanych na usługi .NET.
Zrozumienie IronOCR
IronOCR to komercyjna biblioteka OCR dla platformy .NET, zbudowana w oparciu o zoptymalizowany silnik Tesseract 5 z nałożoną warstwą automatycznego przetwarzania wstępnego. Instaluje się jako pojedynczy pakiet NuGet bez zewnętrznych plików modeli, bez natywnej konfiguracji binarnej i bez zależności od dodatkowych bibliotek przetwarzania obrazu. Celem projektu jest wyeliminowanie luki między "instalacją" a "dokładnym wynikiem tekstowym" — luki, która charakteryzuje większość innych opcji OCR dla platformy .NET.
Kluczowe cechy IronOCR:
- Jedno wdrożenie pakietu:
dotnet add package IronOcr— brak pobierania modeli, brak katalogów tessdata, brak OpenCV - Automatyczne przetwarzanie wstępne: prostowanie, usuwanie szumów, wzmocnienie kontrastu, binarizacja i normalizacja rozdzielczości odbywają się automatycznie po wprowadzeniu obrazu; eksplitywne filtry wstępne są dostępne, gdy są potrzebne
- Natywna obsługa plików PDF: akceptowane są bezpośrednio zarówno zeskanowane pliki PDF, jak i pliki PDF z warstwą tekstową; Pliki PDF chronione hasłem wymagają jednego parametru
- 125+ języków: Dostarczane jako indywidualne pakiety językowe NuGet (np.
IronOcr.Languages.ChineseSimplified), zarządzane w ten sam sposób jak każda zależność pakietu - Strukturalny wynik: Wyniki pokazują strony, akapity, wiersze, słowa i ramki poszczególnych znaków wraz z wynikami pewności
- Bezpieczeństwo wątkowe: Wiele instancji
IronTesseractdziała jednocześnie bez wspólnego stanu; równoległe przetwarzanie zadania wsadowego to wywołanieParallel.ForEach - Ceny: $999 wieczyste (Lite, 1 programista), $1,499 (Plus, 3 programistów), $2,999 (Professional, 10 programistów), $5,999 (Unlimited)
Porównanie funkcji
| Funkcja | PaddleSharp OCR | IronOCR |
|---|---|---|
| Wymagane pakiety NuGet | Minimum3–4 | 1 |
| Zarządzanie modelami | Podręcznik (3 oddzielne pliki) | None |
| Plik wejściowy PDF | Nie (wymaga konwersji) | Język ojczysty |
| Liczba słów | ~10–20 | 125+ |
| Przyspieszenie GPU | Tak (CUDA) | Zoptymalizowane pod kątem procesora |
| Przetwarzanie wstępne | Podręcznik (OpenCV) | Automatyczne |
| Ceny | Bezpłatne (Apache 2.0) | $5,999 wieczyste |
Szczegółowe porównanie funkcji
| Funkcja | PaddleSharp OCR | IronOCR |
|---|---|---|
| Konfiguracja i wdrożenie | ||
| Wymagane pakiety NuGet | 3–4 | 1 |
| Pobieranie plików wzorcowych | Tak (3 pliki, łącznie ~15 MB) | Nie |
| Zależność od OpenCV | Wymagane | None |
| CUDA/cuDNN dla GPU | Wymagane dla trybu GPU | Nie dotyczy |
| WdrożenieDocker | Złożone (natywne środowiska uruchomieniowe) | Dodanie pojedynczej warstwy |
| Wdrożenie w środowisku izolowanym | Tak (po pobraniu modelu) | Tak |
| Rozpoznawanie tekstu | ||
| Dokładność w języku chińskim/japońskim/koreańskim | Wysoki (główny priorytet) | Wysoka |
| Dokładność pisma łacińskiego | Umiarkowany | Wysoka |
| Pismo odręczne | Ograniczone | Obsługiwane |
| Obsługa skanów niskiej jakości | Konieczne ręczne przetwarzanie wstępne | Automatyczne |
| Automatyczne prostowanie | Nie | Tak |
| Automatyczne usuwanie szumów | Nie | Tak |
| Źródła danych wejściowych | ||
| Pliki graficzne | Tak (za pośrednictwem OpenCV) | Tak |
| Pliki PDF (natywne) | Nie | Tak |
| Plik PDF chroniony hasłem | Nie | Tak |
| Strumienie i tablice bajtów | Za pośrednictwem OpenCV | Tak |
| Wielostronicowy plik TIFF | Za pośrednictwem OpenCV | Tak |
| Wynik | ||
| Zwykły tekst | Tak | Tak |
| PDF z funkcją wyszukiwania | Nie | Tak |
| hOCR | Nie | Tak |
| Ramki ograniczające na poziomie WORD | Tak | Tak |
| Wyniki pewności | Tak | Tak |
| Strukturalna hierarchia stron/wierszy/słów | Częściowe (tylko regiony) | Pełna |
| Obsługa języków | ||
| Liczba słów | ~10–20 | 125+ |
| Metoda instalacji języka | Pobierz pakiet wzorcowy | Pakiet NuGet |
| Dokument zawierający różne języki | Ograniczone | Tak |
| Indywidualne szkolenia językowe | Tak (PaddlePaddle) | Tak |
| Obsługa platform | ||
| Windows | Tak | Tak |
| Linux | Tak (złożona konfiguracja) | Tak |
| macOS | Ograniczone | Tak |
| Docker | Tak (z natywnymi środowiskami uruchomieniowymi) | Tak |
| AWS Lambda | Złożone | Tak |
| Wydajność | ||
| Pojedynczy obraz procesora | 500–1500 ms | 100–400 ms |
| Pojedynczy obraz GPU | 100–300 ms | Nie dotyczy |
| Pamięć (tryb procesora) | Wyżej | Umiarkowany |
| Odczytywanie BarCode podczas OCR | Nie | Tak |
| Gotowość do wprowadzenia na rynek | ||
| Licencja komercyjna | Apache 2.0 | Licencja wieczysta na programistę |
| Kanał wsparcia | Zgłoszenia na GitHubie | Wsparcie e-mail |
| Dokumentacja w języku angielskim | Rzadkie | Obszerne dokumenty, samouczki i poradniki |
| Studia przypadków z praktyki | Rzadkie (specyficzne dla .NET) | Udokumentowane |
Poziom abstrakcji i ryzyko związane z utrzymaniem
PaddleSharp jest jedyną opcją OCR dla platformy .NET w tej kategorii, która wymaga uruchomienia trzech oddzielnych projektów upstream jako warunków wstępnych. Ta złożoność stanowi główne ryzyko dla zespołów produkcyjnych.
Podejście PaddleSharp
W praktyce łańcuch zależności wygląda następująco:
- Baidu PaddlePaddle — podstawowa platforma do głębokiego uczenia się. Formaty modeli i interfejsy API wnioskowania są zdefiniowane tutaj.
- PaddleOCR — projekt szkolenia modeli firmy Baidu, który generuje wagi modeli wykrywania, klasyfikacji i rozpoznawania.
- Sdcb.PaddleSharp — warstwa powiązania .NET, która wywołuje natywne biblioteki PaddleInference i opakowuje API ładowania modeli.
Każda warstwa ma własny cykl wydawniczy, historię zmian wprowadzających niekompatybilność oraz społeczność. Kiedy Baidu aktualizuje interfejsy API wnioskowania PaddlePaddle, warstwa powiązania musi nadążać za zmianami. Gdy format modelu zmienia się między wersjami PaddleOCR, ścieżki pobierania modeli i kod ładowania w PaddleSharp muszą zostać zaktualizowane. Dla zespołu .NET są one niewidoczne, dopóki wdrożenie nie zakończy się niepowodzeniem.
Uproszczona ilustracja kosztu inicjalizacji:
// Simplified — see Sdcb.PaddleOCR documentation for full API
// This is not one line of setup; it represents several coordinated decisions:
// - Which model version to use (ChineseV3, V4, etc.)
// - Whether models are local files or downloaded on first use
// - Which inference backend (CPU, MKL, GPU)
// - Which OpenCvSharp runtime package matches the deployment OS
var detModel = LocalFullModels.ChineseV3.DetectionModel; // Version-specific
var clsModel = LocalFullModels.ChineseV3.ClassifierModel; // Version-specific
var recModel = LocalFullModels.ChineseV3.RecognitionModel; // Version-specific
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// If a newer model format is released, these names and classes may change
// Simplified — see Sdcb.PaddleOCR documentation for full API
// This is not one line of setup; it represents several coordinated decisions:
// - Which model version to use (ChineseV3, V4, etc.)
// - Whether models are local files or downloaded on first use
// - Which inference backend (CPU, MKL, GPU)
// - Which OpenCvSharp runtime package matches the deployment OS
var detModel = LocalFullModels.ChineseV3.DetectionModel; // Version-specific
var clsModel = LocalFullModels.ChineseV3.ClassifierModel; // Version-specific
var recModel = LocalFullModels.ChineseV3.RecognitionModel; // Version-specific
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// If a newer model format is released, these names and classes may change
' Simplified — see Sdcb.PaddleOCR documentation for full API
' This is not one line of setup; it represents several coordinated decisions:
' - Which model version to use (ChineseV3, V4, etc.)
' - Whether models are local files or downloaded on first use
' - Which inference backend (CPU, MKL, GPU)
' - Which OpenCvSharp runtime package matches the deployment OS
Dim detModel = LocalFullModels.ChineseV3.DetectionModel ' Version-specific
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel ' Version-specific
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel ' Version-specific
Dim ocr As New PaddleOcrAll(detModel, clsModel, recModel)
' If a newer model format is released, these names and classes may change
W tym przypadku wrażliwość na wersję jest realna. Zespoły, które przypięły się do Sdcb.PaddleOCR 2.x i muszą się zaktualizować, aby uzyskać dostęp do nowszych modeli, napotykają zmiany w API na poziomie warstwy wiążącej. Pliki modeli upstream nie są kompatybilne wstecznie między głównymi wersjami PaddleOCR.
Podejście IronOCR
IronOCR dostarcza silnik i wszystkie zależności w pakiecie NuGet. Nie ma wersji modelu do wyboru, nie ma backendu wnioskowania do skonfigurowania i nie ma biblioteki pomocniczej, którą trzeba synchronizować:
// One package: dotnet add package IronOcr
// Nie model downloads. Nie OpenCV. Nie runtime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var result = new IronTesseract().Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
// One package: dotnet add package IronOcr
// Nie model downloads. Nie OpenCV. Nie runtime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
var result = new IronTesseract().Read("document.jpg");
Console.WriteLine(result.Text);
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' One package: dotnet add package IronOcr
' Nie model downloads. Nie OpenCV. Nie runtime packages.
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
Dim result = New IronTesseract().Read("document.jpg")
Console.WriteLine(result.Text)
Console.WriteLine($"Confidence: {result.Confidence}%")
Aktualizacja IronOCR to pojedyncza zmiana wersji NuGet. Zmiany w interfejsie API są udokumentowane w informacjach o wydaniu, a kompatybilność wsteczna w ramach głównych wersji jest zachowana. Dla zespołów pracujących w ramach procesów CI/CD różnica w zakresie wdrażania jest znaczna: jeden pakiet w porównaniu z czterema pakietami Plus oraz pakietami środowiska uruchomieniowego specyficznymi dla platformy, a także plikami modeli, które muszą znajdować się na dysku w odpowiednich ścieżkach.
Opcje konfiguracji można znaleźć w przewodniku konfiguracji IronTesseract, a pełną listę akceptowanych źródeł danych wejściowych — w instrukcji dotyczącej obrazów.
Zakres językowy
PaddleOCR zostało przeszkolone przede wszystkim w zakresie języka chińskiego, a angielski jest językiem dodatkowym. Społeczność .NET skupiona wokół PaddleSharp odzwierciedla to pochodzenie: istnieją pakiety modeli dla pisma chińskiego (uproszczonego, tradycyjnego), angielskiego i kilku innych języków, ale pokrycie wykraczające poza około 10–20 języków jest niewielkie, a utrzymanie modeli innych niż CJK zależy od tego, czy projekt nadrzędny utrzyma zainteresowanie.
Podejście PaddleSharp
Zmiana języka w PaddleSharp oznacza zmianę zestawu modeli. Model rozpoznawania jest specyficzny dla danego języka i nie ma prostego znacznika API — instancjonuje się inny zestaw obiektów modelu:
// Simplified — see Sdcb.PaddleOCR documentation for full API
// English model set (if available for your version)
// var recModel = LocalFullModels.EnglishV3.RecognitionModel;
// Chinese model set (primary supported use case)
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// Non-CJK languages require checking upstream PaddleOCR model availability
// Mixed CJK + Latin in the same document may require model selection decisions
// Simplified — see Sdcb.PaddleOCR documentation for full API
// English model set (if available for your version)
// var recModel = LocalFullModels.EnglishV3.RecognitionModel;
// Chinese model set (primary supported use case)
var detModel = LocalFullModels.ChineseV3.DetectionModel;
var recModel = LocalFullModels.ChineseV3.RecognitionModel;
var clsModel = LocalFullModels.ChineseV3.ClassifierModel;
var ocr = new PaddleOcrAll(detModel, clsModel, recModel);
// Non-CJK languages require checking upstream PaddleOCR model availability
// Mixed CJK + Latin in the same document may require model selection decisions
' Simplified — see Sdcb.PaddleOCR documentation for full API
' English model set (if available for your version)
' Dim recModel = LocalFullModels.EnglishV3.RecognitionModel
' Chinese model set (primary supported use case)
Dim detModel = LocalFullModels.ChineseV3.DetectionModel
Dim recModel = LocalFullModels.ChineseV3.RecognitionModel
Dim clsModel = LocalFullModels.ChineseV3.ClassifierModel
Dim ocr = New PaddleOcrAll(detModel, clsModel, recModel)
' Non-CJK languages require checking upstream PaddleOCR model availability
' Mixed CJK + Latin in the same document may require model selection decisions
Dla zespołu przetwarzającego francuskie faktury, niemiećkie umowy lub arabskie formularze pytanie nie dotyczy tylko tego, czy pakiet modeli istnieje dzisiaj — chodzi o to, czy będzie on utrzymywany w przyszłym roku i czy istnieje angielska dokumentacja umożliwiająca jego konfigurację.
Podejście IronOCR
IronOCR udostępnia ponad 125 języków w postaci pakietów NuGet. Każdy pakiet językowy instaluje się dokładnie tak samo jak każda inna zależność i integruje się ze standardowymi potokami CI/CD bez ręcznego wdrażania plików:
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.Arabic
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English); // Mixed-language document
var result = ocr.Read("mixed-document.jpg");
// dotnet add package IronOcr.Languages.ChineseSimplified
// dotnet add package IronOcr.Languages.French
// dotnet add package IronOcr.Languages.Arabic
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
ocr.AddSecondaryLanguage(OcrLanguage.English); // Mixed-language document
var result = ocr.Read("mixed-document.jpg");
' dotnet add package IronOcr.Languages.ChineseSimplified
' dotnet add package IronOcr.Languages.French
' dotnet add package IronOcr.Languages.Arabic
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
ocr.AddSecondaryLanguage(OcrLanguage.English) ' Mixed-language document
Dim result = ocr.Read("mixed-document.jpg")
Przewodnik po różnych językach obejmuje równoczesne rozpoznawanie wielu języków dla dokumentów mieszających skrypty — umiejętność, która nie wymaga żadnej decyzji na poziomie modelu, tylko wywołania AddSecondaryLanguage.
Dla zespołów, których dokumenty obejmują wiele języków lub których wymagania językowe prawdopodobnie wykraczać będą poza początkowy zakres, katalog obejmujący 125 języków, wspierany przez regularnie aktualizowane pakiety NuGet, jest trwalszym wyborem niż zestaw 10–20 języków o zmiennym poziomie wsparcia technicznego.
Przetwarzanie wstępne i obsługa plików PDF
Pipeline sieci neuronowej PaddleOCR radzi sobie z pewnymi różnicami w jakości obrazu lepiej niż tradycyjne OCR dla tekstu CJK, ale nie zapewnia wbudowanego API do wstępnego przetwarzania obrazu dla zadań takich jak prostowanie, usuwanie szumów czy normalizacja rozdzielczości. Wszelkie operacje przetwarzania wstępnego muszą być napisane w OpenCV — bibliotece, której PaddleSharp już wymaga, ale która znacznie zwiększa ilość kodu dla zespołów, które nie są specjalistami w zakresie przetwarzania obrazów.
Obsługa plików PDF stanowi większą trudność. PaddleSharp nie posiada natywnego czytnika plików PDF. Potok dokumentów, który odbiera pliki PDF, musi konwertować każdą stronę na obraz przed wywołaniem silnika OCR, co wymaga oddzielnej biblioteki PDF, dodaje zależności i wprowadza zarządzanie plikami pośrednimi.
Podejście PaddleSharp
// Simplified — see Sdcb.PaddleOCR documentation for full API
// PaddleSharp has no PDF support — pages must be pre-converted to images
// Preprocessing (deskew, denoise) requires OpenCV operations:
using OpenCvSharp;
// Load image via OpenCV
using var image = Cv2.ImRead("scan.jpg");
// Manual grayscale conversion
using var gray = new Mat();
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY);
// Manual threshold (binarization)
using var binary = new Mat();
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);
// Then pass to OCR engine
var result = _ocr.Run(binary);
// Each preprocessing step requires OpenCV knowledge
// PDF pages require a separate PDF-to-image conversion step first
// Simplified — see Sdcb.PaddleOCR documentation for full API
// PaddleSharp has no PDF support — pages must be pre-converted to images
// Preprocessing (deskew, denoise) requires OpenCV operations:
using OpenCvSharp;
// Load image via OpenCV
using var image = Cv2.ImRead("scan.jpg");
// Manual grayscale conversion
using var gray = new Mat();
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY);
// Manual threshold (binarization)
using var binary = new Mat();
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary);
// Then pass to OCR engine
var result = _ocr.Run(binary);
// Each preprocessing step requires OpenCV knowledge
// PDF pages require a separate PDF-to-image conversion step first
Imports OpenCvSharp
' Load image via OpenCV
Using image As Mat = Cv2.ImRead("scan.jpg")
' Manual grayscale conversion
Using gray As New Mat()
Cv2.CvtColor(image, gray, ColorConversionCodes.BGR2GRAY)
' Manual threshold (binarization)
Using binary As New Mat()
Cv2.Threshold(gray, binary, 128, 255, ThresholdTypes.Binary)
' Then pass to OCR engine
Dim result = _ocr.Run(binary)
' Each preprocessing step requires OpenCV knowledge
' PDF pages require a separate PDF-to-image conversion step first
End Using
End Using
End Using
Napisanie tego kodu przetwarzania wstępnego jest wykonalne dla zespołów posiadających doświadczenie w pracy z OpenCV. Dla zespołów, które nie mają tego doświadczenia, krzywa uczenia się jest spora — OpenCV ma rozbudowaną powierzchnię API, a dokumentacja jest w dużej mierze napisana w C++.
Podejście IronOCR
Proces przetwarzania wstępnego IronOCR nie wymaga żadnej zewnętrznej biblioteki. Ten sam obiekt OcrInput, który akceptuje obrazy, akceptuje również pliki PDF, a filtry przetwarzania wstępnego to pojedyncze wywołania metod:
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
// Built-in preprocessing — no OpenCV, no manual image math
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
using var input = new OcrInput();
input.LoadImage("low-quality-scan.jpg");
// Built-in preprocessing — no OpenCV, no manual image math
input.Deskew();
input.DeNoise();
input.Contrast();
input.Binarize();
input.EnhanceResolution(300);
var result = new IronTesseract().Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Using input As New OcrInput()
input.LoadImage("low-quality-scan.jpg")
' Built-in preprocessing — no OpenCV, no manual image math
input.Deskew()
input.DeNoise()
input.Contrast()
input.Binarize()
input.EnhanceResolution(300)
Dim result = New IronTesseract().Read(input)
Console.WriteLine(result.Text)
End Using
W przypadku plików PDF natywna obsługa oznacza brak konieczności konwersji:
// PDF input — no external library, no page conversion
var result = new IronTesseract().Read("scanned-document.pdf");
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
// PDF input — no external library, no page conversion
var result = new IronTesseract().Read("scanned-document.pdf");
// Password-protected PDFs
using var input = new OcrInput();
input.LoadPdf("encrypted.pdf", Password: "secret");
var result = new IronTesseract().Read(input);
// Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf");
Imports IronTesseract
' PDF input — no external library, no page conversion
Dim result = New IronTesseract().Read("scanned-document.pdf")
' Password-protected PDFs
Using input As New OcrInput()
input.LoadPdf("encrypted.pdf", Password:="secret")
result = New IronTesseract().Read(input)
End Using
' Output as searchable PDF
result.SaveAsSearchablePdf("searchable-output.pdf")
Przewodnik po korekcji jakości obrazu obejmuje wszystkie dostępne filtry wraz z przykładami. Instrukcja obsługi plików PDF obejmuje wybór stron, wprowadzanie strumieniowe oraz obsługę haseł. Dla zespołów tworzących pliki PDF z możliwością wyszukiwania na podstawie zeskanowanych dokumentów, plik PDF z możliwością wyszukiwania jest wbudowanym formatem wyjściowym — a nie oddzielnym etapem przetwarzania.
Przewodnik po mapowaniu API
| KoncepcjaPaddleSharp OCR | Odpowiednik IronOCR |
|---|---|
Sdcb.PaddleOCR (namespace) |
IronOcr (namespace) |
PaddleOcrAll |
IronTesseract |
LocalFullModels.ChineseV3.DetectionModel |
Brak odpowiednika — nie jest wymagany wybór modelu |
LocalFullModels.ChineseV3.RecognitionModel |
Brak odpowiednika — nie jest wymagany wybór modelu |
LocalFullModels.ChineseV3.ClassifierModel |
Brak odpowiednika — nie jest wymagany wybór modelu |
Cv2.ImRead(path) (OpenCV image load) |
input.LoadImage(path) |
_ocr.Run(matImage) |
ocr.Read(input) lub ocr.Read("file.jpg") |
result.Regions |
result.Words, result.Lines, result.Pages |
region.Text |
word.Text, line.Text, page.Text |
region.Rect.Center |
word.X, word.Y |
| Zmiana modelu językowego (nowy zestaw modeli) | ocr.Language = OcrLanguage.French |
PaddleConfig (konfiguracja backendu wnioskowania) |
Brak odpowiednika — konfiguracja automatyczna |
| Operacje progowe / w skali szarości w OpenCvSharp | input.Binarize(), input.ToGrayScale() |
| Brak obsługi plików PDF — należy wcześniej przekonwertować je na obrazy | input.LoadPdf("file.pdf") |
| Brak możliwości wyszukiwania w pliku PDF | result.SaveAsSearchablePdf("output.pdf") |
Kiedy zespoły rozważają przejście zPaddleSharp OCRna IronOCR
Procesy przetwarzania dokumentów innych niż CJK
PaddleSharp został stworzony z myślą o języku chińskim. Dziedzictwo to jest widoczne w konwencji nazewnictwa modeli (ChineseV3), głównym języku dokumentacji oraz dostępności pakietów językowych. Zespół, który zaczyna od przetwarzania dokumentów w języku chińskim, a następnie rozszerza działalność na faktury w języku francuskim lub umowy w języku niemiećkim, napotyka poważną przeszkodę: dostępnych pakietów modeli poza językami CJK jest niewiele, zobowiązania dotyczące utrzymania modeli innych niż CJK są niepewne, a dokumentacja w języku angielskim dotycząca ich konfiguracji jest skąpa. Katalog IronOCR obejmujący ponad 125 języków dostępny za pośrednictwem NuGet oznacza, że rozszerzenie o kolejne języki to kwestia instalacji pakietu, a nie projektu badawczego.
Środowisko wdrożeniowe nie posiada procesora graficznego (GPU)
Pipeline uczenia głębokiego PaddleOCR jest zaprojektowany z myślą o wnioskowaniu na GPU. W przypadku procesora wyniki wydajności są zgodne z rzeczywistością: 500–1500 ms na obraz przy typowych rozdzielczościach dokumentów. W przypadku potoku przetwarzania wsadowego obsługującego tysiące dokumentów lub aplikacji ASP.NET obsługującej równoczesne żądania OCR, PaddleSharp w trybie CPU powoduje opóźnienia, które kumulują się wraz ze skalą. Zoptymalizowany silnik Tesseract 5 firmy IronOCR działa z prędkością 100–400 ms na obraz na procesorze, bez konieczności korzystania z karty graficznej. W przypadku wdrożeń na standardowych warstwach maszyn wirtualnych, kontenerach bez przepuszczania GPU lub pracownikach CI różnica ta stanowi o tym, czy obciążenie jest odpowiednie, czy nie.
Dokumenty PDF znajdują się w potoku wejściowym
PDF jest standardowym formatem dokumentów biznesowych. PaddleSharp nie posiada czytnika plików PDF. Zespoły, które odkrywają to ograniczenie po zbudowaniu rozwiązania w oparciu o PaddleSharp, stają przed wyborem: dodać bibliotekę PDF (co oznacza zarządzanie kolejną zależnością z własnymi kwestiami licencyjnymi i wersjami), konwertować pliki PDF na obrazy jako etap przetwarzania wstępnego (co zwiększa obciążenie pamięci i operacji wejścia/wyjścia) lub przejść na bibliotekę z natywną obsługą PDF. Natywna obsługa plików PDF w IronOCR, w tym plików chronionych hasłem i wyboru zakresu stron, sprawia, że jest to oczywisty wybór dla procesów dokumentacyjnych, które rozpoczynają się od plików PDF.
Łańcuch zależności nie przeszedł kontroli bezpieczeństwa lub zgodności
Wdrożenia w przedsiębiorstwach — w służbie zdrowia, finansach, administracji — często wymagają zestawienia komponentów oprogramowania i audytu zależności. Łańcuch PaddleSharp obejmuje pliki modeli pochodzące z Baidu oraz środowisko uruchomieniowe do wnioskowania w ramach głębokiego uczenia się Baidu. W przypadku organizacji, których polityka ogranicza komponenty oprogramowania do określonych źródeł, lub zespołów, które potrzebują jasnej ścieżki dostępu do informacji dotyczących bezpieczeństwa dostawców, zależność od plików binarnych pochodzących z Baidu wymaga dodatkowych etapów weryfikacji.IronOCR to pojedynczy produkt komercyjny zachodniego dostawcy oprogramowania, posiadający udokumentowane warunki licencji oraz standardową umowę wsparcia technicznego.
Zespół nie jest w stanie pokryć kosztów operacyjnych
Utrzymanie wdrożenia PaddleSharp przez 18 miesięcy oznacza śledzenie zgodności wersji modeli, koordynowanie wersji pakietów uruchomieniowych OpenCV z wdrożeniami specyficznymi dla danej platformy, utrzymywanie zgodności wersji zestawu narzędzi CUDA w przypadku korzystania z GPU oraz monitorowanie zgłoszeń w serwisie GitHub (głównie w języku chińskim) pod kątem istotnych zmian. To niebagatelna inwestycja operacyjna. Dla zespołów, których podstawową kompetencją jest tworzona przez nie aplikacja — a nie infrastruktura głębokiego uczenia się — nakład pracy związany z zarządzaniem PaddleSharp nie przynosi wartości proporcjonalnej do jego kosztów.
Typowe kwestie związane z migracją
Usunięcie zależności od OpenCV
PaddleSharp wymaga OpenCvSharp4 oraz specyficznego dla platformy pakietu OpenCvSharp4.runtime.* do ładowania obrazów.IronOCR akceptuje System.Drawing.Bitmap, ścieżki plików, strumienie i tablice bajtów bezpośrednio przez OcrInput. Migracja oznacza zastąpienie wywołań Cv2.ImRead() przez input.LoadImage() i całkowite usunięcie odwołań do pakietu OpenCvSharp:
// PaddleSharp pattern — requires OpenCV
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
//IronOCR equivalent — no OpenCV
var result = new IronTesseract().Read(imagePath);
// PaddleSharp pattern — requires OpenCV
using var image = Cv2.ImRead(imagePath);
var result = _ocr.Run(image);
//IronOCR equivalent — no OpenCV
var result = new IronTesseract().Read(imagePath);
Imports OpenCvSharp
Imports IronOcr
' PaddleSharp pattern — requires OpenCV
Using image = Cv2.ImRead(imagePath)
Dim result = _ocr.Run(image)
End Using
' IronOCR equivalent — no OpenCV
Dim result = New IronTesseract().Read(imagePath)
Przewodnik dotyczący danych wejściowych obrazów obejmuje wszystkie akceptowane typy danych wejściowych, w tym strumienie, adresy URL i mapy bitowe w pamięci.
Mapowanie wyników na poziomie regionu
PaddleSharp zwraca result.Regions — płaską listę wykrytych regionów tekstowych z prostokątami otaczającymi i ciągami tekstowymi.IronOCR zwraca bogatszą hierarchię: strony zawierają akapity, akapity zawierają wiersze, wiersze zawierają słowa, a wszystko to wraz ze współrzędnymi i wynikami pewności dla poszczególnych elementów. Jeśli kod migracji używa result.Regions, odpowiednik IronOCR dla płaskiego wyliczania słów z danymi o położeniu to:
var result = new IronTesseract().Read("document.jpg");
// Per-word with position — equivalent to PaddleSharp region enumeration
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%");
}
var result = new IronTesseract().Read("document.jpg");
// Per-word with position — equivalent to PaddleSharp region enumeration
foreach (var word in result.Words)
{
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%");
}
Imports System
Imports IronOcr
Dim result = New IronTesseract().Read("document.jpg")
' Per-word with position — equivalent to PaddleSharp region enumeration
For Each word In result.Words
Console.WriteLine($"'{word.Text}' at ({word.X},{word.Y}) confidence:{word.Confidence}%")
Next
Dokumentacja wyników odczytu zawiera pełną strukturę wyników. W przewodniku po wskaźnikach pewności wyjaśniono wartości pewności dla poszczególnych elementów oraz sposób ich wykorzystania do filtrowania jakości.
Zarządzanie cyklem życia silnika OCR
Konstrukcja PaddleOcrAll w PaddleSharp jest kosztowna — ładuje binaria modelu z dysku podczas tworzenia i powinna być traktowana jako singleton lub usługa zakresu w ASP.NET Core. Inicjalizacja IronTesseract w IronOCR jest mniej kosztowna, ale zasada jest taka sama: ponowne wykorzystanie instancji pomiędzy żądaniami w aplikacji internetowej jest bardziej wydajne niż tworzenie na żądanie. W obu przypadkach, wstrzykiwanie zależności jako singleton lub usługa zakresu per-żądanie to właściwy wzorzec.
Instalacja pakietu językowego
Obsługa języków w PaddleSharp oznacza wybór różnych zestawów modeli w momencie tworzenia. W IronOCR obsługa języków to pakiet NuGet dodany do projektu oraz jednozdaniowe wywołanie konfiguracyjne:
// dotnet add package IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
var result = ocr.Read("document.jpg");
// dotnet add package IronOcr.Languages.ChineseSimplified
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
var result = ocr.Read("document.jpg");
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
Dim result = ocr.Read("document.jpg")
Dla zespołów CJK migrujących z PaddleSharp dostępne są pakiety językowe IronOCR w językach: chińskim uproszczonym, chińskim tradycyjnym, japońskim i koreańskim. Niestandardowy przewodnik językowy obejmuje wykorzystanie specjalnie przeszkolonych danych tessdata do specjalistycznych zastosowań.
Dodatkowe możliwości IronOCR
Oprócz funkcji porównanych powyżej,IronOCR oferuje możliwości, które całkowicie wykraczają poza zakres PaddleSharp:
- OCR bazujące na regionach: Celowanie w określone strefy obrazu — wiersze nagłówka, sumy faktur, określone pola formularzy — używając
CropRectanglebez przetwarzania całej strony - Async OCR: Wbudowana obsługa asynchroniczna umożliwiająca integrację OCR z potokami żądań ASP.NET Core bez blokowania wątków
- Odczytywanie paszportów i dowodów osobistych: ustrukturyzowane pozyskiwanie danych z obszarów nadających się do odczytu maszynowego z dokumentów podróży i dowodów osobistych
- Odczytywanie tabel: przestrzenne grupowanie współrzędnych słów w celu odtworzenia struktury wierszy i kolumn na podstawie układu dokumentów tabelarycznych
- Licencjonowanie: Licencje wieczyste dla programistów bez opłat licencyjnych za czas działania oraz bezpłatne wykorzystanie do celów programistycznych w trybie próbnym
Zgodność z platformą .NET i gotowość na przyszłość
IronOCR jest przeznaczony dla platform .NET 8 i .NET 9 z pełną obsługą systemów Windows,LinuximacOSw architekturach x64 i x86 oraz udostępnia przewodniki wdrażania Docker dla obciążeń kontenerowych. PaddleSharp obsługuje nowoczesne środowiska uruchomieniowe .NET, ale jego wielopłatformowość jest skomplikowana przez pakiety środowisk uruchomieniowych OpenCV, które są dystrybuowane jako oddzielne pakiety NuGet specyficzne dla danej platformy, wymagające wyboru i wdrożenia odpowiedniego pakietu dla danego środowiska. Model wdrożenia IronOCR w postaci pojedynczego pakietu całkowicie eliminuje tę matrycę platform, a przewodniki wdrożeniowe dla systemów Linux, AWS i Azure odzwierciedlają sprawdzone konfiguracje przeznaczone do użytku produkcyjnego.
Wnioski
PaddleSharp stanowi przekonujący argument w jednym wąskim scenariuszu: zespół przetwarzający głównie dokumenty w języku chińskim na sprzęcie z procesorem graficznym obsługującym CUDA, gdzie pułap dokładności uczenia głębokiego dla tekstu CJK jest ważniejszy niż prostota wdrożenia. To prawdziwy przypadek użycia, w którym PaddleSharp sprawdza się doskonale. Trzyetapowy proces sieci neuronowej rozpoznaje gęsty tekst chiński z dokładnością, która odzwierciedla rzeczywiste inwestycje w głębokie uczenie się.
Poza tym scenariuszem poziom abstrakcji staje się odpowiedzialnością. Trzy zależności upstream — framework wnioskowania Baidu, projekt szkolenia modeli PaddleOCR oraz warstwa powiązania PaddleSharp .NET — mają swoje własne cykle wydawnicze, a zsynchronizowanie ich utrzymania nie jest gwarantowane. Dokumentacja w języku angielskim jest skąpa. Katalog językowy poza CJK jest ubogi i utrzymywany w sposób niekonsekwentny. Obsługa plików PDF wymaga osobnej biblioteki. A bez procesora graficznego opóźnienie procesora na obraz wynosi 500–1500 ms, w porównaniu z 100–400 ms w przypadku IronOCR.
WadąIronOCR jest sytuacja odwrotna: pojedynczy komercyjny pakiet z wejściową ceną $999, bez zarządzania modelami, natywnym wsparciem dla PDF i wejściami w wielu formatach,125+języków jako pakiety NuGet i wbudowanym przetwarzaniem wstępnym, które eliminuje potrzebę OpenCV. Abstrakcja jest zaprojektowana i stabilna — API nie wymagało, aby zespoły śledziły zmiany w formacie modeli Baidu, aby ich aplikacje działały.
Dla zespołów, które potrzebują ogólnego OCR w języku angielskim lub wielojęzycznym, mają przepływy pracy z plikami PDF albo ograniczenia wdrożeniowe uniemożliwiające użycie sprzętu GPU,IronOCR to oczywisty wybór. Dokumentacja IronOCR obejmuje pełen zakres typów danych wejściowych, opcji przetwarzania wstępnego i formatów wyjściowych, a centrum samouczków udostępnia działający kod dla popularnych typów dokumentów, od faktur przez paszporty po zeskanowane archiwa.
Często Zadawane Pytania
Czym jest PaddleSharp OCR?
PaddleSharp OCR 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 PaddleSharp OCR dla .NET 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 PaddleSharp OCR 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ż PaddleSharp OCR?
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 PaddleSharp OCR 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.
Czym różni się licencjonowanie PaddleSharp OCR od 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 PaddleSharp?
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, porównując go z PaddleSharp?
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 PaddleSharp OCR na IronOCR?
Migracja z PaddleSharp OCR 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.

