Passer au contenu du pied de page
UTILISATION D'IRONOCR

Comment effectuer la reconnaissance de sous-titres en C# (Tutoriel)

Dans ce tutoriel, nous allons apprendre à extraire des sous-titres codés en dur à partir de fichiers vidéo. Nous prendrons un exemple de fichier vidéo et extrairons les sous-titres codés en dur dans un fichier texte. Nous développerons un programme C# .NET qui extraira les sous-titres codés en dur en utilisant le processus OCR. Je veillerai à ce que ce tutoriel soit simple et facile afin que même un programmeur C# débutant puisse le comprendre.

Nous avons besoin d'un moteur de reconnaissance optique de caractères (OCR) efficace, capable de traiter la vidéo et d'obtenir des fichiers de sous-titres, quelle que soit la langue des sous-titres.

Il existe de nombreuses bibliothèques qui fournissent des résultats d'OCR. Certains d'entre eux sont payants, d'autres sont difficiles à utiliser et d'autres encore ne sont ni efficaces ni précis. Il est donc très difficile de trouver une bibliothèque qui soit gratuite, efficace, facile à utiliser et qui fournisse des résultats précis.

IronOCR, qui est gratuit pour le développement, propose un essai gratuit d'un mois à des fins commerciales. Elle prend en charge plus de 150 langues et offre une meilleure précision que la plupart des autres bibliothèques d'OCR disponibles. Elle doit également être efficace et facile à utiliser. Nous utiliserons cette bibliothèque pour notre démonstration.

IronOCR

IronOCR est une bibliothèque développée et maintenue par Iron Software qui aide les ingénieurs logiciels C# à effectuer l'OCR, la lecture de codes-barres et l'extraction de texte dans les projets .NET.

Les fonctionnalités d'IronOCR comprennent :

  • Reading text from many formats such as images (JPEG, PNG, BMP), GIF, TIF/TIFF, Streams, and PDFs
  • Correction de scans et photos de mauvaise qualité avec une pléthore de filtres tels que Deskew, Denoise, Binarize, Enhance Resolution, Dilate, et bien d'autres
  • Lecture de codes-barres de plus de 20 formats différents, ainsi que prise en charge du code QR
  • Utilisation de la dernière version de Tesseract OCR, dont les performances sont supérieures à celles des autres bibliothèques de ce type
  • Exportation de PDF consultables, exportation hOCR / HTML, et texte du contenu de l'image.

Développons une application de démonstration pour lire les numéros de plaques d'immatriculation.

Créer un projet Visual Studio

La première étape consiste à créer un nouveau projet.

Ouvrez Visual Studio. Cliquez sur Créer un nouveau projet et sélectionnez le modèle de projet Application console.

