Jak zaimplementować OCR w projektach GitHub w C# za pomocą IronOCR
Wyszukiwanie rozwiązań OCR na GitHubie często prowadzi do fragmentarycznej dokumentacji, skomplikówanych konfiguracji Tesseracta i projektów, które nie były aktualizowane od lat. Dla programistów C#, którzy potrzebują niezawodnego wyciągania tekstu z obrazów i plików PDF, poruszanie się po ekosystemie repozytoriów może zająć wiele godzin, które lepiej byłoby poświęcić na pisanie kodu. Wiele projektów open source związanych z optycznym rozpoznawaniem znaków wymaga ręcznego zarządzania plikami binarnymi, pobierania plików tessdata oraz rozwiązywania problemów specyficznych dla danej platformy.
Ten samouczek pokazuje, jak zaimplementować funkcję OCR w projektach C# przy użyciu biblioteki IronOCR, zarządzanej, która eliminuje obciążenie związane z konfiguracją, typowe dla surowych opakowań Tesseract. Niezależnie od tego, czy tworzysz potoki przetwarzania dokumentów, czy dodajesz rozpoznawanie tekstu do istniejących aplikacji, ten przewodnik zawiera działające przykłady kodu gotowe do wykorzystania w dowolnym projekcie OCR C# na GitHubie.
Jak rozpocząć pracę z IronOCR?
IronOCR udostępnia bibliotekę .NET zarządzaną, dystrybuowaną za pośrednictwem NuGet, co ułatwia jej integrację z dowolnym repozytorium GitHub. W przeciwieństwie do open-source'owych opakowań OCR Tesseract, które wymagają ręcznego zarządzania plikami binarnymi i konfiguracją tessdata, IronOCR obsługuje te zależności wewnętrznie i działa od razu po instalacji w systemach Windows, Linux i macOS.
Biblioteka prowadzi oficjalne repozytoria przykładów na GitHubie, które programiści mogą klonować i wykorzystywać jako punkt odniesienia. Te przykłady pokazują rzeczywiste zastosowania, w tym konwersję obrazów na tekst, obsługę wielu języków oraz przetwarzanie plików PDF. Współtwórcy mogą testować funkcje natychmiast po sklonowaniu, bez konieczności dodatkowej konfiguracji.
Aby rozpocząć pracę w Visual Studio, zainstaluj IronOCR za pomocą menedżera pakietów NuGet:
Install-Package IronOcr
Install-Package IronOcr

Po zainstalowaniu ten pojedynczy pakiet zawiera wszystko, co jest potrzebne do operacji OCR. Biblioteka obsługuje .NET Framework 4.6.2+, .NET Core oraz .NET 5–10, zapewniając maksymalną kompatybilność z różnymi typami projektów.
Jak wyodrębnić tekst z formatów obrazów w języku C#?
Poniższy przykład ilustruje podstawowe wyodrębnianie tekstu przy użyciu klasy IronTesseract biblioteki IronOCR. Ten silnik OCR odczytuje różne formaty obrazów, w tym PNG, JPG, JPEG, BMP, GIF i TIFF:
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load and process an image
using var input = new OcrInput("document-scan.png");
// Perform OCR and retrieve results
var result = ocr.Read(input);
// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load and process an image
using var input = new OcrInput("document-scan.png");
// Perform OCR and retrieve results
var result = ocr.Read(input);
// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load and process an image
Using input As New OcrInput("document-scan.png")
' Perform OCR and retrieve results
Dim result = ocr.Read(input)
' Output the extracted text to console
Console.WriteLine($"Extracted Text:{vbCrLf}{result.Text}")
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
Klasa IronTesseract służy jako główny silnik OCR, zbudowany w oparciu o zoptymalizowaną implementację Tesseract 5. Po utworzeniu instancji obiekt OcrInput ładuje obraz docelowy z dysku, adresu URL lub tablicy bajtów. Metoda Read przetwarza dane wejściowe i zwraca obiekt OcrResult zawierający wyodrębniony tekst zwykły wraz z procentową wartością pewności wskazującą dokładność rozpoznania. Wyższe wartości pewności (powyżej 90%) zazwyczaj wskazują na czyste, dobrze sformatowane dokumenty źródłowe.
Obiekt OcrResult zapewnia ustrukturyzowany dostęp do rozpoznanej treści. Oprócz zwykłego tekstu programiści mają dostęp do poszczególnych słów, wierszy, akapitów i znaków, wraz z ich pozycjami i wynikami pewności. Każdy Word zawiera współrzędne prostokąta ograniczającego, co sprawia, że jest on przydatny w aplikacjach wymagających precyzyjnych danych dotyczących lokalizacji tekstu, takich jak adnotacje w dokumentach lub wyodrębnianie pól formularzy.
Dane wejściowe

