Przejdź do treści stopki
KORZYSTANIE Z IRONOCR

Jak wykonać OCR napisów w języku C# (samouczek)

W tym samouczku dowiemy się, jak wyodrębnić zakodowane na stałe napisy z plików wideo. Pobierzemy przykładowy plik wideo i wyodrębnimy z niego zakodowane na stałe napisy do pliku tekstowego. Opracujemy program w języku C# .NET, który wyodrębni zakodowane na stałe napisy przy użyciu procesu OCR. Postaram się, aby ten samouczek był prosty i łatwy do zrozumieniuiuiuiuia, tak aby nawet początkujący programista C# mógł go zrozumieć.

Potrzebujemy wydajnego silnika optycznego rozpoznawania znaków (OCR), który może przetwarzać wideo i uzyskiwać pliki napisów niezależnie od języka napisów.

Dostępnych jest wiele bibliotek zapewniających wyniki OCR. Niektóre z nich są płatne, inne trudne w użyciu, a jeszcze inne nieefektywne lub niedokładne, dlatego bardzo trudno jest znaleźć bibliotekę, która byłaby bezpłatna, wydajna, łatwa w użyciu i zapewniała dokładne wyniki.

IronOCR, który jest bezpłatny do celów programistycznych, oferuje miesięczny bezpłatny okres próbny do celów komercyjnych. Obsługuje ponad 150 języków i zapewnia większą dokładność niż większość innych dostępnych bibliotek OCR. Jest również wydajne i łatwe w użyciu. Wykorzystamy tę bibliotekę do naszej demonstracji.

IronOCR

IronOCR to biblioteka opracowana i utrzymywana przez Iron Software, która pomaga inżynierom oprogramowania C# w wykonywaniu OCR, skanowaniu BarCode'ów i ekstrakcji tekstu w projektach .NET.

Funkcje IronOCR obejmują:

  • Odczytywanie tekstu z wielu formatów, takich jak obrazy (JPEG, PNG, BMP), GIF, TIF/TIFF, strumienie i pliki PDF
  • Korekta skanów i zdjęć niskiej jakości za pomocą szerokiej gamy filtrów, takich jak Deskew, Denoise, Binarize, Enhance Resolution, Dilate i wielu innych
  • Odczyt BARCODE-ów w ponad 20 różnych formatach, wraz z obsługą kodów QR
  • Wykorzystanie najnowszej wersji Tesseract OCR, której wydajność została zoptymalizowana ponad poziom innych bibliotek tego typu
  • Eksportowanie plików PDF z możliwością wyszukiwania, eksportowanie hOCR / HTML oraz tekstu zawartego w obrazach.

Stwórzmy aplikację demonstracyjną do odczytu numerów rejestracyjnych.

Utwórz projekt Visual Studio

Pierwszym krokiem jest utworzenie nowego projektu.

Otwórz program Visual Studio. Kliknij opcję Utwórz nowy projekt i wybierz szablon projektu Aplikacja konsolowa.

Kliknij przycisk Dalej i nadaj nazwę projektowi (ja nazwałem go "OCR Subtitles", możesz nadać mu dowolną nazwę).

Kliknij przycisk Dalej i wybierz docelowy framework. Na koniec kliknij przycisk Utwórz, aby utworzyć projekt.

Projekt zostanie utworzony zgodnie z poniższym opisem.

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 1: Tworzenie nowego projektu w Visual Studio Tworzenie nowego projektu w Visual Studio

Teraz musimy zainstalować bibliotekę IronOCR, aby móc z niej korzystać w naszym projekcie. Najłatwiej jest zainstalować go za pomocą menedżera pakietów NuGet dla rozwiązania.

Zainstaluj pakiet NuGet IronOCR

Kliknij opcję Narzędzia na górnym pasku menu i wybierz Menedżer pakietów NuGet > Zarządzaj pakietami NuGet dla rozwiązania, jak pokazano poniżej.

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 2: Instalacja IronOCR w Visual Studio Instalacja IronOCR w Visual Studio

Pojawi się następujące okno.

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 3: Interfejs użytkownika menedżera pakietów NuGet w programie Visual Studio Interfejs użytkownika menedżera pakietów NuGet w Visual Studio

Kliknij "Przeglądaj" i wyszukaj IronOCR. Wybierz pakiet IronOCR i kliknij przycisk Instaluj, jak pokazano poniżej.

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 4: Wyszukiwanie IronOCR w interfejsie użytkownika menedżera pakietów NuGet Wyszukiwanie IronOCR w interfejsie użytkownika menedżera pakietów NuGet

Biblioteka IronOCR zostanie zainstalowana i będzie gotowa do użycia.

Wyodrębnij zakodowane na stałe napisy

Napiszmy program do wyodrębniania zakodowanych na stałe napisów.

Do wyodrębnienia napisów wykorzystamy poniższy zrzut ekranu.

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 5: Przykładowy zrzut ekranu z filmu, z którego zostanie wyodrębniony tekst Przykładowy zrzut ekranu z filmu, z którego zostanie wyodrębniony tekst

