IRONSOFTWAREHOME
KORZYSTANIE Z IRONOCR

.NET OCR SDK: Biblioteka do rozpoznawania tekstu dla C#

Kannaopat Udonpant
Kannapat Udonpant
Updated: 21 kwietnia 2026

.NET OCR SDK to zestaw narzędzi programistycznych, który umożliwia aplikacjom napisanym w języku C# i platformie .NET programowe wyodrębnianie tekstu z obrazów, zeskanowanych plików PDF i innych formatów dokumentów. IronOCR to gotowy do użycia w środowisku produkcyjnym zestaw SDK OCR dla platformy .NET, który obejmuje zoptymalizowany silnik Tesseract 5 z filtrami przetwarzania wstępnego, funkcją odczytu kodów kreskowych, możliwością tworzenia plików PDF z funkcją wyszukiwania oraz obsługą ponad 125 języków — a wszystko to dostępne za pośrednictwem przejrzystego interfejsu API w języku C#, działającego w systemach Windows, Linux, macOS oraz na platformach chmurowych.

Dlaczego IronOCR jest odpowiednim zestawem SDK OCR dla platformy .NET do Twojego projektu?

Tworzenie systemu rozpoznawania tekstu od podstaw oznacza zarządzanie procesami przetwarzania wstępnego obrazów, plikami danych językowych, modelami wątków i analizą wyników — to miesiące pracy, zanim uda się wyodrębnić pierwsze słowo. IronOCR eliminuje ten nadmiar, dostarczając sprawdzony w boju silnik, który Twój zespół może wdrożyć do projektu w ciągu kilku minut.

Kluczowe funkcje, które wyróżniają go spośród zwykłych powiązań Tesseract:

  • Rozpoznawanie ponad 125 języków i alfabetów, w tym tekstu pisanego odręcznie
  • Wbudowane filtry: usuwanie szumów, prostowanie, binarizacja, zwiększanie rozdzielczości i korekcja kontrastu
  • Wykrywanie kodów BarCode i kodów QR w ramach jednego przebiegu odczytu
  • Generowanie plików PDF z możliwością wyszukiwania, zawierających niewidoczne warstwy tekstowe do archiwizacji procesów roboczych
  • Asynchroniczne i równoległe przetwarzanie wsadowe dla potoków o wysokiej przepustowości
  • Zonal OCR do wybierania konkretnych obszarów strony w celu skrócenia czasu przetwarzania
  • Obsługa wielu platform: Windows, Linux, macOS, Docker i Azure

Zgodnie z dokumentacją projektu Tesseract OCR, podstawowa wersja Tesseract wymaga ręcznej konfiguracji pakietów językowych, ustawień DPI i trybów wyjściowych. IronOCR zajmuje się tym wszystkim automatycznie, pozwalając Ci skupić się na znaczeniu wyodrębnionego tekstu, a nie na tym, jak go wyodrębnić.

Jak IronOCR wypada w porównaniu z surowym Tesseractem?

Surowy Tesseract za pomocą wrappera P/Invoke lub pakietu Tesseract NuGet pozostawia Ci odpowiedzialność za: pobieranie i umieszczanie plików językowych tessdata, wybór poprawnego trybu segmentacji stron, samodzielne obsługiwanie dzielenia wielostronicowych TIFF i PDF oraz uruchomienie wielowątkowości, jeśli chcesz przetwarzać w sposób równoległy. Żadna z tych informacji nie dotyczy wyłącznie Twojego problemu biznesowego.

IronOCR łączy wszystkie te elementy. Otrzymujesz typowaną powierzchnię API, automatyczne zarządzanie danymi, wbudowaną funkcję dzielenia i łączenia plików PDF oraz silnik bezpieczny dla wątków, który można ponownie wykorzystać w różnych żądaniach. W zamian za to wymagana jest płatna licencja do użytku produkcyjnego — strona licencyjna pokazuje aktualne poziomy cenowe, w tym bezpłatną licencję deweloperską.

Dla zespołów, które potrzebują wyłącznie zależności open source, dobrym rozwiązaniem jest surowy Tesseract Plus niestandardowe przetwarzanie wstępne. Dla zespołów, które muszą szybko wdrożyć niezawodny system OCR, IronOCR ogranicza zakres integracji do kilku linii kodu w języku C#.

Jak zainstalować IronOCR .NET SDK?

Instalacja odbywa się za pośrednictwem NuGet, standardowego menedżera pakietów .NET. Uruchom następujące polecenie w katalogu projektu:

PM > Install-Package IronOcr

Dla użytkowników Visual Studio, wyszukaj IronOcr w GUI Menadżera Pakietów NuGet i stamtąd zainstaluj. Pełne opcje instalacji, w tym ręczne odwołania do bibliotek DLL, można znaleźć w dokumentacji instalacji IronOCR.

