UTILISATION DE L'IRONOCR

Comment reconnaître des sous-titres en C# (Tutoriel)

Kannaopat Udonpant
Kannapat Udonpant
février 21, 2023
Mise à jour décembre 17, 2023
Partager:

Dans ce tutoriel, nous allons apprendre à extraire les sous-titres codés en dur des fichiers vidéo. Nous prendrons un exemple de fichier vidéo et extrairons les sous-titres codés en dur dans un fichier txt. Nous développerons un programme C# .NET qui extraira les sous-titres codés en dur à l'aide d'un processus OCR. Je vais faire en sorte que ce tutoriel soit simple et facile à comprendre, de sorte 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 qui peut traiter la vidéo et 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. Certaines sont payantes, d'autres sont difficiles à utiliser et d'autres encore ne sont ni efficaces ni précises. 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, offre une période d'essai gratuite 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. Il est également 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 la reconnaissance optique de caractères (OCR), la numérisation de code-barres et l'extraction de texte dans les projets .NET.

Les caractéristiques de l'IronOCR sont les suivantes :

  • Lecture de texte à partir de nombreux formats tels que les images (JPEG, PNG, BMP), GIF, TIF/TIFF, Flux, et PDFs
  • Correction des scans et photos de basse qualité avec une multitude de filtres tels que Deskew, Denoise, Binarize, Enhance Resolution, Dilate, et bien d'autres
  • Lecture de codes-barres à partir de plus de 20 formats différents, avec support des codes 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 nommez le projet (je l'ai nommé "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 Créer pour créer le projet.

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

Comment OCR des sous-titres en C# (Tutoriel), Figure 1 : Création d'un nouveau projet dans Visual Studio

Créer un nouveau projet dans Visual Studio

Nous devons maintenant installer la bibliothèque IronOCR pour l'utiliser dans notre projet. Le plus simple est de l'installer via NuGet Package Manager for Solution.

Installer le paquet NuGet IronOCR

Cliquez sur Outils dans la barre de menu supérieure, puis sélectionnez Gestionnaire de packages NuGet > Gérer les packages NuGet pour la solution, comme indiqué ci-dessous.

Comment OCR les sous-titres en C# (Tutoriel), Figure 2 : Installation d'IronOCR dans Visual Studio

Installation de IronOCR dans Visual Studio

La fenêtre suivante apparaît.

Comment OCR les sous-titres en C# (Tutoriel), Figure 3 : Interface utilisateur du gestionnaire de packages NuGet de Visual Studio

Interface de gestion des packages NuGet dans Visual Studio

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

Comment effectuer une OCR de sous-titres en C# (Tutoriel), Figure 4 : Recherche d'IronOCR dans l'interface utilisateur du gestionnaire de packages NuGet

Recherche de IronOCR dans l'interface du gestionnaire de packages 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.

Comment effectuer l'OCR des sous-titres en C# (Tutoriel), Figure 5 : Capture d'écran de vidéo échantillon à partir de laquelle le texte sera extrait

Capture d'écran vidéo d'exemple à partir de laquelle le texte sera extrait

Ajouter l'espace de noms suivant :

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

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

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

Le code ci-dessus fonctionne comme suit :

  1. Initialiser l'objet IronTesseract. Il créera une instance par défaut de IronTessearct.

  2. Créez un nouvel objet OcrInput rempli avec un fichier image d'entrée ou un document PDF. 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 pour obtenir des résultats plus rapides et plus précis.

  3. Lire un texte à partir d'un objet d'entrée d'OCR et renvoyer un objet de résultat d'OCR. ocr.Read extraira les sous-titres de la capture d'écran 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 :

    Comment OCR les sous-titres en C# (Tutoriel), Figure 7 : Sortie de la console générée à partir de l'extraction de texte sur l'image d'exemple avec IronOCR

    Sortie de console générée à partir de l'extraction de texte sur l'image échantillon à l'aide de IronOCR

    Supposons que vous ayez une image vidéo qui contienne à la fois le titre de la vidéo et les sous-titres :

    Comment lire les sous-titres par reconnaissance optique de caractères (OCR) en C# (Tutoriel), Figure 6 : Une seule image d'une vidéo plus longue contenant des régions de texte pour le titre de la vidéo et les sous-titres de la vidéo

    Une seule image d'une vidéo plus longue contenant des régions 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 allons lire un sous-titre de la trame vidéo. L'unité de mesure est toujours pixels.

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

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

Cela se traduit par une augmentation de 41 % de la vitesse - et nous permet d'être précis. Dans contentArea, nous avons spécifié le point de départ en x et y, ainsi que la hauteur et la largeur de la région de sous-titres requise.

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

Sauvegardons les sous-titres extraits dans un fichier 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");
}
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 prendra le chemin de sortie comme argument et enregistrera le fichier dans le chemin donné.

Comment OCR les sous-titres en C# (Tutoriel), Figure 8 : Une image d'une vidéo plus longue contenant des régions de texte pour le titre de la vidéo et les sous-titres de la vidéo

Une seule image d'une vidéo plus longue contenant des régions 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 d'une vidéo. Nous pouvons également spécifier la région pour laquelle nous voulons extraire le texte.

IronOCR fournit les fonctionnalités de OpenCV pour la vision par ordinateur. 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. Il prend en charge plus de 127 langues avec une précision totale. Il est gratuit pour le développement et ne comporte aucune restriction pour la production.

En résumé, IronOCR fournit :

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. Tout en poursuivant ses études, Kannapat est également devenu membre du Vehicle Robotics Laboratory, qui fait partie du Department of Bioproduction Engineering (département d'ingénierie de la bioproduction). En 2022, il a mis à profit ses compétences en C# pour rejoindre l'équipe d'ingénieurs d'Iron Software, où il se concentre sur IronPDF. Kannapat apprécie son travail car il apprend directement auprès du développeur qui écrit la majeure partie du code utilisé dans IronPDF. Outre l'apprentissage par les pairs, Kannapat apprécie l'aspect social du travail chez Iron Software. Lorsqu'il n'écrit pas de code ou de documentation, Kannapat peut généralement être trouvé en train de jouer sur sa PS5 ou de revoir The Last of Us.
< PRÉCÉDENT
Comment obtenir par OCR du texte à partir d'une capture d'écran en C#