Dodaj następującą przestrzeń nazw:

using IronOcr;
using IronOcr;
Imports IronOcr
$vbLabelText   $csharpLabel

Napisz poniższy kod poniżej deklaracji przestrzeni nazw.

// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input using the specified image path
using (var input = new OcrInput(@"D:\License Plate\plate3.jpg"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input using the specified image path
using (var input = new OcrInput(@"D:\License Plate\plate3.jpg"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
' Initialize IronTesseract object
Dim ocr = New IronTesseract()
' Create an OCR Input using the specified image path
Using input = New OcrInput("D:\License Plate\plate3.jpg")
	' Perform OCR on the input image to extract text
	Dim result = ocr.Read(input)
	' Output the extracted text to the console
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

Powyższy kod działa w następujący sposób:

  1. Zainicjuj obiekt IronTesseract. Spowoduje to utworzenie domyślnej instancji IronTesseract.
  2. Utwórz nowy obiekt OcrInput wypełniony plikiem obrazu lub dokumentem PDF. OcrInput jest preferowanym typem danych wejściowych, ponieważ umożliwia rozpoznawanie optyczne (OCR) dokumentów wielostronicowych oraz pozwala na poprawę jakości obrazów przed OCR w celu uzyskania szybszych i dokładniejszych wyników.
  3. Odczytaj tekst z obiektu wejściowego OCR i zwróć obiekt wyniku OCR. ocr.Read wyodrębni napisy z podanego zrzutu ekranu.
  4. result.Text zwróci całą treść wyodrębnioną z podanego wkładu.

Przykładowy program generuje poniższy wynik w konsoli:

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 7: Wynik wyświetlony w konsoli po przeprowadzeniu ekstrakcji tekstu z przykładowego obrazu przy użyciu IronOCR Wynik wyświetlony w konsoli po przeprowadzeniu ekstrakcji tekstu z przykładowego obrazu przy użyciu IronOCR

Załóżmy, że masz klatkę wideo zawierającą zarówno tytuł filmu, jak i napisy:

Jak wykonać OCR napisów w języku C# (samouczek), rysunek 6: Pojedyncza klatka z dłuższego filmu zawierająca obszary tekstowe z tytułem i napisami filmu Pojedyncza klatka z dłuższego filmu zawierająca obszary tekstowe przeznaczone na tytuł i napisy

Naszym celem jest wyodrębnienie zakodowanych na stałe napisów z dolnej części obrazu. W tym przypadku musimy określić obszar tekstu, w którym wyświetlany jest podtytuł.

Określ położenie napisów w ramce

Możemy użyć System.Drawing.Rectangle, aby określić region, w którym odczytamy napis z klatki wideo. Jednostką miary są zawsze piksele.

Do określenia obszaru tekstu użyjemy poniższego przykładowego kodu.

// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input and specify the region of interest
using (var input = new OcrInput())
{
    // Define the area within the image where subtitles are located for a 41% improvement on speed
    var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
    // Add the specific region of the image to the OCR input
    input.AddImage(@"D:\subtitle\image.png", contentArea);
    // Perform OCR on the specified region
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input and specify the region of interest
using (var input = new OcrInput())
{
    // Define the area within the image where subtitles are located for a 41% improvement on speed
    var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
    // Add the specific region of the image to the OCR input
    input.AddImage(@"D:\subtitle\image.png", contentArea);
    // Perform OCR on the specified region
    var result = ocr.Read(input);
    // Output the extracted text to the console
    Console.WriteLine(result.Text);
}
' Initialize IronTesseract object
Dim ocr = New IronTesseract()
' Create an OCR Input and specify the region of interest
Using input = New OcrInput()
	' Define the area within the image where subtitles are located for a 41% improvement on speed
	Dim contentArea = New CropRectangle(x:= 189, y:= 272, height:= 252, width:= 77)
	' Add the specific region of the image to the OCR input
	input.AddImage("D:\subtitle\image.png", contentArea)
	' Perform OCR on the specified region
	Dim result = ocr.Read(input)
	' Output the extracted text to the console
	Console.WriteLine(result.Text)
End Using
$vbLabelText   $csharpLabel

Daje to 41% wzrost prędkości – i pozwala nam być konkretnymi. W contentArea określiliśmy punkt początkowy w osiach x i y, a następnie wysokość i szerokość wymagańego obszaru napisów.

Zapisz napisy w pliku tekstowym z napisami

Zapiszmy wyodrębnione napisy w pliku tekstowym.

// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input with the specified image path
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Save the extracted text to a specified file path
    result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
// Initialize IronTesseract object
var ocr = new IronTesseract();
// Create an OCR Input with the specified image path
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
    // Perform OCR on the input image to extract text
    var result = ocr.Read(input);
    // Save the extracted text to a specified file path
    result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
' Initialize IronTesseract object
Dim ocr = New IronTesseract()
' Create an OCR Input with the specified image path
Using input = New OcrInput("D:\subtitle\subtitle1.png")
	' Perform OCR on the input image to extract text
	Dim result = ocr.Read(input)
	' Save the extracted text to a specified file path
	result.SaveAsTextFile("D:\subtitle\subtitlefile.txt")
End Using
$vbLabelText   $csharpLabel

result.SaveAsTextFile przyjmie ścieżkę wyjściową jako argument i zapisze plik w podanej ścieżce.

Jak wykonać OCR napisów w C# (samouczek), rysunek 8: Pojedyncza klatka z dłuższego filmu zawierająca obszary tekstowe z tytułem i napisami filmu Pojedyncza klatka z dłuższego filmu zawierająca obszary tekstowe przeznaczone na tytuł i napisy

Podsumowanie

W tym samouczku nauczyliśmy się korzystać z IronOCR i stworzyliśmy bardzo prosty program do odczytywania napisów z zrzutu ekranu wideo. Możemy również określić region, z którego chcemy wyodrębnić tekst.

IronOCR zapewnia funkcje OpenCV dla wizji komputerowej. Zauważyliśmy, że IronOCR umożliwia nam odczytywanie tekstu z rozmazanych obrazów lub obrazów o niskiej rozdzielczości. Ta biblioteka jest wydajna i zapewnia dokładność. Obsługuje ponad 125 języków z pełną dokładnością. Jest bezpłatny do celów programistycznych i nie ma żadnych ograniczeń dotyczących produkcji.

Podsumowując, IronOCR zapewnia:

  • Możliwość skanowania i odczytywania obrazów oraz zeskanowanych dokumentów
  • Obsługa ponad 150 języków z całego świata
  • Wynik w postaci tekstu, danych strukturalnych lub plików PDF z możliwością wyszukiwania
  • Obsługuje .NET 6, 5, Core, Standard, .NET Framework

IronOCR jest częścią Suite bibliotek firmy Iron Software, przydatnych do odczytu i zapisu plików PDF, manipulowania plikami Excel, odczytu tekstu z obrazów oraz pobierania treści ze stron internetowych. Kup kompletny pakiet Iron Suite w cenie dwóch pojedynczych bibliotek.

Często Zadawane Pytania

Jak wyodrębnić zakodowane na stałe napisy z plików wideo w języku C#?

Za pomocą biblioteki IronOCR można wyodrębnić zakodowane na stałe napisy z plików wideo w języku C#. Zainstaluj bibliotekę za pomocą menedżera pakietów NuGet, a następnie użyj jej do przetwarzania klatek wideo i wyodrębniania tekstu.

Jaka jest zaleta korzystania z IronOCR zamiast Tesseract do wyodrębniania napisów?

IronOCR stanowi ulepszoną alternatywę dla Tesseract, charakteryzującą się większą dokładnością, łatwością obsługi i obsługą ponad 150 języków, dzięki czemu doskonale nadaje się do wyodrębniania napisów z filmów.

Jak określić lokalizacje napisów w IronOCR, aby poprawić szybkość przetwarzania?

W IronOCR można określić lokalizacje napisów za pomocą System.Drawing.Rectangle, aby skupić się na interesującym obszarze, co może zwiększyć szybkość przetwarzania nawet o 41%.

Czy IronOCR może być używany do języków innych niż angielski podczas wyodrębniania napisów?

Tak, IronOCR obsługuje ponad 150 języków, co pozwala mu dokładnie wyodrębniać napisy z filmów w wielu językach.

Jakie są wymagania wstępne do skorzystania z samouczka dotyczącego OCR napisów w języku C#?

Samouczek wymaga podstawowej wiedzy z zakresu programowania w języku C# oraz umiejętności korzystania z programu Visual Studio w celu zainstalowania biblioteki IronOCR za pośrednictwem menedżera pakietów NuGet.

Jak IronOCR radzi sobie z klatkami wideo o niskiej jakości?

IronOCR zawiera funkcje korygujące skany niskiej jakości, poprawiające dokładność wyodrębniania tekstu z nieoptymalnych klatek wideo.

Jakie formaty wyjściowe są dostępne po wyodrębnieniu napisów za pomocą IronOCR?

Wyodrębnione napisy można zapisać jako pliki tekstowe, dane strukturalne lub pliki PDF z możliwością wyszukiwania przy użyciu IronOCR.

Czy korzystanie z IronOCR w projektach komercyjnych wiąże się z jakimikolwiek kosztami?

IronOCR jest bezpłatny do celów programistycznych i oferuje miesięczny bezpłatny okres próbny dla projektów komercyjnych. Do dalszego użytku komercyjnego wymagana jest licencja.

Czy IronOCR może integrować się z innymi bibliotekami w celu uzyskania dodatkowych funkcji?

Tak, IronOCR może współpracować z innymi bibliotekami Iron Software w zakresie takich zadań, jak obróbka plików PDF i pobieranie danych z sieci, zwiększając w ten sposób swoją funkcjonalność.

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

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie