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 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
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.
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.
Installation d'IronOCR dans Visual Studio
La fenêtre suivante apparaît.
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.
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.
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
$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 :
Initialisertesseracte de fer objet. Il créera une instance par défaut de IronTessearct.
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.
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.
result.Text renverra le contenu entier extrait de l'entrée donnée.
L'exemple de programme produit la sortie de console ci-dessous :
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 :
**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
$vbLabelText $csharpLabel
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
$vbLabelText $csharpLabel
résultat.SaveAsTextFile prend le chemin de sortie comme argument et enregistre le fichier dans le chemin donné.
**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 :
Capacité à numériser et à lire des images et des documents numérisés
Regan est diplômé de l'université de Reading, où il a obtenu une licence en ingénierie électronique. Avant de rejoindre Iron Software, il s'était concentré sur une seule tâche. Ce qu'il apprécie le plus chez Iron Software, c'est la diversité des tâches qu'il peut accomplir, qu'il s'agisse d'apporter une valeur ajoutée aux ventes, à l'assistance technique, au développement de produits ou à la commercialisation. Il aime comprendre comment les développeurs utilisent la bibliothèque d'Iron Software et utiliser ces connaissances pour améliorer continuellement la documentation et développer les produits.
< PRÉCÉDENT Comment obtenir par OCR du texte à partir d'une capture d'écran en C#
Des millions d'ingénieurs dans le monde entier lui font confiance
Réservez une démo en direct gratuite
Réservez une démonstration personnelle de 30 minutes.
Pas de contrat, pas de détails de carte, pas d'engagements.
Voici ce à quoi vous pouvez vous attendre :
Une démonstration en direct de notre produit et de ses principales fonctionnalités
Obtenez des recommandations de fonctionnalités spécifiques au projet
Toutes vos questions trouvent réponse pour vous assurer de disposer de toutes les informations dont vous avez besoin. (Aucune obligation de votre part.)
CHOISIR L'HEURE
VOS INFORMATIONS
Réservez votre gratuit Démonstration en direct
Fiable par plus de 2 millions d'ingénieurs dans le monde entier