Saltar al pie de página
USANDO IRONOCR

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

En este tutorial, aprenderemos cómo extraer subtítulos duros de archivos de video. Tomaremos un archivo de video de muestra y extraeremos los subtítulos duros en un archivo de texto. Desarrollaremos un programa C# .NET que extraerá los subtítulos duros utilizando el proceso de OCR. Mantendré este tutorial simple y fácil para que incluso un programador principiante de C# pueda 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 del subtítulo.

Hay muchas bibliotecas disponibles que proporcionan resultados de OCR. Algunas de ellas son de pago, algunas son difíciles de usar y algunas no son eficientes o precisas, por lo que es muy difícil encontrar una biblioteca que sea gratuita, eficiente, fácil de usar y proporcione resultados precisos.

IronOCR, que es gratuito para el desarrollo, ofrece un mes de prueba gratuita para fines comerciales. Admite más de 150 idiomas y proporciona mejor precisión que la mayoría de las otras bibliotecas de OCR disponibles. También es eficiente y fácil de usar. Usaremos esta biblioteca para nuestra demostración.

IronOCR

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

Las características de IronOCR incluyen:

  • Lectura de texto de muchos formatos como imágenes (JPEG, PNG, BMP), GIF, TIF/TIFF, Streams, y PDFs
  • Corrección de escanes y fotos de baja calidad con una gran cantidad de filtros como Desinclinar, Reducir ruido, Binarizar, Mejorar resolución, Dilatar, y muchos más
  • Lectura de códigos de barras de más de 20 formatos diferentes, junto con soporte para códigos QR
  • Utilizando la última versión de Tesseract OCR, con su rendimiento ajustado por encima y más allá de otras bibliotecas de su clase
  • Exportación de PDFs buscables, exportación hOCR / HTML, y texto de contenido de imagen.

Desarrollemos una aplicación de demostración para leer números de matrículas.

Crear un proyecto de Visual Studio

El primer paso es crear un nuevo proyecto.

Abre Visual Studio. Haz clic en Crear nuevo proyecto y selecciona la plantilla de proyecto de aplicación de consola.

Haz clic en el botón Siguiente y nombra el proyecto (lo he llamado "OCR Subtitles", puedes nombrarlo como prefieras).

Haz clic en el botón Siguiente y selecciona tu Framework objetivo. 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 a subtítulos en C# (Tutorial), Figura 1: Creando un nuevo proyecto en Visual Studio Creando un nuevo proyecto en Visual Studio

Ahora, necesitamos instalar la biblioteca IronOCR para usarla en nuestro proyecto. La forma más fácil es instalarla a través del Administrador de paquetes NuGet para la solución.

Instalar el paquete NuGet de IronOCR

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

Cómo realizar OCR a subtítulos en C# (Tutorial), Figura 2: Instalando IronOCR dentro de Visual Studio Instalando IronOCR dentro de Visual Studio

Aparecerá la siguiente ventana.

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

Haz clic en buscar y busca IronOCR. Selecciona el paquete IronOCR y haz clic en el botón Instalar, como se muestra a continuación.

Cómo realizar 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 Biblioteca IronOCR se instalará y estará lista para usarse.

Extraer subtítulos codificados

Escribamos un programa para extraer subtítulos duros.

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

Cómo realizar OCR a subtítulos en C# (Tutorial), Figura 5: Captura de pantalla de video de muestra de la cual se extraerá el texto Captura de pantalla de video de muestra de la cual se extraerá el texto

Añade el siguiente espacio de nombres:

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

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

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

El código anterior funciona así:

  1. Inicializar un objeto IronTesseract. Creará una instancia predeterminada de IronTesseract.
  2. Crear un nuevo objeto OcrInput populado con un archivo de imagen de entrada o documento PDF. OcrInput es el tipo de entrada preferido porque permite la OCR de documentos de varias páginas, y permite mejorar las imágenes antes de la OCR para obtener resultados más rápidos y precisos.
  3. Leer un texto de un objeto de entrada de OCR y devolver un objeto de resultado de OCR. ocr.Read extraerá subtítulos de la captura de pantalla de entrada dada.
  4. result.Text devolverá todo el contenido extraído de la entrada dada.

El programa de muestra produce el siguiente resultado en la consola:

