Jak zaimplementować OCR w projektach GitHub w C# za pomocą IronOCR
Wyszukiwanie rozwiązań OCR na GitHubie często prowadzi do fragmentarycznej dokumentacji, skomplikowanych 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

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#?
Nastepny przyklad demonstruje podstawowe wyciaganie tekstu przy uzyciu klasy IronTesseract z 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 sluzy jako glowny silnik OCR, opracowany na zoptymalizowanej implementacji Tesseract 5. Po utworzeniu instancji, obiekt OcrInput wczytuje docelowy obraz z dysku, URL, lub tablicy bajtow. Metoda Read przetwarza wejscie i zwraca OcrResult zawierajacy wyodrebniony prosty tekst wraz z procentowa wartoscia pewnosci wskazujaca na dokladnosc rozpoznawania. Wyższe wartości pewności (powyżej 90%) zazwyczaj wskazują na czyste, dobrze sformatowane dokumenty źródłowe.
Obiekt OcrResult zapewnia strukturalny dostep do rozpoznanej tresci. 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. Kazdy element Word zawiera wspolrzedne prostokatnego obrysu, co sprawia, ze jest on cenny dla aplikacji wymagajacych precyzyjnych danych o lokalizacji tekstu, takich jak anotacje dokumentow czy wyodrebnianie pol formularza.
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 obrocenie obrazu do 15 stopni, obslugujac typowy przypadek stron umieszczonych nieco poza srodkiem skanera. Filtr DeNoise usuwa plamki i artefakty powszechne w sfotografowanych dokumentach lub starszych skanach. EnhanceResolution zwieksza rozdzielczosc obrazow o niskim DPI do zakresu 200-300 DPI, co jest optymalne dla dokladnosci optycznego rozpoznawania znakow.
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ść?
Dla dokumentów, w których tylko część obrazu zawiera istotny tekst, definiowanie obszaru kadrowania redukuje zarówno czas przetwarzania, jak i potencjalne fałszywe pozytywy od szumów 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 kodow kreskowych aktywuje sie bez znaczacego wplywu na czas przetwarzania. Kolekcja Barcodes w wynikach zawiera wartosc i typ formatu dla kazdego wykrytego kodu kreskowego. 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 dane rozpoznawalne z dokumentu, niezaleznie od tego, czy te dane to drukowany tekst, pismo odręczne, czy kody maszynowo czytelne. Wlasciwosc OcrResult.Barcodes ujawnia kolekcje typow, dzieki czemu kod nizszego poziomu moze iterowac 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 niewidoczna warstwe tekstu pasujaca do rozpoznanego materialu, zachowujac oryginalny wyglad dokumentu, jednoczesnie umozliwiajac operacje na tekscie. 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ż eksportowanie wyników jako HTML lub JSON do integracji z systemami downstream.
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; Skonsultuj się z przewodnikiem konfiguracji klucza licencyjnego dla instrukcji konfiguracji.
Zalacz przykladowe obrazy w dedykowanym folderze test-data, aby wspolpracownicy mogli zweryfikowac funkcjonalnosc OCR bez konieczznosci dostarczania wlasnych dokumentow. W plikach README należy udokumentować 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. Skonsultuj się z przewodnikiem wdrożeniowym Linux dla szczegółów konfiguracji, gdy celujesz w Ubuntu lub inne środowiska niesystemowe dla Windows.
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.



