USO DE IRONOCR

Cómo hacer OCR de subtítulos en C# (Tutorial)

Kannaopat Udonpant
Kannapat Udonpant
21 de febrero, 2023
Actualizado 17 de diciembre, 2023
Compartir:

En este tutorial, aprenderemos a extraer subtítulos codificados de archivos de vídeo. Tomaremos un archivo de vídeo de muestra y extraeremos los subtítulos codificados en un archivo txt. Desarrollaremos un programa C# .NET que extraerá los subtítulos codificados utilizando el proceso OCR. Voy a mantener este tutorial simple y fácil para que incluso un principiante C # programador puede entenderlo.

Necesitamos un motor de Reconocimiento Óptico de Caracteres (OCR) eficiente que pueda procesar el video y obtener archivos de subtítulos independientemente del idioma de los subtítulos.

Hay muchas bibliotecas disponibles que proporcionan resultados de OCR. Algunas son de pago, otras son difíciles de usar y otras no son eficaces ni precisas, por lo que es muy difícil encontrar una biblioteca que sea gratuita, eficaz, fácil de usar y proporcione resultados precisos.

IronOCR, que es gratuito para el desarrollo, ofrece una prueba gratuita de un mes para fines comerciales. Es compatible con más de 150 idiomas y ofrece mayor precisión que la mayoría de las bibliotecas de OCR disponibles. También es eficaz y fácil de usar. Utilizaremos esta biblioteca para nuestra demostración.

IronOCR

IronOCR es una biblioteca desarrollada y mantenida por Iron Software que ayuda a los ingenieros de software en C# a realizar OCR, escaneo de códigos de barras y extracción de texto en proyectos .NET.

Entre las características de IronOCR se incluyen:

  • Leer texto de muchos formatos como imágenes (JPEG, PNG, BMP), GIF, TIF/TIFF, flujos y PDFs
  • Corrección de escaneos y fotos de baja calidad con una multitud de filtros como Deskew, Denoise, Binarize, Enhance Resolution, Dilate, y muchos más
  • Lectura de códigos de barras de más de 20 formatos diferentes, junto con Soporte para códigos QR
  • Utiliza la última versión de Tesseract OCR, con un rendimiento superior al de otras bibliotecas de su clase.
  • Exportación de PDF con opción de búsqueda, exportación de hOCR / HTML y texto con contenido de imagen.

    Vamos a desarrollar una aplicación de demostración para leer números de matrícula.

Crear un proyecto de Visual Studio

El primer paso es crear un nuevo proyecto.

Abre Visual Studio. Haga clic en Crear nuevo proyecto y seleccione la plantilla de proyecto de Aplicación de consola.

Haz clic en el botón Siguiente, y nombra el proyecto (lo he nombrado "OCR Subtitles", puedes nombrarlo según tu elección).

Haga clic en el botón Siguiente y seleccione su Framework de destino. Finalmente, haz clic en el botón Crear para crear el proyecto.

El proyecto se creará como se muestra a continuación.

Cómo realizar OCR de subtítulos en C# (Tutorial), Figura 1: Creación de un nuevo proyecto en Visual Studio

Creación de un nuevo proyecto en Visual Studio

Ahora, necesitamos instalar la librería IronOCR para usarla en nuestro proyecto. La forma más sencilla es instalarlo a través de NuGet Package Manager for Solution.

Instalar el paquete NuGet IronOCR

Haga clic en Herramientas en la barra de menú superior y seleccione Administrador de paquetes NuGet > Administrar paquetes NuGet para la solución, como se muestra a continuación.

Cómo realizar OCR en subtítulos con C# (Tutorial), Figura 2: Instalación de IronOCR en Visual Studio

Instalación de IronOCR en Visual Studio

Aparecerá la siguiente ventana.

Cómo hacer OCR de subtítulos en C# (Tutorial), Figura 3: Interfaz de usuario del Administrador de paquetes NuGet de Visual Studio

Interfaz de usuario del administrador de paquetes NuGet de Visual Studio

Haga clic en Examinar y busque IronOCR. Seleccione el paquete de IronOCR y haga clic en el botón Instalar, como se muestra a continuación.

Cómo hacer OCR a subtítulos en C# (Tutorial), Figura 4: Buscando IronOCR en la interfaz de usuario del Administrador de paquetes NuGet

Buscando IronOCR en la interfaz de usuario del Administrador de paquetes NuGet

La librería IronOCR estará instalada y lista para su uso.

Extraer subtítulos codificados

Escribamos un programa para extraer subtítulos codificados.