Cliquez sur le bouton Suivant et donnez un nom au projet (je l'ai appelé "OCR Subtitles", vous pouvez le nommer comme vous le souhaitez).

Cliquez sur le bouton Suivant et sélectionnez votre Framework cible. Enfin, cliquez sur le bouton Create pour créer le projet.

Le projet sera créé comme indiqué ci-dessous.

How to OCR Subtitles in C# (Tutorial), Figure 1 : Création d'un nouveau projet dans Visual Studio Créer un nouveau projet dans Visual Studio

À présent, nous devons installer la bibliothèque IronOCR pour l'utiliser dans notre projet. Le plus simple est de l'installer via le gestionnaire de paquets NuGet pour solution.

Installer le package NuGet IronOCR

Cliquez sur Outils dans la barre de menu supérieure, puis sélectionnez NuGet Package Manager > Gestion des paquets NuGet pour la solution, comme indiqué ci-dessous.

How to OCR Subtitles in C# (Tutorial), Figure 2 : Installer IronOCR dans Visual Studio Installation d'IronOCR dans Visual Studio

La fenêtre suivante s'affiche.

How to OCR Subtitles in C# (Tutorial), Figure 3 : Visual Studio NuGet Package Manager UI Visual Studio NuGet Package Manager UI

Cliquez sur parcourir et recherchez IronOCR. Sélectionnez le paquet IronOcr et cliquez sur le bouton Installer, comme indiqué ci-dessous.

How to OCR Subtitles in C# (Tutorial), Figure 4 : Recherche d'IronOCR dans l'interface utilisateur du gestionnaire de paquets NuGet Recherche d'IronOCR dans l'interface utilisateur du gestionnaire de paquets NuGet

La bibliothèque IronOCR sera installée et prête à être utilisée.

Extraire des sous-titres codés en dur

Écrivons un programme pour extraire les sous-titres codés en dur.

Nous allons utiliser la capture d'écran suivante pour extraire les sous-titres.

How to OCR Subtitles in C# (Tutorial), Figure 5 : Exemple de capture d'écran vidéo à partir de laquelle le texte sera extrait Exemple de capture d'écran vidéo dont le texte sera extrait

Ajoutez l'espace de noms suivant :

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

Écrivez le code suivant sous la déclaration de l'espace de noms.

// 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

Le code ci-dessus fonctionne comme suit :

  1. Initialisez l'objet IronTesseract. Il créera une instance par défaut d'IronTesseract.
  2. Créez un nouvel objet OcrInput peuplé d'un fichier image ou d'un document PDF en entrée. OcrInput est le type d'entrée préféré car il permet l'OCR de documents multi-pages et permet d'améliorer les images avant l'OCR afin d'obtenir des résultats plus rapides et plus précis.
  3. Lire un texte à partir d'un objet d'entrée OCR et renvoyer un objet de résultat OCR. ocr.Read extraira les sous-titres de la capture d'écran d'entrée donnée.
  4. result.Text renverra l'intégralité du contenu extrait de l'entrée donnée.

L'exemple de programme produit la sortie de console ci-dessous :

How to OCR Subtitles in C# (Tutorial), Figure 7 : Console output generated from performing text extraction on the sample image using IronOCR (en anglais) Sortie de console générée par l'exécution de l'extraction de texte sur l'image d'exemple à l'aide d'IronOcr

Supposons que vous disposiez d'une image vidéo contenant à la fois le titre de la vidéo et les sous-titres :

How to OCR Subtitles in C# (Tutorial), Figure 6 : Une seule image d'une vidéo plus longue contenant des zones de texte pour le titre et les sous-titres de la vidéo Une seule image d'une vidéo plus longue contenant des zones de texte pour le titre de la vidéo et les sous-titres de la vidéo

Notre objectif est d'extraire les sous-titres codés en dur dans la partie inférieure de l'image. Dans ce cas, nous devons spécifier la zone de texte dans laquelle le sous-titre est affiché.

Spécifier l'emplacement des sous-titres dans le cadre

Nous pouvons utiliser un System.Drawing.Rectangle pour spécifier une région dans laquelle nous lirons un sous-titre à partir de l'image vidéo. L'unité de mesure est toujours le pixel.

Nous utiliserons l'exemple de code suivant pour spécifier la région de texte.

// 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

Cela nous permet d'augmenter la vitesse de traduction de 41 % et d'être plus précis. Dans contentArea, nous avons spécifié le point de départ en x et y, puis la hauteur et la largeur de la région de sous-titres requise.

Enregistrer un sous-titre dans un fichier texte de sous-titres

Sauvegardons les sous-titres extraits dans un fichier texte.

// 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 prendra le chemin de sortie comme argument, et enregistrera le fichier dans le chemin donné.

How to OCR Subtitles in C# (Tutorial), Figure 8 : Une seule image d'une vidéo plus longue contenant des zones de texte pour le titre et les sous-titres de la vidéo Une seule image d'une vidéo plus longue contenant des zones de texte pour le titre de la vidéo et les sous-titres de la vidéo

Résumé

Dans ce tutoriel, nous avons appris à utiliser IronOcr et à développer un programme très simple pour lire les sous-titres à partir de la capture d'écran de la vidéo. Nous pouvons également spécifier la région pour laquelle nous voulons extraire le texte.

IronOCR provides the features of OpenCV for Computer Vision. Nous avons vu qu'IronOCR permet de lire du texte à partir d'images floues ou à faible résolution. Cette bibliothèque est efficace et précise. Le logiciel prend en charge plus de 125 langues avec une précision totale. Le projet est gratuit pour le développement et ne comporte aucune restriction pour la production.

En résumé, IronOCR fournit :

  • Capacité à numériser et à lire des images et des documents numérisés
  • Prise en charge de 150+ langues mondiales
  • Sortie sous forme de texte, de données structurées ou de PDF consultables
  • Prise en charge de .NET 6, 5, Core, Standard, Framework

IronOCR is part of Iron Software's suite of libraries useful for reading and writing PDFs, manipulating Excel files, reading text from images, and scraping content from websites. Purchase the complete Iron Suite for the price of two individual libraries.

Questions Fréquemment Posées

Comment puis-je extraire les sous-titres intégrés des fichiers vidéo en C#?

Vous pouvez extraire les sous-titres intégrés des fichiers vidéo en C# en utilisant IronOCR. Installez la bibliothèque via le gestionnaire de packages NuGet, puis utilisez-la pour traiter les trames vidéo et extraire du texte.

Quel est l'avantage d'utiliser IronOCR par rapport à Tesseract pour l'extraction de sous-titres?

IronOCR offre une alternative améliorée à Tesseract avec une précision accrue, une facilité d'utilisation et un support pour plus de 150 langues, le rendant particulièrement adapté à l'extraction de sous-titres à partir de vidéos.

Comment spécifiez-vous les emplacements des sous-titres dans IronOCR pour améliorer la vitesse de traitement?

Vous pouvez spécifier les emplacements des sous-titres dans IronOCR en utilisant un System.Drawing.Rectangle pour se concentrer sur la région d'intérêt, ce qui peut améliorer la vitesse de traitement jusqu'à 41%.

IronOCR peut-il être utilisé pour des langues autres que l'anglais lors de l'extraction de sous-titres?

Oui, IronOCR prend en charge plus de 150 langues, ce qui lui permet d'extraire des sous-titres avec précision à partir de vidéos dans plusieurs langues.

Quelles sont les conditions préalables pour suivre le tutoriel OCR de sous-titres en C#?

Le tutoriel nécessite des connaissances de base en programmation C# et la capacité d'utiliser Visual Studio pour installer la bibliothèque IronOCR via le gestionnaire de packages NuGet.

Comment IronOCR gère-t-il les trames vidéo de basse qualité?

IronOCR inclut des fonctionnalités pour corriger les scans de basse qualité, améliorant ainsi la précision de l'extraction de texte à partir de trames vidéo sous-optimales.

Quels formats de sortie sont disponibles après l'extraction des sous-titres avec IronOCR?

Les sous-titres extraits peuvent être enregistrés sous forme de fichiers texte, de données structurées ou de PDFs consultables à l'aide d'IronOCR.

Y a-t-il un coût associé à l'utilisation d'IronOCR pour des projets commerciaux?

IronOCR est gratuit pour le développement et offre un essai gratuit d'un mois pour les projets commerciaux. Pour une utilisation commerciale continue, une licence est requise.

IronOCR peut-il s'intégrer à d'autres bibliothèques pour des fonctionnalités supplémentaires?

Oui, IronOCR peut s'intégrer à d'autres bibliothèques d'Iron Software pour des tâches telles que la manipulation de PDF et le web scraping, augmentant ainsi sa fonctionnalité.

Kannaopat Udonpant
Ingénieur logiciel
Avant de devenir ingénieur logiciel, Kannapat a obtenu un doctorat en ressources environnementales à l'université d'Hokkaido au Japon. Pendant qu'il poursuivait son diplôme, Kannapat est également devenu membre du laboratoire de robotique de véhicules, qui fait partie du département de bioproduction. En 2022, il a utilisé ses compé...
Lire la suite