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.
Cómo realizar subtítulos con reconocimiento óptico de caracteres (OCR) en C#
- Instalar la biblioteca C# para realizar OCR en subtítulos
- Importar la imagen con subtítulos a una nueva instancia
OcrInput - Preprocesar las imágenes aplicando los filtros seleccionados
- Especifique la ubicación de los subtítulos en la imagen para mejorar el rendimiento y la precisión del OCR
- Exportar el texto recuperado como archivo de texto
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.
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.
Instalando IronOCR dentro de Visual Studio
Aparecerá la siguiente ventana.
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.
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.
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;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);
}El código anterior funciona así:
- Inicializar un objeto
IronTesseract. Creará una instancia predeterminada deIronTesseract. - Crear un nuevo objeto
OcrInputpopulado con un archivo de imagen de entrada o documento PDF.OcrInputes 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. - Leer un texto de un objeto de entrada de OCR y devolver un objeto de resultado de OCR.
ocr.Readextraerá subtítulos de la captura de pantalla de entrada dada. result.Textdevolverá todo el contenido extraído de la entrada dada.
El programa de muestra produce el siguiente resultado en la consola:
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:
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);
}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");
}result.SaveAsTextFile tomará la ruta de salida como argumento y guardará el archivo en la ruta dada.
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.