Vamos a utilizar la siguiente captura de pantalla para extraer subtítulos.

Cómo realizar OCR en subtítulos en C# (Tutorial), Figura 5: Captura de pantalla de un vídeo de muestra del cual se extraerá texto

Captura de pantalla de video de muestra de la cual se extraerá texto

Añade el siguiente espacio de nombres:

using IronOcr;
using IronOcr;

Escriba el siguiente código debajo de la declaración del espacio de nombres.

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);
}

El código anterior funciona de la siguiente manera:

  1. Inicializar el objeto IronTesseract. Creará una instancia predeterminada de IronTessearct.

  2. Cree un nuevo objeto OcrInput poblado con un archivo de imagen de entrada o un documento PDF. OcrInput es el tipo de entrada preferido porque permite el OCR de documentos de múltiples páginas y permite mejorar las imágenes antes del OCR para obtener resultados más rápidos y precisos.

  3. Lee un texto de un Objeto de Entrada OCR y devuelve un objeto Resultado OCR. ocr.Read extraerá subtítulos de la captura de pantalla proporcionada.

  4. result.Text devolverá todo el contenido extraído de la entrada dada.

    El programa de ejemplo produce la siguiente salida de consola:

    Cómo realizar OCR de subtítulos en C# (Tutorial), Figura 7: Salida de consola generada al realizar extracción de texto en la imagen de muestra usando IronOCR

    Salida de consola generada al realizar la extracción de texto en la imagen de muestra utilizando IronOCR

    Supongamos que tiene un fotograma de vídeo que contiene tanto el título del vídeo como los subtítulos:

    Cómo hacer OCR de subtítulos en C# (Tutorial), Figura 6: Un fotograma de un video más largo que contiene regiones de texto para el título del video y los subtítulos del video

    Un solo fotograma de un video más largo que contiene regiones de texto para el título del video y los subtítulos del video

    Nuestro objetivo es extraer los subtítulos codificados de la región inferior de la imagen. En este caso, tenemos que especificar la región de texto en la que se muestra el subtítulo.

Especificar la ubicación de los subtítulos en el fotograma

Podemos usar un System.Drawing.Rectangle para especificar una región en la que leeremos un subtítulo del fotograma de video. La unidad de medida siempre es píxeles.

Utilizaremos el siguiente código de ejemplo para especificar la región de texto.

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);
}

Esto produce un aumento de velocidad del 41% - y nos permite ser específicos. En contentArea, hemos especificado el punto de inicio en x e y, y luego la altura y el ancho de la región de subtítulos requerida.

Guardar subtítulo en un archivo de texto de subtítulos

Vamos a guardar los subtítulos extraídos en un archivo 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");
}

result.SaveAsTextFile tomará la ruta de salida como argumento y guardará el archivo en la ruta indicada.

Cómo realizar OCR de subtítulos en C# (Tutorial), Figura 8: Un solo fotograma de un video más largo que contiene regiones de texto para el título del video y los subtítulos del video

Un solo fotograma de un video más largo que contiene regiones de texto para el título del video y los subtítulos del video

Resumen

En este tutorial, hemos aprendido a utilizar IronOCR y desarrollar un programa muy simple para leer subtítulos de la captura de pantalla de vídeo. También podemos especificar la región de la cual queremos extraer el texto.

IronOCR proporciona las funciones de OpenCV para visión por computadora. Hemos visto que IronOCR nos permite leer texto a partir de imágenes borrosas o de baja resolución. Esta biblioteca es eficaz y proporciona precisión. Admite más de 127 idiomas con total precisión. Es gratuito para el desarrollo y no tiene restricciones para la producción.

En resumen, IronOCR proporciona:

Kannaopat Udonpant
Ingeniero de software
Antes de convertirse en ingeniero de software, Kannapat realizó un doctorado en Recursos Medioambientales en la Universidad de Hokkaido (Japón). Mientras cursaba su licenciatura, Kannapat también se convirtió en miembro del Laboratorio de Robótica Vehicular, que forma parte del Departamento de Ingeniería de Bioproducción. En 2022, aprovechó sus conocimientos de C# para unirse al equipo de ingeniería de Iron Software, donde se centra en IronPDF. Kannapat valora su trabajo porque aprende directamente del desarrollador que escribe la mayor parte del código utilizado en IronPDF. Además del aprendizaje entre iguales, Kannapat disfruta del aspecto social de trabajar en Iron Software. Cuando no está escribiendo código o documentación, Kannapat suele jugar con su PS5 o volver a ver The Last of Us.
< ANTERIOR
Cómo obtener texto de una captura de pantalla con OCR en C#