Wynik

IronOCR obsługuje również ładowanie obrazów ze strumieni i tablic bajtów, co jest szczególnie przydatne w aplikacjach internetowych, które odbierają przesłane pliki. Oznacza to, że przetwarzanie OCR może odbywać się całkowicie w pamięci bez zapisywania plików tymczasowych na dysku, co zmniejsza obciążenie związane z operacjami wejścia-wyjścia w środowiskach o dużej przepustowości.

W jaki sposób wstępne przetwarzanie obrazu poprawia dokładność optycznego rozpoznawania znaków?
Zeskanowane dokumenty często są przekrzywione, zawierają zakłócenia lub mają nieoptymalną rozdzielczość. IronOCR zawiera wbudowane filtry przetwarzania wstępnego, które korygują te problemy, zanim silnik OCR przetworzy obraz:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");
// Apply preprocessing filters to enhance scan quality
input.Deskew(); // Straighten rotated images
input.DeNoise(); // Remove digital artifacts
input.EnhanceResolution(225); // Optimize DPI for OCR
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");
// Apply preprocessing filters to enhance scan quality
input.Deskew(); // Straighten rotated images
input.DeNoise(); // Remove digital artifacts
input.EnhanceResolution(225); // Optimize DPI for OCR
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput("skewed-receipt.jpg")
' Apply preprocessing filters to enhance scan quality
input.Deskew() ' Straighten rotated images
input.DeNoise() ' Remove digital artifacts
input.EnhanceResolution(225) ' Optimize DPI for OCR
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Metoda Deskew automatycznie wykrywa i koryguje obrót obrazu do 15 stopni, radząc sobie z częstym przypadkiem stron umieszczonych nieco poza środkiem skanera. Filtr DeNoise usuwa plamki i artefakty, które często pojawiają się na sfotografowanych dokumentach lub starszych skanach. EnhanceResolution skaluje obrazy o niskiej rozdzielczości do zakresu 200–300 DPI, co jest optymalne dla dokładności optycznego rozpoznawania znaków.
Filtry te można łączyć w łańcuchy i uruchamiać w całości w pamięci bez konieczności tworzenia plików tymczasowych. W wielu przypadkach zastosowanie wielu etapów przetwarzania wstępnego może znacznie poprawić wyniki rozpoznawania tekstu w dokumentach o poważnych problemach jakościowych, takich jak wyblakły tusz, szumy tła lub zniekształcenia spowodowane przez aparat. Poprawa jest najbardziej zauważalna w przypadku dokumentów zeskanowanych w rozdzielczości poniżej 150 DPI lub zdjęć wykonanych w warunkach nierównomiernego oświetlenia.
W jaki sposób kadrowanie obszaru zainteresowania wpływa na wydajność?
W przypadku dokumentów, w których tylko część obrazu zawiera istotny tekst, zdefiniowanie obszaru przycięcia skraca czas przetwarzania i zmniejsza liczbę potencjalnych fałszywych wyników spowodowanych szumem tła:
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");
// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");
// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput("invoice.png")
' Define crop region (x, y, width, height in pixels)
Dim cropArea As New CropRectangle(50, 100, 600, 300)
input.AddRegion(cropArea)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Ukierunkowanie na konkretny region jest szczególnie cenne podczas przetwarzania dokumentów strukturalnych, takich jak faktury lub formularze, w których pola tekstowe zajmują znane pozycje. Takie podejście może skrócić czas przetwarzania OCR o 40–70% w porównaniu z analizą całego obrazu, w zależności od tego, jaka część obrazu jest nieistotna.
Czy można wyodrębnić kody BarCode i kody QR wraz z tekstem?
IronOCR może jednocześnie rozpoznawać tekst i skanować BARCODES w tym samym dokumencie. Ta podwójna funkcjonalność jest przydatna przy przetwarzaniu faktur, etykiet wysyłkowych i dokumentów magazynowych:
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);
// Access extracted text
Console.WriteLine($"Text: {result.Text}");
// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);
// Access extracted text
Console.WriteLine($"Text: {result.Text}");
// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
Imports IronOcr
Dim ocr = New IronTesseract()
ocr.Configuration.ReadBarCodes = True ' Enable barcode detection
Using input As New OcrInput("shipping-label.png")
Dim result = ocr.Read(input)
' Access extracted text
Console.WriteLine($"Text: {result.Text}")
' Access any barcodes found in the image
For Each barcode In result.Barcodes
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}")
Next
End Using
Gdy ReadBarCodes jest ustawione na true, wykrywanie BARCODE aktywuje się bez znaczącego wpływu na czas przetwarzania. Kolekcja Barcodes w wyniku zawiera wartość i typ formatu dla każdego wykrytego BARCODE. Obsługiwane formaty obejmują kody QR, Code 128, EAN-13, UPC, Data Matrix i PDF417. Ta podwójna funkcjonalność eliminuje potrzebę stosowania oddzielnych bibliotek do skanowania BarCode podczas przetwarzania dokumentów zawierających zarówno tekst czytelny dla człowieka, jak i kody czytelne dla maszyn.
Dane wejściowe

