IRONOCR VERWENDEN

OCR von Untertiteln in C# (Anleitung)

Kannaopat Udonpant
Kannapat Udonpant
21. Februar 2023
Aktualisiert 17. Dezember 2023
Teilen Sie:

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

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.

Wie man Untertitel in C# mit OCR erstellt (Tutorial), Abbildung 1: Ein neues Projekt in Visual Studio erstellen

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.

Wie man Untertitel mit OCR in C# verwendet (Tutorial), Abbildung 2: Installation von IronOCR in Visual Studio

Installation von IronOCR in Visual Studio

Das folgende Fenster wird angezeigt.

So OCRen Sie Untertitel in C# (Tutorial), Abbildung 3: Visual Studio NuGet Package Manager UI

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.

Wie man Untertitel in C# OCR-t (Tutorial), Abbildung 4: Suchen nach IronOCR in der Benutzeroberfläche des NuGet-Paket-Managers

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.

So führen Sie die Texterkennung von Untertiteln in C# durch (Tutorial), Abbildung 5: Beispiel-Video-Screenshot, aus dem Text extrahiert wird

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:

  1. Initialisieren Sie das IronTesseract-Objekt. Es wird eine Standardinstanz von IronTessearct erstellen.

  2. 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.

  3. Lesen eines Textes aus einem OCR-Eingabeobjekt und Rückgabe eines OCR-Ergebnisobjekts. ocr.Read extrahiert Untertitel aus dem angegebenen Eingabescreenshot.

  4. result.Text gibt den gesamten Inhalt zurück, der aus der angegebenen Eingabe extrahiert wurde.

    Das Beispielprogramm erzeugt die unten stehende Konsolenausgabe:

    Wie man Untertitel in C# OCRt (Tutorial), Abbildung 7: Konsolenausgabe, die durch Textextraktion aus dem Beispielbild mit IronOCR erzeugt wurde

    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:

    Wie man Untertitel in C# OCR-t (Tutorial), Abbildung 6: Ein einzelner Rahmen eines längeren Videos mit Textbereichen für den Videotitel und die Videountertitel

    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.

Wie man Untertitel in C# OCR (Tutorial), Abbildung 8: Ein einzelner Frame eines längeren Videos mit Textbereichen für den Videotitel und die Video-Untertitel

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:

Kannaopat Udonpant
Software-Ingenieur
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