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 brauchen eine effiziente optische Zeichenerkennung(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 hilft, OCR, Barcode-Scanning und Textextraktion in .NET-Projekten durchzuführen.
IronOCR zeichnet sich durch folgende Merkmale aus:
Lesen von Text aus vielen Formaten wie z. B. Bildern(JPEG, PNG, BMP), GIF, TIF/TIFFstreams, undPDFs
Berichtigung vonscans und Fotos von schlechter Qualität mit einer Fülle von Filtern wie Deskew, Denoise, Binarize, Enhance Resolution, Dilate und vielen mehr
Lesen von Barcodes aus über 20 verschiedenen Formaten, zusammen mitQR-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.
Klicken Sie auf die Schaltfläche Weiter, und benennen Sie das Projekt(Ich habe es "OCR Subtitles" genannt, Sie können es nach Ihrer Wahl benennen).
Klicken Sie auf die Schaltfläche Weiter, und wählen Sie Ihr Ziel-Framework aus. Klicken Sie abschließend auf die Schaltfläche Erstellen, 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 Package Manager > Manage NuGet Packages for Solution, wie unten dargestellt.
Installation von IronOCR in Visual Studio
Das folgende Fenster wird angezeigt.
Visual Studio NuGet Package Manager UI
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 dargestellt.
Suchen nach IronOCR in der NuGet Package Manager UI
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 der 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:
Initialisiereneisen-Tesserakt objekt. Es wird eine Standardinstanz von IronTessearct erstellt.
Erstellen Sie eine neueocrInput objekt, das mit einer Eingabebilddatei oder einem PDF-Dokument gefüllt wird. ocrInput" ist der bevorzugte Eingabetyp, da er die OCR von mehrseitigen Dokumenten ermöglicht und die Bilder vor der OCR verbessert werden können, um schnellere und genauere Ergebnisse zu erzielen.
Lesen eines Textes aus einem OCR-Eingabeobjekt und Rückgabe eines OCR-Ergebnisobjekts. ocr.Read extrahiert Untertitel aus dem gegebenen Eingabebildschirmfoto.
result.Text" gibt den gesamten Inhalt zurück, der aus der angegebenen Eingabe extrahiert wurde.
Das Beispielprogramm erzeugt die unten stehende Konsolenausgabe:
Konsolenausgabe, die bei der Textextraktion aus 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 Einzelbild eines längeren Videos mit Textbereichen für den Videotitel und die Videountertitel
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 festzulegen, in dem wir einen Untertitel aus dem Videobild 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 führt zu einem Geschwindigkeitszuwachs von 41% - und ermöglicht es uns, genau zu sein. In contentArea haben wir den Startpunkt in x und y angegeben, und dann die Höhe und Breite des gewünschten Untertitelbereichs.
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 Ausgabepfad als Argument und speichert die Datei unter dem angegebenen Pfad.
Ein Einzelbild eines längeren Videos mit Textbereichen für den Videotitel und die Videountertitel
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 auchdie Region angeben für die wir den Text extrahieren wollen.
IronOCR bietet die folgenden FunktionenOpenCV fürComputer 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
Jordi beherrscht vor allem Python, C# und C++. Wenn er seine Fähigkeiten bei Iron Software nicht einsetzt, programmiert er Spiele. Durch seine Mitverantwortung für Produkttests, Produktentwicklung und Forschung trägt Jordi wesentlich zur kontinuierlichen Produktverbesserung bei. Die vielseitigen Erfahrungen, die er sammelt, bieten ihm immer wieder neue Herausforderungen, und er sagt, dass dies einer seiner Lieblingsaspekte bei Iron Software ist. Jordi wuchs in Miami, Florida, auf und studierte Informatik und Statistik an der University of Florida.
< PREVIOUS Wie OCR Text aus einem Screenshot in C# abrufen kann