Wynik

W przypadku aplikacji magazynowych i logistycznych połączenie ekstrakcji tekstu i BARCODE-ów w jednym przebiegu zmniejsza liczbę wywołań API i upraszcza architekturę aplikacji. Pojedyncza operacja Read zwraca wszystkie rozpoznawalne dane z dokumentu, niezależnie od tego, czy są to dane w postaci wydrukowanego tekstu, pisma ręcznego czy kodów nadających się do odczytu maszynowego. Właściwość OcrResult.Barcodes udostępnia kolekcję typowaną, dzięki czemu kod niższego poziomu może iterować wyniki bez logiki parsowania specyficznej dla formatu.
Jak generować pliki PDF z możliwością wyszukiwania na podstawie zeskanowanych obrazów?
Konwersja zeskanowanych dokumentów do formatu PDF z możliwością wyszukiwania umożliwia zaznaczanie tekstu, kopiowanie oraz wyszukiwanie pełnotekstowe w systemach zarządzania dokumentami. Obsługuje różne formaty obrazów jako dane wejściowe:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);
// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);
// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput("scanned-contract.tiff")
Dim result = ocr.Read(input)
' Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf")
End Using
Metoda SaveAsSearchablePdf osadza niewidoczną warstwę tekstową odpowiadającą rozpoznanej treści, zachowując oryginalny wygląd dokumentu i umożliwiając jednocześnie operacje na tekście. W ten sposób powstają dokumenty nadające się do archiwizacji oraz do systemów zarządzania dokumentami w przedsiębiorstwie. IronOCR obsługuje również eksport wyników w formacie HTML lub JSON w celu integracji z systemami niższego szczebla.
W przypadku dokumentów wielostronicowych IronOCR przetwarza każdą stronę osobno, a następnie łączy wyniki w jeden plik. Pliki TIFF z wieloma ramkami są obsługiwane automatycznie, co sprawia, że konwersja archiwów zeskanowanych dokumentów w trybie wsadowym jest prosta. Powstały plik PDF zachowuje układ graficzny oryginalnego skanu, a osadzona warstwa tekstowa sprawia, że każda strona jest w pełni przeszukiwalna w dowolnej przeglądarce PDF lub platformie do zarządzania dokumentami.
Jak korzystać z IronOCR w aplikacjach wielojęzycznych?
IronOCR obsługuje ponad 125 języków, w tym angielski, hiszpański, francuski, niemiećki, chiński, japoński, arabski i wiele innych. Pakiety językowe instaluje się za pośrednictwem NuGet jako oddzielne pakiety, dzięki czemu biblioteka podstawowa pozostaje lekka:
using IronOcr;
// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
' Install-Package IronOcr.Languages.French
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.French
Using input As New OcrInput("french-document.png")
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
W przypadku dokumentów zawierających różne języki na tej samej stronie, IronOCR obsługuje jednoczesne ładowanie wielu modeli językowych. Ma to znaczenie w przypadku aplikacji międzynarodowych, które przetwarzają dokumenty z wielu regionów bez konieczności wstępnego sortowania plików według języka. Każdy pakiet językowy jest utrzymywany równolegle z biblioteką podstawową i obsługuje te same funkcje przetwarzania wstępnego oraz generowania wyników.
Jakie są najlepsze praktyki dotyczące OCR w projektach GitHub?
Podczas utrzymywania projektów OCR na GitHubie kilka decyzji organizacyjnych poprawia komfort pracy współtwórców i długoterminową kondycję projektu. Te praktyki mają zastosowanie niezależnie od tego, czy tworzysz mały skrypt użytkowy, czy dużą usługę przetwarzania dokumentów dla Enterprise.
Używaj Git LFS dla dużych obrazów testowych, aby uniknąć nadmiernego powiększania rozmiaru repozytorium. Zasoby binarne w standardowej historii Git wydłużają czas klonowania i zwiększają koszty przechowywania, szczególnie gdy zestawy danych testowych zawierają skany w wysokiej rozdzielczości. Klucze licencyjne należy przechowywać w zmiennych środowiskowych lub GitHub Secrets, nigdy w kodzie C#, który trafił do repozytorium; Instrukcje dotyczące konfiguracji można znaleźć w przewodniku po konfiguracji klucza licencyjnego.
Dołącz przykładowe obrazy w specjalnym folderze test-data, aby współpracownicy mogli zweryfikować działanie OCR bez konieczności korzystania z własnych dokumentów. W plikach README należy udokumentówać obsługiwane formaty obrazów i wymagania dotyczące wersji .NET, aby ograniczyć liczbę pytań pojawiających się podczas wdrażania. Kompiluj i uruchamiaj testy w potokach CI przy użyciu GitHub Actions, aby potwierdzić, że biblioteka działa poprawnie we wszystkich środowiskach docelowych.
W przypadku przepływów pracy GitHub Actions IronOCR działa w środowiskach kontenerowych zarówno na platformach Windows, jak i Linux. Szczegóły dotyczące konfiguracji w przypadku systemów Ubuntu lub innych środowisk innych niż Windows można znaleźć w przewodniku wdrożeniowym dla systemu Linux.
Jakie są Twoje kolejne kroki?
IronOCR zapewnia niezawodne rozpoznawanie tekstu w projektach C# na GitHubie dzięki bibliotece dystrybuowanej przez NuGet, która obsługuje konfigurację Tesseract, przetwarzanie wstępne, wykrywanie kodów kreskowych i obsługę wielu języków bez zewnętrznych zależności binarnych. Przykłady kodu w tym przewodniku obejmują podstawowe przypadki użycia: podstawowe wyodrębnianie tekstu, wstępne przetwarzanie obrazów, skanowanie BarCode'ów, tworzenie plików PDF z możliwością wyszukiwania oraz przetwarzanie wielojęzyczne.
Aby zapoznać się z pełnym zestawem funkcji, rozpocznij bezpłatny okres próbny bez presji czasowej i bez konieczności podawania danych karty kredytowej. Gdy wszystko będzie gotowe do wdrożenia produkcyjnego, zapoznaj się z opcjami licencyjnymi obejmującymi zarówno indywidualnych programistów, jak i zespoły korporacyjne.
Powiązane zasoby pozwalające poszerzyć wiedzę:
- Jak odczytać tekst z obrazu w języku C#
- Samouczek dotyczący OCR Tesseract w języku C#
- Repozytorium przykładów IronOCR na GitHubie