Po instalacji, dodaj klucz licencyjny do uruchamiania aplikacji lub appsettings.json. Możesz rozpocząć bezpłatny okres próbny, aby uzyskać klucz próbny, który odblokowuje wszystkie funkcje podczas oceny wersji próbnej.

Weryfikacja instalacji

Szybka kontrola po instalacji potwierdza, że wszystko jest poprawnie podłączone. Utwórz aplikację konsolową przeznaczoną dla platformy .NET 10:

using IronOcr;

// Minimal smoke test -- reads a single image and prints extracted text
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("sample.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);

Jeśli tekst pojawia się w konsoli, oznacza to, że SDK jest zainstalowane, a klucz licencyjny jest ważny. Jesteś gotowy do tworzenia procesów produkcyjnych.

Jak wyodrębnić tekst z obrazów i plików PDF w C#?

Podstawowy wzorzec ekstrakcji jest spójny w przypadku wszystkich typów wejściowych. Tworzysz instancję IronTesseract, ładujesz treść do obiektu OcrInput i wywołujesz Read(). IronOCR automatycznie wykrywa format pliku na podstawie rozszerzenia, więc ta sama ścieżka kodu obsługuje pliki JPEG, PNG, TIFF, BMP oraz wielostronicowe pliki PDF.

using IronOcr;

// Reusable OCR service encapsulating the IronTesseract engine
public class OcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string filePath)
    {
        using var input = new OcrInput();

        // LoadPdf for PDF files; LoadImage for raster formats
        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        return _ocr.Read(input).Text;
    }

    public async Task<string> ExtractTextAsync(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        var result = await _ocr.ReadAsync(input);
        return result.Text;
    }
}

Główny punkt wejścia do korzystania z usługi:

using IronOcr;

var service = new OcrService();
string text = await service.ExtractTextAsync("invoice.pdf");
Console.WriteLine(text);

Instancja IronTesseract jest bezpieczna dla wątków i zaprojektowana do ponownego użycia. Należy utworzyć go jednorazowo podczas uruchamiania aplikacji (na przykład poprzez wstrzykiwanie zależności w .NET Core), zamiast instancjonować go dla każdego żądania.

Dla wielostronicowych PDF, result.Pages daje Ci dostęp do tekstu, wyników pewności i ramek ograniczających dla każdej strony. Zobacz Przewodnik po OCR wielostronicowego PDF dla szczegółów dotyczących iteracji stronami.

Jak poprawić dokładność OCR za pomocą filtrów przetwarzania wstępnego?

Surowe skany z skanerów płaskich, aparatów w smartfonach lub faksów często charakteryzują się szumami, obrotem, niskim kontrastem i niewystarczającą rozdzielczością. Proces korekcji jakości obrazu w IronOCR rozwiązuje każdy problem za pomocą ukierunkowanych filtrów, które można połączyć przed wywołaniem funkcji odczytu.

using IronOcr;

public class AccuracyOptimizedOcr
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        // Chain preprocessing filters in order of operation
        input.DeNoise();              // Remove scan artifacts and speckling
        input.Deskew();               // Correct page tilt up to 35 degrees
        input.Scale(150);             // Enlarge small text for better recognition
        input.Binarize();             // Convert to black/white for cleaner edges
        input.EnhanceResolution(300); // Sharpen blurry or low-DPI input

        var result = _ocr.Read(input);

        // Confidence below 70 often signals a preprocessing mismatch
        if (result.Confidence < 70)
            Console.WriteLine($"Warning: low confidence ({result.Confidence:F1}%)");

        return result.Text;
    }
}

Wskazówki dotyczące wyboru filtrów:

  • DeNoise() -- używaj przy skanach z dużymi plamami lub artefaktami kompresji
  • Deskew() -- używaj, gdy dokumenty są fotografowane pod kątem; zobacz wykrywanie obrotu strony w celu automatycznego wykrywania
  • Scale() -- używaj dla małego tekstu lub wejścia poniżej 150 DPI; wartości 150–200 zazwyczaj dają najlepsze wyniki
  • Binarize() -- używaj na kolorowych lub gradientowych tłach; konwertuje obraz na czystą czerń/biel
  • EnhanceResolution() -- używaj przy zamazanym lub niskokontrastowym tekście; docelowa rozdzielczość to 300 DPI jako optymalna wartość dla Tesseract

Badania opublikowane w International Journal on Document Analysis and Recognition konsekwentnie pokazują, że binarizacja i prostowanie są dwoma etapami przetwarzania wstępnego o największym wpływie na poprawę wskaźników rozpoznawania znaków. Zastosuj oba jako punkt odniesienia dla każdego procesu produkcyjnego.

