In diesem Tutorial werden wir lernen, wie man hartkodierte Untertitel aus Videodateien extrahiert. Wir werden eine Beispiel-Videodatei nehmen und die hartkodierten Untertitel in eine txt-Datei extrahieren. Wir werden ein C# .NET-Programm entwickeln, das die hartkodierten Untertitel mithilfe des OCR-Prozesses extrahiert. Ich werde dieses Tutorial einfach und leicht halten, so dass auch ein Anfänger C# Programmierer es verstehen kann.
Wir benötigen eine effiziente Optical Character Recognition (OCR)-Engine, die das Video verarbeiten und Untertiteldateien unabhängig von der Untertitelsprache erstellen kann.
Es gibt viele Bibliotheken, die OCR-Ergebnisse liefern. Einige von ihnen sind kostenpflichtig, einige sind schwer zu benutzen, und einige sind nicht effizient oder genau, so dass es sehr schwierig ist, eine Bibliothek zu finden, die kostenlos, effizient und einfach zu benutzen ist und genaue Ergebnisse liefert.
IronOCR, das für die Entwicklung kostenlos ist, bietet eine einmonatige kostenlose Testversion für kommerzielle Zwecke. Sie unterstützt über 150 Sprachen und bietet eine bessere Genauigkeit als die meisten anderen verfügbaren OCR-Bibliotheken. Außerdem ist es effizient und einfach zu bedienen. Wir werden diese Bibliothek für unsere Demonstration verwenden.
IronOCR ist eine von Iron Software entwickelte und gepflegte Bibliothek, die C# Softwareentwicklern dabei hilft, OCR, Barcode-Scannen und Textextraktion in .NET-Projekten durchzuführen.
IronOCR zeichnet sich durch folgende Merkmale aus:
Text aus vielen Formaten lesen, wie Bilder (JPEG, PNG, BMP), GIF, TIF/TIFF, Streams und PDFs
Korrektur von Scans und Fotos in niedriger Qualität mit einer Vielzahl von Filtern wie Schiefen Korrigieren, Rauschunterdrückung, Binarisieren, Auflösung verbessern, Verdicken und vielen mehr
Lesen von Barcodes aus über 20 verschiedenen Formaten, zusammen mit QR Code-Unterstützung
Verwendung der neuesten Version von Tesseract OCR, deren Leistung über die anderer Bibliotheken dieser Art hinausgeht
Export von durchsuchbaren PDFs, hOCR/HTML-Export und Bildinhaltstext.
Entwickeln wir eine Demo-Anwendung zum Lesen von Nummernschildern.
Erstellen eines Visual Studio-Projekts
Der erste Schritt besteht darin, ein neues Projekt zu erstellen.
Öffnen Sie Visual Studio. Klicken Sie auf Neues Projekt erstellen und wählen Sie die Projektvorlage Konsolenanwendung aus.
Klicken Sie auf die Schaltfläche Weiter und benennen Sie das Projekt (ich habe es "OCR Subtitles" genannt, Sie können es nach Ihrem Belieben benennen).
Klicken Sie auf die Weiter-Taste und wählen Sie Ihr Ziel-Framework aus. Klicken Sie schließlich auf die Schaltfläche Create, um das Projekt zu erstellen.
Das Projekt wird wie unten dargestellt erstellt.
Erstellen eines neuen Projekts in Visual Studio
Nun müssen wir die IronOCR-Bibliothek installieren, um sie in unserem Projekt zu verwenden. Der einfachste Weg ist die Installation über den NuGet Package Manager for Solution.
IronOCR NuGet-Paket installieren
Klicken Sie in der oberen Menüleiste auf Tools und wählen Sie NuGet-Paket-Manager > NuGet-Pakete für die Lösung verwalten, wie unten gezeigt.
Installation von IronOCR in Visual Studio
Das folgende Fenster wird angezeigt.
Visual Studio NuGet-Paket-Manager-Benutzeroberfläche
Klicken Sie auf Durchsuchen, und suchen Sie nach IronOCR. Wählen Sie das IronOCR-Paket aus und klicken Sie auf die Schaltfläche Installieren, wie unten gezeigt.
Suche nach IronOCR in der NuGet-Paket-Manager-Benutzeroberfläche
Die IronOCR-Bibliothek ist nun installiert und einsatzbereit.
Extrahieren von hartkodierten Untertiteln
Schreiben wir ein Programm zum Extrahieren von hartkodierten Untertiteln.
Wir werden den folgenden Screenshot zum Extrahieren von Untertiteln verwenden.
Beispielvideo-Screenshot, aus dem Text extrahiert wird
Fügen Sie den folgenden Namespace hinzu:
using IronOcr;
using IronOcr;
Imports IronOcr
$vbLabelText $csharpLabel
Schreiben Sie den folgenden Code unterhalb der Namespace-Deklaration.
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate3.jpg"))
{
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\Liscence Plate\plate3.jpg"))
{
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput("D:\Liscence Plate\plate3.jpg")
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
$vbLabelText $csharpLabel
Der obige Code funktioniert wie folgt:
Initialisieren Sie das IronTesseract-Objekt. Es wird eine Standardinstanz von IronTessearct erstellen.
Erstellen Sie ein neues OcrInput-Objekt, das mit einer Eingabebilddatei oder einem PDF-Dokument gefüllt ist. OcrInput ist der bevorzugte Eingabetyp, da er die OCR von mehrseitigen Dokumenten ermöglicht und Bilder vor der OCR verbessert werden können, um schneller und genauere Ergebnisse zu erzielen.
Lesen eines Textes aus einem OCR-Eingabeobjekt und Rückgabe eines OCR-Ergebnisobjekts. ocr.Read extrahiert Untertitel aus dem angegebenen Eingabescreenshot.
result.Text gibt den gesamten Inhalt zurück, der aus der angegebenen Eingabe extrahiert wurde.
Das Beispielprogramm erzeugt die unten stehende Konsolenausgabe:
Konsolenausgabe, die durch die Textextraktion auf dem Beispielbild mit IronOCR erzeugt wurde
Nehmen wir an, Sie haben ein Videobild, das sowohl den Titel des Videos als auch die Untertitel enthält:
Ein einzelner Frame eines längeren Videos, das Textbereiche für den Videotitel und die Untertitel enthält
Unser Ziel ist es, die fest kodierten Untertitel aus dem unteren Bereich des Bildes zu extrahieren. In diesem Fall müssen wir den Textbereich angeben, in dem der Untertitel angezeigt wird.
Festlegen der Position des Untertitels im Rahmen
Wir können ein System.Drawing.Rectangle verwenden, um einen Bereich anzugeben, aus dem wir einen Untertitel aus dem Videoframe lesen werden. Die Maßeinheit ist immer Pixel.
Wir werden den folgenden Beispielcode verwenden, um den Textbereich festzulegen.
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
// a 41% improvement on speed
var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
input.AddImage(@"D:\subtitle\image.png", contentArea);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
// a 41% improvement on speed
var contentArea = new CropRectangle(x: 189, y: 272, height: 252, width: 77);
input.AddImage(@"D:\subtitle\image.png", contentArea);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
}
Dim ocr = New IronTesseract()
Using input = New OcrInput()
' a 41% improvement on speed
Dim contentArea = New CropRectangle(x:= 189, y:= 272, height:= 252, width:= 77)
input.AddImage("D:\subtitle\image.png", contentArea)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
$vbLabelText $csharpLabel
Dies ergibt eine 41% Geschwindigkeitssteigerung - und ermöglicht uns, spezifisch zu sein. Im contentArea haben wir den Startpunkt in x und y sowie die Höhe und Breite des benötigten Untertitelbereichs angegeben.
Untertitel in einer Untertitel-Textdatei speichern
Speichern wir die extrahierten Untertitel in einer TXT-Datei.
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
var result = ocr.Read(input);
result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
var ocr = new IronTesseract();
using (var input = new OcrInput(@"D:\subtitle\subtitle1.png"))
{
var result = ocr.Read(input);
result.SaveAsTextFile(@"D:\subtitle\subtitlefile.txt");
}
Dim ocr = New IronTesseract()
Using input = New OcrInput("D:\subtitle\subtitle1.png")
Dim result = ocr.Read(input)
result.SaveAsTextFile("D:\subtitle\subtitlefile.txt")
End Using
$vbLabelText $csharpLabel
result.SaveAsTextFile nimmt den Ausgabe-Pfad als Argument und speichert die Datei im angegebenen Pfad.
Ein einzelner Frame eines längeren Videos, das Textbereiche für den Videotitel und die Untertitel enthält
Zusammenfassung
In diesem Tutorial haben wir gelernt, IronOCR zu benutzen und ein sehr einfaches Programm zu entwickeln, um Untertitel aus einem Video-Screenshot zu lesen. Wir können auch den Bereich angeben, aus dem wir den Text extrahieren möchten.
IronOCR bietet die Funktionen von OpenCV für Computer Vision. Wir haben gesehen, dass IronOCR uns in die Lage versetzt, Text aus unscharfen oder niedrig aufgelösten Bildern zu lesen. Diese Bibliothek ist effizient und bietet Genauigkeit. Es unterstützt 127+ Sprachen mit voller Genauigkeit. Es ist kostenlos für die Entwicklung und hat keine Einschränkungen für die Produktion.
Zusammenfassend lässt sich sagen, dass IronOCR Folgendes bietet:
Die Fähigkeit, Bilder und gescannte Dokumente zu scannen und zu lesen
Bevor er Software-Ingenieur wurde, promovierte Kannapat an der Universität Hokkaido in Japan im Bereich Umweltressourcen. Während seines Studiums wurde Kannapat auch Mitglied des Vehicle Robotics Laboratory, das Teil der Abteilung für Bioproduktionstechnik ist. Im Jahr 2022 wechselte er mit seinen C#-Kenntnissen zum Engineering-Team von Iron Software, wo er sich auf IronPDF konzentriert. Kannapat schätzt an seiner Arbeit, dass er direkt von dem Entwickler lernt, der den Großteil des in IronPDF verwendeten Codes schreibt. Neben dem kollegialen Lernen genießt Kannapat auch den sozialen Aspekt der Arbeit bei Iron Software. Wenn er nicht gerade Code oder Dokumentationen schreibt, kann man Kannapat normalerweise beim Spielen auf seiner PS5 oder beim Wiedersehen mit The Last of Us antreffen.
< PREVIOUS Wie OCR Text aus einem Screenshot in C# abrufen kann