Często Zadawane Pytania
Co to jest IronOCR?
IronOCR to biblioteka OCR .NET dla języka C#, która wyodrębnia tekst z obrazów i plików PDF przy użyciu zoptymalizowanego silnika Tesseract 5. Instaluje się ją za pośrednictwem NuGet i wewnętrznie obsługuje zależności binarne, nie wymagając ręcznej konfiguracji tessdata.
Jak zainstalować IronOCR w projekcie C#?
Uruchom polecenie `Install-Package IronOcr` w konsoli menedżera pakietów NuGet w programie Visual Studio lub użyj interfejsu użytkownika menedżera pakietów NuGet, aby wyszukać IronOcr. Pakiet zawiera wszystkie wymagane pliki binarne dla systemów Windows, Linux i macOS.
Czy IronOCR działa w systemie Linux dla GitHub Actions?
Tak, IronOCR obsługuje środowiska uruchomieniowe Linux w GitHub Actions. Informacje na temat wymaganych zależności pakietów w systemie Ubuntu i innych dystrybucjach można znaleźć w przewodniku wdrażania dla systemu Linux pod adresem https://ironsoftware.com/csharp/ocr/how-to/linux/.
Czy IronOCR potrafi odczytywać kody kreskowe i kody QR?
Tak. Ustaw OCR.Configuration.ReadBarCodes = true przed wywołaniem Read(). Kolekcja OcrResult.BarCodes zawiera wartość i typ formatu dla każdego wykrytego kodu, obsługując QR, Code 128, EAN-13, UPC, Data Matrix i PDF417.
Jak wygenerować plik PDF z możliwością wyszukiwania na podstawie zeskanowanego obrazu?
Po wywołaniu OCR.Read(input) należy użyć result.SaveAsSearchablePdf("output.pdf"), aby utworzyć plik PDF z niewidoczną warstwą tekstową nałożoną na oryginalny skan. Wynik jest odpowiedni dla systemów archiwizacji i zarządzania dokumentami w przedsiębiorstwie.
Czy IronOCR obsługuje języki inne niż angielski?
Tak. IronOCR obsługuje ponad 125 języków dzięki dedykowanym pakietom językowym NuGet. Zainstaluj pakiet językowy (na przykład Install-Package IronOcr.Languages.French), a następnie przed przetwarzaniem ustaw ocr.Language = OcrLanguage.French.
Jak należy przechowywać klucze licencyjne IronOCR w repozytorium GitHub?
Przechowuj klucze licencyjne w GitHub Secrets i wstawiaj je jako zmienne środowiskowe w swoim przepływie pracy GitHub Actions. Nigdy nie zapisuj ciągów znaków kluczy licencyjnych bezpośrednio w kodzie C# lub plikach appsettings.
Jakie formaty obrazów obsługuje IronOCR?
IronOCR obsługuje formaty PNG, JPG, JPEG, BMP, GIF, TIFF (w tym wieloklatkowe), PDF i inne popularne formaty. Obrazy można ładować ze ścieżek plików, adresów URL, strumieni lub tablic bajtów.



