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

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: OpenCvSharp4 jest wymagana do ładowania obrazów; zmiana platform wymaga zamiany pakietu OpenCvSharp4.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
$vbLabelText   $csharpLabel

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 IronTesseract działa jednocześnie bez wspólnego stanu; równoległe przetwarzanie zadania wsadowego to wywołanie Parallel.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:

  1. Baidu PaddlePaddle — podstawowa platforma do głębokiego uczenia się. Formaty modeli i interfejsy API wnioskowania są zdefiniowane tutaj.
  2. PaddleOCR — projekt szkolenia modeli firmy Baidu, który generuje wagi modeli wykrywania, klasyfikacji i rozpoznawania.
  3. 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
$vbLabelText   $csharpLabel

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}%")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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 CropRectangle bez 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.

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

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.

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