UTILISATION DE L'IRONOCR

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

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'une reconnaissance optique de caractères efficace(OCR) 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 l'OCR, la lecture de codes-barres et l'extraction de texte dans les projets .NET.

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

  • Lecture de textes dans de nombreux formats, tels que les images(JPEG, PNG, BMP), GIF, TIF/TIFF, les flux, etPDFs
  • Correction dedes scans et des photos de mauvaise qualité avec une pléthore de filtres tels que Deskew, Denoise, Binarize, Enhance Resolution, Dilate, et bien d'autres encore
  • Lecture des codes-barres de plus de 20 formats différents, ainsi quePrise 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 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 cadre de travail cible. Enfin, cliquez sur le bouton Créer pour créer le projet.

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

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

Création d'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 et sélectionnez NuGet Package Manager > Gestion des paquets NuGet pour la solution, comme indiqué ci-dessous.

Comment reconnaître des sous-titres en C# (Tutoriel), Figure 2 : Installation d'IronOCR dans Visual Studio

Installation d'IronOCR dans Visual Studio

La fenêtre suivante apparaît.

Comment reconnaître des sous-titres en C# (Tutoriel), 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.

Comment reconnaître les sous-titres en C#(Tutoriel), Figure 4 : Recherche d'IronOCR dans l'interface 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.

Comment reconnaître les sous-titres en C#(Tutoriel), Figure 5 : Exemple de capture d'écran vidéo à partir de laquelle le texte sera extrait

Exemple de capture d'écran vidéo à partir de laquelle le texte sera extrait

Ajouter l'espace de noms suivant :

using IronOcr;
using IronOcr;
Imports IronOcr
VB   C#

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
VB   C#

Le code ci-dessus fonctionne comme suit :

  1. Initialisertesseracte de fer objet. Il créera une instance par défaut de IronTessearct.

  2. Créer un nouveauOcrInput alimenté par un fichier image 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 afin d'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 extrait les sous-titres de la capture d'écran donnée en entrée.

  4. result.Text renverra le contenu entier extrait de l'entrée donnée.

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

    Comment reconnaître les sous-titres en C#(Tutoriel), Figure 7 : Console de sortie générée par l'extraction de texte sur l'image d'exemple à l'aide d'IronOCR

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

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

    Comment reconnaître les sous-titres en C#(Tutoriel), 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 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.

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
VB   C#

Cela permet une augmentation de la vitesse de 41% - et nous permet d'être spécifiques. 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 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
VB   C#

résultat.SaveAsTextFile prend le chemin de sortie comme argument et enregistre le fichier dans le chemin donné.

Comment reconnaître les sous-titres en C#(Tutoriel), Figure 8 : 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

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

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 égalementspécifier la région dont on veut extraire le texte.

IronOCR offre les caractéristiques suivantesOpenCV pourVision 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 :

< PRÉCÉDENT
Comment obtenir par OCR du texte à partir d'une capture d'écran en C#