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.
Jak wykonać OCR napisów w języku C#
- Zainstaluj bibliotekę C#, aby wykonać OCR na napisach
- Zaimportuj obraz z podpisem do nowej instancji
OcrInput - Przetwórz obrazy, stosując wybrane filtry
- Określ położenie napisu na obrazie, aby poprawić wydajność i dokładność OCR
- Wyeksportuj pobrany tekst jako plik tekstowy
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.
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.
Instalacja IronOCR w Visual Studio
Pojawi się następujące okno.
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.
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.
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
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
Powyższy kod działa w następujący sposób:
- Zainicjuj obiekt
IronTesseract. Spowoduje to utworzenie domyślnej instancjiIronTesseract. - Utwórz nowy obiekt
OcrInputwypełniony plikiem obrazu lub dokumentem PDF.OcrInputjest 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. - Odczytaj tekst z obiektu wejściowego OCR i zwróć obiekt wyniku OCR.
ocr.Readwyodrębni napisy z podanego zrzutu ekranu. result.Textzwróci całą treść wyodrębnioną z podanego wkładu.
Przykładowy program generuje poniższy wynik w konsoli:
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:
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
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
result.SaveAsTextFile przyjmie ścieżkę wyjściową jako argument i zapisze plik w podanej ścieżce.
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ść.