Filtry przetwarzania wstępnego IronOCR i ich główne zastosowania
FiltrujProblem rozwiązanyKiedy złożyć wniosek
DeNoise()Artefakty skanera, szum plamkowyWszelkie skany z skanera płaskiego lub faksu
Deskew()Przechylenie i obrót stronyDokumenty ze zdjęciami lub nieprawidłowo wyrównane
Scale()Mały tekst lub niska rozdzielczośćRozdzielczość poniżej 150 DPI
Binarize()Kolorowe tła, gradientyKolorowy papier lub formularze z znakiem wodnym
EnhanceResolution()Rozmycie i niski kontrastZdjęcia z aparatu i skompresowane pliki JPEG

Jak zbudować produkcyjny potok przetwarzania wsadowego?

Pobieranie pojedynczych dokumentów jest proste, ale w rzeczywistych sytuacjach mamy do czynienia z setkami lub tysiącami plików trafiających do kolejek, folderów współdzielonych lub pamięci w chmurze. Asynchroniczny interfejs API i silnik IronOCR odporny na wątki sprawiają, że nadaje się on do równoległych obciążeń.

using IronOcr;
using Microsoft.Extensions.Logging;

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger<ProductionOcrService> _logger;

    public ProductionOcrService(ILogger<ProductionOcrService> logger)
    {
        _logger = logger;
        _ocr = new IronTesseract
        {
            Configuration =
            {
                RenderSearchablePdfsAndHocr = true,
                ReadBarCodes = true
            }
        };
    }

    public async Task<IReadOnlyList<string>> ProcessBatchAsync(
        IEnumerable<string> filePaths,
        int maxDegreeOfParallelism = 4)
    {
        var results = new System.Collections.Concurrent.ConcurrentBag<string>();

        var options = new ParallelOptions
        {
            MaxDegreeOfParallelism = maxDegreeOfParallelism
        };

        await Parallel.ForEachAsync(filePaths, options, async (filePath, ct) =>
        {
            try
            {
                using var input = new OcrInput();

                if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
                    input.LoadPdf(filePath);
                else
                    input.LoadImage(filePath);

                var result = await _ocr.ReadAsync(input);
                results.Add(result.Text);
                _logger.LogInformation("Processed {FilePath} at {Confidence:F1}% confidence",
                    filePath, result.Confidence);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "OCR failed for {FilePath}", filePath);
                results.Add(string.Empty);
            }
        });

        return results.ToList();
    }

    public void CreateSearchablePdf(string inputPath, string outputPath)
    {
        using var input = new OcrInput();

        if (inputPath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(inputPath);
        else
            input.LoadImage(inputPath);

        _ocr.Read(input).SaveAsSearchablePdf(outputPath);
        _logger.LogInformation("Searchable PDF written to {OutputPath}", outputPath);
    }
}

Limit MaxDegreeOfParallelism zapobiega wyczerpaniu pamięci, gdy pliki są duże. Wartość 4 działa dobrze na serwerze czterordzeniowym; zwiększaj ją dopiero po profilowaniu wykorzystania pamięci. Dla wdrożeń Azure Functions lub AWS Lambda, ustaw współbieżność na 1 na instancję funkcji i skaluj horyzontalnie zamiast tego.

CreateSearchablePdf generuje PDF, w którym oryginalny obraz jest zachowany jako widoczna warstwa, a rozpoznany tekst jest osadzony niewidocznie poniżej. Umożliwia to wyszukiwanie pełnotekstowe w przeglądarkach plików PDF oraz indeksowanie przez wyszukiwarki — co jest powszechnym wymaganiem w systemach zarządzania dokumentami.

Monitorowanie wyników pewności w środowisku produkcyjnym

Każdy OcrResult udostępnia właściwość Confidence (0-100), która odzwierciedla pewność silnika w rozpoznawanym tekście. Śledzenie tego wskaźnika w infrastrukturze logowania daje wczesny sygnał ostrzegawczy, gdy jakość dokumentów się pogarsza — na przykład, jeśli kalibracja skanera się zmienia lub nowy dostawca dokumentów wysyła skany o niższej rozdzielczości niż oczekiwano.

Praktyczna strategia progowa: rejestruj ostrzeżenie przy poziomie pewności poniżej 80, uruchamiaj ponowne przetwarzanie wstępne przy poziomie poniżej 70 i oznaczaj dokumenty do ręcznej weryfikacji przy poziomie poniżej 60. To wielopoziomowe podejście pozwala wychwycić problemy z jakością, zanim spowodują one ciche uszkodzenie danych w systemach niższego szczebla.

Dokumentacja logowania Microsoft .NET obejmuje wzorce ILogger stosowane w powyższej usłudze zbiorczej dla zespołów integrujących z wbudowanym kontenerem DI ASP.NET Core.