Cómo realizar OCR a 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 extracción de texto en la imagen de muestra usando IronOCR

Supongamos que tienes un fotograma de video que contiene tanto el título del video como los subtítulos:

Cómo realizar OCR a subtítulos en C# (Tutorial), Figura 6: 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

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

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

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

Usaremos el siguiente código de muestra para especificar la región de texto.

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

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

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

Guardemos los subtítulos extraídos en un archivo de texto.

// 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 tomará la ruta de salida como argumento y guardará el archivo en la ruta dada.

Cómo realizar OCR a 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 usar IronOCR y desarrollar un programa muy simple para leer subtítulos de la captura de pantalla del video. También podemos especificar la región para la cual queremos extraer el texto.

IronOCR proporciona las características de OpenCV para Visión por Computadora. Hemos visto que IronOCR nos permite leer texto de imágenes borrosas o de baja resolución. Esta biblioteca es eficiente y proporciona precisión. Admite más de 125 idiomas con total precisión. Es gratuito para el desarrollo y no tiene restricciones en producción.

En resumen, IronOCR proporciona:

  • La capacidad de escanear y leer imágenes y documentos escaneados
  • Soporte para más de 150 idiomas globales
  • Salida como texto, datos estructurados o PDFs buscables
  • Soporta .NET 6, 5, Core, Standard, Framework

IronOCR es parte de la suite de bibliotecas de Iron Software útiles para leer y escribir PDFs, manipular archivos de Excel, leer texto de imágenes, y extraer contenido de sitios web. Compra la Iron Suite completa por el precio de dos bibliotecas individuales.

Preguntas Frecuentes

¿Cómo puedo extraer subtítulos incrustados de archivos de video en C#?

Puedes extraer subtítulos incrustados de archivos de video en C# usando IronOCR. Instala la biblioteca a través del Administrador de Paquetes NuGet y úsala para procesar cuadros de video y extraer texto.

¿Cuál es la ventaja de usar IronOCR sobre Tesseract para la extracción de subtítulos?

IronOCR proporciona una alternativa mejorada a Tesseract con mayor precisión, facilidad de uso y soporte para más de 150 idiomas, lo que lo hace adecuado para extraer subtítulos de videos.

¿Cómo especificas las ubicaciones de subtítulos en IronOCR para mejorar la velocidad de procesamiento?

Puedes especificar las ubicaciones de subtítulos en IronOCR usando un System.Drawing.Rectangle para enfocarte en la región de interés, lo que puede mejorar la velocidad de procesamiento hasta en un 41%.

¿Se puede usar IronOCR para idiomas distintos al inglés al extraer subtítulos?

Sí, IronOCR soporta más de 150 idiomas, lo que le permite extraer subtítulos de videos en varios idiomas con precisión.

¿Cuáles son los requisitos previos para seguir el tutorial de OCR de subtítulos en C#?

El tutorial requiere conocimientos básicos de programación en C# y la capacidad de usar Visual Studio para instalar la biblioteca IronOCR a través del Administrador de Paquetes NuGet.

¿Cómo maneja IronOCR cuadros de video de baja calidad?

IronOCR incluye funciones para corregir escaneos de baja calidad, mejorando la precisión de la extracción de texto de cuadros de video subóptimos.

¿Qué formatos de salida están disponibles después de extraer subtítulos con IronOCR?

Los subtítulos extraídos se pueden guardar como archivos de texto, datos estructurados o PDFs buscables usando IronOCR.

¿Hay algún costo asociado con el uso de IronOCR para proyectos comerciales?

IronOCR es gratis para fines de desarrollo y ofrece un mes de prueba gratuita para proyectos comerciales. Para uso comercial continuo, se requiere una licencia.

¿Puede integrarse IronOCR con otras bibliotecas para funciones adicionales?

Sí, IronOCR puede integrarse con otras bibliotecas de Iron Software para tareas como manipulación de PDF y raspado web, mejorando su funcionalidad.

Kannaopat Udonpant
Ingeniero de Software
Antes de convertirse en Ingeniero de Software, Kannapat completó un doctorado en Recursos Ambientales de la Universidad de Hokkaido en Japón. Mientras perseguía su grado, Kannapat también se convirtió en miembro del Laboratorio de Robótica de Vehículos, que es parte del Departamento de Ingeniería ...
Leer más