Pierwsze kroki z OCR w C# i VB.NET
IronOCR to biblioteka programistyczna C#, która umożliwia deweloperom platformy .NET rozpoznawanie i odczytywanie tekstu z obrazów oraz dokumentów PDF. Jest to czysta biblioteka OCR dla .NET, wykorzystująca najbardziej zaawansowany znany silnik Tesseract.
Instalacja
Instalacja za pomocą Menedżera pakietów NuGet
Zainstaluj IronOcr w Visual Studio lub z wiersza poleceń za pomocą Menedżera pakietów NuGet. W Visual Studio przejdź do konsoli:
- Narzędzia ->
- Menedżer pakietów NuGet ->
- Konsola Menedżera pakietów
Install-Package IronOcr
Sprawdź również IronOcr w serwisie NuGet, aby uzyskać więcej informacji o aktualizacjach wersji i instalacji.
Dostępne są inne pakiety IronOCR NuGet dla różnych platform:
IronOcr.Extensions.AdvancedScan dla Linux i macOS
Ten pakiet jest przeznaczony dla użytkowników korzystających z systemów Linux i Mac, którzy chcą korzystać z zaawansowanych funkcji IronOcr.
- Linux: https://www.nuget.org/packages/IronOcr.Extensions.AdvancedScan.Linux
- MacOS: https://www.nuget.org/packages/IronOcr.Extensions.AdvancedScan.MacOs
Rozwiązywanie problemów
Wraz z nową aktualizacją pakietu IronOCR łączy zależności OpenCV w pakiecie, aby go usprawnić. Jeśli deweloperzy importujący zależności OpenCV napotkają następujący błąd:
The type of namespace name `OpenCvSharp` could not be found(are you missing a using directive or an assembly reference)
Można bezpiecznie usunąć przestrzenie nazw OpenCV — problem zostanie rozwiązany.
Pobierz plik ZIP IronOCR
Można również pobrać IronOCR jako plik .ZIP. Kliknij, aby bezpośrednio pobrać plik DLL. Po pobraniu pliku zip:
Instrukcje instalacji dla .NET Framework 4.0+:
- Dołącz plik IronOcr.dll z folderu net40 do projektu
-
Następnie dodaj odwołania do zestawów:
- System.Configuration
- System.Drawing
- System.Web
Instrukcje dla .NET Standard i .NET Core 2.0+, oraz .NET 5
- Dołącz plik IronOcr.dll z folderu netstandard2.0 do projektu
-
Następnie dodaj odwołanie do pakietu NuGet:
- System.Drawing.Common 4.7 lub nowszy
Pobierz instalator IronOCR (tylko Windows)
Inną opcją jest pobranie instalatora IronOCR, który zainstaluje wszystkie wymagane zasoby, aby IronOCR działał od razu po uruchomieniu. Należy pamiętać, że ta opcja jest dostępna wyłącznie dla systemów Windows. Aby pobrać instalator, kliknij tutaj. Po pobraniu pliku zip:
Instrukcje instalacji dla .NET Framework 4.0+:
- Dołącz plik IronOcr.dll z folderu net40 do projektu
-
Następnie dodaj odwołania do zestawów:
- System.Configuration
- System.Drawing
- System.Web
Instrukcje dla .NET Standard i .NET Core 2.0+, oraz .NET 5
- Dołącz plik IronOcr.dll z folderu netstandard2.0 do projektu
-
Następnie dodaj odwołanie do pakietu NuGet:
- System.Drawing.Common 4.7 lub nowszy
Dlaczego warto wybrać IronOCR?
IronOCR to łatwa w instalacji, kompletna i dobrze udokumentowana biblioteka programistyczna .NET.
Wybierz IronOCR, aby uzyskać dokładność OCR na poziomie 99,8%+ bez korzystania z zewnętrznych usług internetowych, bieżących opłat ani przesyłania poufnych dokumentów przez internet.
Dlaczego deweloperzy C# wybierają IronOCR zamiast zwykłego Tesseract:
- Instalacja jako pojedynczy plik DLL lub pakiet NuGet
- Zawiera silniki Tesseract 5, 4 i 3 gotowe do użycia
- Dokładność 99,8% znacznie przewyższa standardowy Tesseract
- Błyskawiczna prędkość i obsługa wielowątkowości
- Zgodność z aplikacjami MVC, WebApp, Desktop, Console i Server
- Brak plików Exe ani kodu C++ do obsługi
- Pełna obsługa OCR dla plików PDF
- Obsługa OCR dla niemal każdego pliku obrazu lub PDF
- Pełna obsługa .NET Core, Standard i Framework
- Wdrożenie na Windows, Mac, Linux, Azure, Docker, Lambda, AWS
- Odczytywanie kodów kreskowych i kodów QR
- Eksport wyników OCR jako XHTML
- Eksport OCR do przeszukiwalnych dokumentów PDF
- Obsługa wielowątkowości
- 125 międzynarodowych pakietów językowych zarządzanych przez NuGet lub pliki OcrData
- Wyodrębnianie obrazów, współrzędnych, statystyk i czcionek — nie tylko tekstu
- Możliwość redystrybucji Tesseract OCR w aplikacjach komercyjnych i zastrzeżonych
IronOCR sprawdza się doskonale w pracy z obrazami ze świata rzeczywistego i niedoskonałymi dokumentami, takimi jak zdjęcia lub skany o niskiej rozdzielczości, które mogą zawierać szumy cyfrowe lub inne niedoskonałości.
Inne biblioteki bezpłatnego OCR dla platformy .NET, takie jak inne interfejsy API Tesseract dla .NET czy usługi internetowe, nie radzą sobie tak dobrze w tych rzeczywistych przypadkach użycia.
OCR z Tesseract 5 — zacznij kodować w C
Poniższy przykład kodu pokazuje, jak łatwo odczytać tekst z obrazu przy użyciu C# lub VB .NET.
Jedna linijka kodu
:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
Konfigurowalny przykład Hello World
:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// Add multiple images
input.LoadImage("images/sample.jpeg");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
' Add multiple images
input.LoadImage("images/sample.jpeg")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
OCR dla plików PDF w C
To samo podejście można zastosować do wyodrębniania tekstu z dowolnego dokumentu PDF.
:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
OCR dla wielostronicowych plików TIFF
:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
Kody kreskowe i QR
Unikalną cechą IronOCR jest możliwość odczytywania kodów kreskowych i kodów QR z dokumentów podczas skanowania tekstu. Instancje klasy OcrResult.OcrBarcode dostarczają deweloperowi szczegółowych informacji o każdym zeskanowanym kodzie kreskowym.
:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");
OcrResult Result = ocr.Read(input);
foreach (var Barcode in Result.Barcodes)
{
// type and location properties also exposed
Console.WriteLine(Barcode.Value);
}
Imports IronOcr
Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadImage("img/Barcode.png")
Dim Result As OcrResult = ocr.Read(input)
For Each Barcode In Result.Barcodes
' type and location properties also exposed
Console.WriteLine(Barcode.Value)
Next Barcode
End Using
OCR na określonych obszarach obrazów
Wszystkie metody skanowania i odczytu IronOCR umożliwiają precyzyjne określenie, z której części strony lub stron chcemy odczytywać tekst. Jest to bardzo przydatne przy pracy ze standardowymi formularzami i pozwala zaoszczędzić dużo czasu oraz zwiększyć wydajność.
Aby korzystać z obszarów przycinania, należy dodać odwołanie systemowe do System.Drawing w celu używania obiektu System.Drawing.Rectangle.
:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };
input.LoadImage("document.png", contentArea);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
.X = 215,
.Y = 1250,
.Height = 280,
.Width = 1335
}
input.LoadImage("document.png", contentArea)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
OCR dla skanów niskiej jakości
Klasa OcrInput IronOCR może naprawić skany, których standardowy Tesseract nie potrafi odczytać.
:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
// fixes digital noise and poor scanning
input.DeNoise();
// fixes rotation and perspective
input.Deskew();
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
' fixes digital noise and poor scanning
input.DeNoise()
' fixes rotation and perspective
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
Eksport wyników OCR jako przeszukiwalny plik PDF
:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
Konwersja TIFF do przeszukiwalnego PDF
:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
Eksport wyników OCR jako HTML
:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");
OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")
Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
Filtry poprawy jakości obrazu OCR
IronOCR udostępnia unikalne filtry dla obiektów OcrInput w celu poprawy wydajności OCR.
Przykład kodu poprawy jakości obrazu
:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");
// fixes digital noise and poor scanning
input.DeNoise();
// fixes rotation and perspective
input.Deskew();
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")
' fixes digital noise and poor scanning
input.DeNoise()
' fixes rotation and perspective
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
Lista filtrów obrazu OCR
Wbudowane w IronOCR filtry wejściowe służące do poprawy wydajności OCR obejmują:
OcrInput.Rotate(double degrees)- Obraca obrazy o podaną liczbę stopni zgodnie z ruchem wskazówek zegara. W przypadku obrotu przeciwnego do ruchu wskazówek zegara należy użyć liczb ujemnych.OcrInput.Binarize()- Filtr ten konwertuje każdy piksel na czarny lub biały bez pośrednich odcieni, co może poprawić wydajność OCR w obrazach o bardzo niskim kontraście.OcrInput.ToGrayScale()- Konwertuje każdy piksel na odcień szarości. Może nie poprawić dokładności, ale może zwiększyć prędkość.OcrInput.Contrast()- Automatycznie zwiększa kontrast, często poprawiając prędkość i dokładność w skanach o niskim kontraście.OcrInput.DeNoise()- Usuwa szumy cyfrowe; zalecane tylko wtedy, gdy spodziewany jest szum.OcrInput.Invert()- Odwraca każdy kolor (biały staje się czarny i odwrotnie).OcrInput.Dilate()- Zaawansowana morfologia; dodaje piksele do granic obiektów. Przeciwieństwo Erode.OcrInput.Erode()- Zaawansowana morfologia; usuwa piksele z granic obiektów. Przeciwieństwo Dilate.OcrInput.Deskew()- Obraca obraz, aby ustawić go prawidłowo. Przydatne, ponieważ tolerancja pochylenia Tesseract jest ograniczona.OcrInput.EnhanceResolution- Poprawia rozdzielczość obrazów o niskiej jakości. To ustawienie jest zazwyczaj używane do automatycznego zarządzania danymi wejściowymi o niskiej rozdzielczości (DPI).EnhanceResolutionwykrywa obrazy o niskiej rozdzielczości (poniżej 275 dpi), skaluje je w górę i wyostrza tekst dla lepszych wyników OCR. Chociaż jest to czasochłonne, często skraca to ogólny czas działania OCR.Language- Obsługuje wybór spośród 22 międzynarodowych pakietów językowych.Strategy- Umożliwia wybór między strategią szybką i mniej dokładną a zaawansowaną (wykorzystującą AI do poprawy dokładności) na podstawie statystycznych relacji między słowami.ColorSpace- Wybór OCR w skali szarości lub kolorze. Skala szarości jest zazwyczaj optymalna, choć w niektórych sytuacjach wymagających kontrastu lepszym rozwiązaniem może być kolor.DetectWhiteTextOnDarkBackgrounds- Dostosowanie do obrazów negatywowych; automatycznie wykrywa i odczytuje biały tekst na ciemnym tle.InputImageType- Wskazówka dla biblioteki OCR, określająca, czy przetwarza pełny dokument, czy fragment.RotateAndStraighten- Umożliwia IronOCR prawidłową obsługę dokumentów obróconych lub dotkniętych zniekształceniami perspektywy.ReadBarcodes- Automatycznie odczytuje kody kreskowe i kody QR równolegle ze skanowaniem tekstu, bez znaczącego wydłużenia czasu.ColorDepth- Określa liczbę bitów na piksel dla głębi kolorów w procesie OCR. Większa szczegółowość może podnieść jakość, ale też wydłużyć czas przetwarzania.
125 pakietów językowych
IronOCR obsługuje 125 języków międzynarodowych za pośrednictwem pakietów językowych, które są dystrybuowane jako biblioteki DLL i dostępne do pobrania z tej strony internetowej lub z menedżera pakietów NuGet.
Języki obejmują między innymi niemiecki, francuski, angielski, chiński i japoński. Dostępne są specjalistyczne pakiety językowe dla MRZ, czeków MICR, danych finansowych, tablic rejestracyjnych itp. Dodatkowo można używać niestandardowych plików ".traineddata" Tesseract.
Przykład języka
// Reference to the path of the source file that demonstrates setting language packs for OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
// Reference to the path of the source file that demonstrates setting language packs for OCR
using IronOcr;
// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// Add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
' Reference to the path of the source file that demonstrates setting language packs for OCR
Imports IronOcr
' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Using input As New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img/arabic.gif", pageindices)
' Add image filters if needed
' In this case, even thought input is very low quality
' IronTesseract can read what conventional Tesseract cannot.
Dim result As OcrResult = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
End Using
Przykład wielojęzyczny
Możliwe jest również stosowanie OCR w wielu językach jednocześnie. Może to poprawić rozpoznawanie angielskich metadanych i adresów URL w dokumentach Unicode.
// Reference to the path of the source file that demonstrates multi-language OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
// Reference to the path of the source file that demonstrates multi-language OCR
using IronOcr;
// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);
using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
' Reference to the path of the source file that demonstrates multi-language OCR
Imports IronOcr
' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)
Using input As New OcrInput()
input.LoadPdf("multi-language.pdf")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsTextFile("results.txt")
End Using
Szczegółowe obiekty wyników OCR
IronOCR zwraca obiekt wyniku OCR dla każdej operacji. Zazwyczaj deweloperzy korzystają z właściwości Text, aby uzyskać zeskanowany tekst. Jednak obiekt results zawiera znacznie bardziej szczegółowe informacje.
// Reference to the path of the source file demonstrating detailed OCR result object usage
:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
// Reference to the path of the source file demonstrating detailed OCR result object usage
using IronOcr;
IronTesseract ocr = new IronTesseract();
// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);
OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
' Reference to the path of the source file demonstrating detailed OCR result object usage
Imports IronOcr
Private ocr As New IronTesseract()
' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\sample.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Dim pages = result.Pages
Dim words = pages(0).Words
Dim barcodes = result.Barcodes
' Explore here to find a massive, detailed API:
' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
Wydajność
IronOCR działa od razu po uruchomieniu, bez konieczności dostosowywania wydajności lub modyfikacji obrazów.
Szybkość jest niesamowita: IronOcr.2020+ działa nawet 10 razy szybciej i popełnia o ponad 250% mniej błędów niż poprzednie wersje.
Dowiedz się więcej
Aby dowiedzieć się więcej o OCR w C#, VB, F# lub innym języku .NET, przeczytaj nasze samouczki społecznościowe, które zawierają praktyczne przykłady użycia IronOCR i pokazują niuanse optymalizacji biblioteki IronOCR.
Dostępna jest również pełna dokumentacja API dla programistów .NET.