Jak wyodrębnić dane strukturalne ze skanowanych dokumentów?

Pierwszym krokiem jest wyodrębnienie tekstu. Drugim krokiem jest przetworzenie tego tekstu na pola typu, na których aplikacja może działać. Ten wzorzec łączy przejście odczytu IronOCR z Regex .NET, aby pozyskać strukturalne dane z faktur, formularzy i raportów.

using IronOcr;
using System.Text.RegularExpressions;

public record Invoice(
    string? InvoiceNumber,
    DateOnly? Date,
    decimal? TotalAmount,
    string RawText
);

public class InvoiceOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();

        if (invoicePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(invoicePath);
        else
            input.LoadImage(invoicePath);

        input.DeNoise();
        input.Deskew();

        var result = _ocr.Read(input);
        string text = result.Text;

        return new Invoice(
            InvoiceNumber: ExtractInvoiceNumber(text),
            Date: ExtractDate(text),
            TotalAmount: ExtractAmount(text),
            RawText: text
        );
    }

    private static string? ExtractInvoiceNumber(string text)
    {
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)", RegexOptions.IgnoreCase);
        return match.Success ? match.Groups[1].Value : null;
    }

    private static DateOnly? ExtractDate(string text)
    {
        // Numeric format: MM/DD/YYYY
        var numeric = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numeric.Success && DateTime.TryParse(numeric.Groups[1].Value, out var d1))
            return DateOnly.FromDateTime(d1);

        // Written format: January 15, 2025
        var written = Regex.Match(text,
            @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b",
            RegexOptions.IgnoreCase);
        if (written.Success && DateTime.TryParse(written.Value, out var d2))
            return DateOnly.FromDateTime(d2);

        return null;
    }

    private static decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        return match.Success && decimal.TryParse(match.Groups[1].Value, out var amt)
            ? amt
            : null;
    }
}

To podejście dobrze współgra z OCR skierowanym na zonę, gdy dokładnie wiadomo, gdzie pojawia się każde pole na formularzu. Podając prostokąt ograniczający, pomijasz rozpoznawanie całej strony i skupiasz się wyłącznie na obszarze zawierającym numer faktury lub sumę — co znacznie skraca czas przetwarzania dokumentów o stałym układzie.

Aby zapoznać się z bardziej zaawansowanymi scenariuszami ekstrakcji, w tym tabelami i formularzami strukturalnymi, przejrzyj przykłady ekstrakcji danych IronOCR na stronie produktu.

Jak radzisz sobie z wielojęzycznym OCR w .NET?

Wiele organizacji przetwarza dokumenty w więcej niż jednym języku — formularze importowe/eksportowe, umowy międzynarodowe lub wielojęzyczne zgłoszenia klientów. IronOCR radzi sobie z tym, umożliwiając konfigurację pakietu językowego przed wywołaniem funkcji odczytu.

using IronOcr;

// Configure multi-language recognition
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.EnglishBest;  // Swap for any of 125+ supported languages

// For mixed-language documents, combine language packs
ocr.AddSecondaryLanguage(OcrLanguage.German);

using var input = new OcrInput();
input.LoadPdf("multilingual-contract.pdf");
var result = ocr.Read(input);
Console.WriteLine(result.Text);

Strona pomocy technicznej IronOCR zawiera listę wszystkich ponad 125 dostępnych pakietów językowych wraz z instrukcjami pobierania. Pakiety językowe są dostarczane jako pakiety NuGet (na przykład, IronOcr.Languages.German) dzięki czemu integrują się z tym samym przepływem zarządzania pakietami, którego już używasz.

W przypadku zestawów znaków spoza alfabetu łacińskiego — arabskiego, chińskiego, japońskiego, koreańskiego — IronOCR zapewnia zoptymalizowane modele obsługujące kierunek tekstu od prawej do lewej oraz skrypty ideograficzne. Szczegóły konfiguracji można znaleźć w przewodniku CJK OCR.

Jakie są Twoje kolejne kroki?

Masz teraz wzorce potrzebne do dodania OCR klasy produkcyjnej do dowolnej aplikacji .NET 10: podstawowe wyodrębnianie tekstu, przetwarzanie wstępne trudnych skanów, asynchroniczne przetwarzanie wsadowe, parsowanie danych strukturalnych oraz obsługa wielu języków.

W tym miejscu zapoznaj się z poniższymi obszarami w zależności od potrzeb Twojego projektu:

Zacznij od bezpłatnej licencji próbnej, aby ocenić pełny zestaw funkcji na własnych dokumentach przed podjęciem decyzji o wyborze planu.

NuGetZainstaluj za pomocą NuGet

PM > Install-Package IronOcr

Install IronOCR by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

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