Cómo implementar OCR en proyectos de GitHub de C# con IronOCR
La búsqueda de soluciones de OCR en GitHub suele arrojar documentación fragmentada, configuraciones complejas de Tesseract y proyectos que no se han actualizado en años. Para los desarrolladores de C# que necesitan una extracción de texto fiable de imágenes y archivos PDF, navegar por el ecosistema de repositorios puede llevarles horas que sería mejor dedicar a programar. Muchos proyectos de reconocimiento óptico de caracteres de código abierto requieren la gestión manual de archivos binarios, la descarga de archivos tessdata y la resolución de problemas específicos de cada plataforma.
Este tutorial muestra cómo implementar la funcionalidad OCR en proyectos de C# utilizando la biblioteca IronOCR, una biblioteca gestionada que elimina la sobrecarga de configuración habitual en los envoltorios Tesseract sin procesar. Ya sea para crear flujos de procesamiento de documentos o para añadir reconocimiento de texto a aplicaciones existentes, esta guía ofrece ejemplos de código funcional listos para cualquier proyecto de OCR en C# en GitHub.
¿Cómo empezar a utilizar IronOCR?
IronOCR proporciona una biblioteca .NET gestionada distribuida a través de NuGet, lo que facilita su integración en cualquier repositorio de GitHub. A diferencia de los envoltorios OCR de código abierto de Tesseract, que requieren la gestión manual de los binarios y la configuración de tessdata, IronOCR gestiona estas dependencias internamente y funciona de forma inmediata en Windows, Linux y macOS.
La biblioteca mantiene repositorios de ejemplos oficiales en GitHub que los desarrolladores pueden clonar y consultar. Estos ejemplos muestran implementaciones reales, como la conversión de imagen a texto, la compatibilidad con varios idiomas y el procesamiento de PDF. Los colaboradores pueden probar las funciones inmediatamente después de clonar el repositorio sin necesidad de ninguna configuración adicional.
Para empezar en Visual Studio, instale IronOCR a través del gestor de paquetes NuGet:
Install-Package IronOcr

Una vez instalado, este paquete único incluye todo lo necesario para las operaciones de OCR. La biblioteca es compatible con .NET Framework 4.6.2+, .NET Core y .NET 5 a 10 para garantizar la máxima compatibilidad con todo tipo de proyectos.
¿Cómo se extrae texto de formatos de imagen en C#?
El siguiente ejemplo demuestra la extracción básica de texto usando la clase IronTesseract de IronOCR. Este motor de OCR lee varios formatos de imagen, incluidos PNG, JPG, JPEG, BMP, GIF y TIFF:
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load and process an image
using var input = new OcrInput("document-scan.png");
// Perform OCR and retrieve results
var result = ocr.Read(input);
// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
using IronOcr;
// Initialize the OCR engine
var ocr = new IronTesseract();
// Load and process an image
using var input = new OcrInput("document-scan.png");
// Perform OCR and retrieve results
var result = ocr.Read(input);
// Output the extracted text to console
Console.WriteLine($"Extracted Text:\n{result.Text}");
Console.WriteLine($"Confidence: {result.Confidence}%");
Imports IronOcr
' Initialize the OCR engine
Dim ocr As New IronTesseract()
' Load and process an image
Using input As New OcrInput("document-scan.png")
' Perform OCR and retrieve results
Dim result = ocr.Read(input)
' Output the extracted text to console
Console.WriteLine($"Extracted Text:{vbCrLf}{result.Text}")
Console.WriteLine($"Confidence: {result.Confidence}%")
End Using
La clase IronTesseract sirve como el motor OCR principal, construido sobre una implementación optimizada de Tesseract 5. Después de crear una instancia, el objeto OcrInput carga la imagen objetivo desde el disco, una URL o una matriz de bytes. El método Read procesa la entrada y devuelve un OcrResult que contiene el texto plano extraído junto con un porcentaje de confianza que indica la precisión del reconocimiento. Los valores de confianza más altos (por encima del 90%) suelen indicar documentos fuente limpios y bien formateados.
El objeto OcrResult proporciona acceso estructurado al contenido reconocido. Además del texto sin formato, los desarrolladores pueden acceder a palabras, líneas, párrafos y caracteres individuales, junto con sus posiciones y puntuaciones de confianza. Cada Word incluye coordenadas del rectángulo delimitador, lo que lo hace valioso para aplicaciones que requieren datos de ubicación de texto precisos, como anotación de documentos o extracción de campos de formularios.
Entrada

Resultado

IronOCR también admite la carga de imágenes desde flujos y matrices de bytes, lo cual resulta especialmente útil en aplicaciones web que reciben cargas de archivos. Esto significa que el procesamiento OCR puede realizarse íntegramente en memoria sin escribir archivos temporales en el disco, lo que reduce la sobrecarga de entrada-salida en entornos de alto rendimiento.

¿Cómo mejora el preprocesamiento de imágenes la precisión del reconocimiento óptico de caracteres?
Los documentos escaneados suelen llegar torcidos, con ruido o con resoluciones que no son las óptimas. IronOCR incluye filtros de preprocesamiento integrados que corrigen estos problemas antes de que el motor OCR procese la imagen:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");
// Apply preprocessing filters to enhance scan quality
input.Deskew(); // Straighten rotated images
input.DeNoise(); // Remove digital artifacts
input.EnhanceResolution(225); // Optimize DPI for OCR
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("skewed-receipt.jpg");
// Apply preprocessing filters to enhance scan quality
input.Deskew(); // Straighten rotated images
input.DeNoise(); // Remove digital artifacts
input.EnhanceResolution(225); // Optimize DPI for OCR
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput("skewed-receipt.jpg")
' Apply preprocessing filters to enhance scan quality
input.Deskew() ' Straighten rotated images
input.DeNoise() ' Remove digital artifacts
input.EnhanceResolution(225) ' Optimize DPI for OCR
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
El método Deskew detecta y corrige automáticamente la rotación de la imagen hasta 15 grados, manejando el caso común de páginas colocadas ligeramente descentradas en un escáner. El filtro DeNoise elimina manchas y artefactos comunes en documentos fotografiados o escaneos antiguos. EnhanceResolution aumenta la escala de imágenes de baja DPI al rango de 200-300 DPI, que es óptimo para la precisión del reconocimiento óptico de caracteres.
Estos filtros se pueden encadenar y ejecutarse íntegramente en memoria sin necesidad de archivos temporales. En muchos casos, aplicar varias pasadas de preprocesamiento puede mejorar sustancialmente los resultados del reconocimiento de texto en documentos con graves problemas de calidad, como tinta descolorida, ruido de fondo o distorsión de la cámara. La mejora es más notable en documentos escaneados a menos de 150 ppp o en fotografías tomadas en condiciones de iluminación irregulares.
¿Cómo ayuda el recorte de la zona de interés al rendimiento?
Para documentos donde solo una parte de la imagen contiene texto relevante, definir una región de recorte reduce tanto el tiempo de procesamiento como los posibles falsos positivos del ruido de fondo:
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");
// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;
var ocr = new IronTesseract();
using var input = new OcrInput("invoice.png");
// Define crop region (x, y, width, height in pixels)
var cropArea = new CropRectangle(50, 100, 600, 300);
input.AddRegion(cropArea);
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput("invoice.png")
' Define crop region (x, y, width, height in pixels)
Dim cropArea As New CropRectangle(50, 100, 600, 300)
input.AddRegion(cropArea)
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Dirigirse a una región específica resulta especialmente valioso al procesar documentos estructurados, como facturas o formularios, en los que los campos de texto ocupan posiciones conocidas. Este enfoque puede reducir el tiempo de procesamiento del OCR entre un 40 % y un 70 % en comparación con el análisis de la imagen completa, dependiendo de la cantidad de contenido irrelevante que haya en la imagen.
¿Se pueden extraer códigos de barras y códigos QR junto con texto?
IronOCR puede reconocer texto y escanear BarCodes simultáneamente dentro del mismo documento. Esta doble funcionalidad resulta muy útil para procesar facturas, etiquetas de envío y documentos de inventario:
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);
// Access extracted text
Console.WriteLine($"Text: {result.Text}");
// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
using IronOcr;
var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true; // Enable barcode detection
using var input = new OcrInput("shipping-label.png");
var result = ocr.Read(input);
// Access extracted text
Console.WriteLine($"Text: {result.Text}");
// Access any barcodes found in the image
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}");
}
Imports IronOcr
Dim ocr = New IronTesseract()
ocr.Configuration.ReadBarCodes = True ' Enable barcode detection
Using input As New OcrInput("shipping-label.png")
Dim result = ocr.Read(input)
' Access extracted text
Console.WriteLine($"Text: {result.Text}")
' Access any barcodes found in the image
For Each barcode In result.Barcodes
Console.WriteLine($"Barcode ({barcode.Format}): {barcode.Value}")
Next
End Using
Cuando ReadBarCodes se establece en true, la detección de códigos de barras se activa sin afectar significativamente el tiempo de procesamiento. La colección Barcodes en el resultado contiene el valor y el tipo de formato para cada código de barras detectado. Los formatos compatibles incluyen códigos QR, Code 128, EAN-13, UPC, Data Matrix y PDF417. Esta doble capacidad elimina la necesidad de utilizar bibliotecas de escaneo de BarCodes independientes al procesar documentos que contienen tanto texto legible por el ser humano como códigos legibles por máquina.
Entrada

Resultado

En el caso de las aplicaciones de almacén y logística, la combinación de la extracción de texto y BarCodes en una sola pasada reduce las llamadas a la API y simplifica la arquitectura de la aplicación. Una sola operación Read devuelve todos los datos reconocibles del documento, ya sea que esos datos sean texto impreso, escritura a mano o códigos legibles por máquina. La propiedad OcrResult.Barcodes expone una colección tipada, por lo que el código a continuación puede iterar resultados sin lógica de análisis específica del formato.
¿Cómo generar archivos PDF con capacidad de búsqueda a partir de imágenes escaneadas?
La conversión de documentos escaneados a archivos PDF con capacidad de búsqueda permite seleccionar y copiar texto, así como realizar búsquedas de texto completo dentro de los sistemas de gestión de documentos. Se trabaja con varios formatos de imagen como entrada:
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);
// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
using IronOcr;
var ocr = new IronTesseract();
using var input = new OcrInput("scanned-contract.tiff");
var result = ocr.Read(input);
// Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput("scanned-contract.tiff")
Dim result = ocr.Read(input)
' Export as searchable PDF with invisible text layer
result.SaveAsSearchablePdf("contract-searchable.pdf")
End Using
El método SaveAsSearchablePdf incrusta una capa de texto invisible que coincide con el contenido reconocido, preservando la apariencia original del documento mientras permite operaciones de texto. Esto da como resultado documentos aptos para sistemas de archivo y de gestión documental Enterprise. IronOCR también soporta la exportación de resultados como HTML o JSON para la integración con sistemas descendentes.
En el caso de documentos de varias páginas, IronOCR procesa cada página por separado y agrupa el resultado en un único archivo. Los archivos TIFF con varios fotogramas se gestionan automáticamente, lo que facilita la conversión por lotes de archivos de documentos escaneados. El PDF resultante conserva el diseño visual del escaneo original, mientras que la capa de texto incrustada permite realizar búsquedas completas en cada página en cualquier visor de PDF o plataforma de gestión de documentos.
¿Cómo se utiliza IronOCR en aplicaciones multilingües?
IronOCR admite más de 125 idiomas, entre los que se incluyen inglés, español, francés, alemán, chino, japonés, árabe y muchos otros. Los paquetes de idiomas se instalan a través de NuGet como paquetes independientes, lo que mantiene la biblioteca principal ligera:
using IronOcr;
// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
// Install-Package IronOcr.Languages.French
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.French;
using var input = new OcrInput("french-document.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
' Install-Package IronOcr.Languages.French
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.French
Using input As New OcrInput("french-document.png")
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Para documentos que contengan varios idiomas en la misma página, IronOCR admite la carga simultánea de varios modelos de idioma. Esto es relevante para aplicaciones internacionalizadas que procesan documentos de múltiples regiones sin necesidad de clasificar previamente los archivos por idioma. Cada paquete de idioma se mantiene junto con la biblioteca principal y admite las mismas capacidades de preprocesamiento y salida.
¿Cuáles son las mejores prácticas para el OCR en proyectos de GitHub?
A la hora de gestionar proyectos de OCR en GitHub, hay algunas decisiones organizativas que mejoran la experiencia de los colaboradores y la salud del proyecto a largo plazo. Estas prácticas se aplican tanto si estás creando un pequeño script de utilidad como un gran servicio de procesamiento de documentos para Enterprise.
Utiliza Git LFS para imágenes de prueba de gran tamaño a fin de evitar que el repositorio se sature. Los activos binarios en el historial estándar de Git aumentan los tiempos de clonación y los costes de almacenamiento, especialmente cuando los conjuntos de datos de prueba incluyen escaneos de alta resolución. Almacena las claves de licencia en variables de entorno o en GitHub Secrets, nunca en código C# confirmado; consulte la guía de configuración de claves de licencia para obtener instrucciones de configuración.
Incluya imágenes de muestra en una carpeta test-data dedicada para que los colaboradores puedan verificar la funcionalidad de OCR sin tener que buscar sus propios documentos. Documenta los formatos de imagen compatibles y los requisitos de versión de .NET en los archivos README para reducir las consultas iniciales. Compila y ejecuta pruebas en pipelines de CI utilizando GitHub Actions para confirmar que la biblioteca funciona correctamente en todos los entornos de destino.
Para los flujos de trabajo de GitHub Actions, IronOCR se ejecuta en entornos contenedorizados tanto en ejecutores Windows como Linux. Consulte la guía de implementación para Linux para obtener detalles de configuración al dirigirse a Ubuntu u otros corredores no-Windows.
¿Cuales son tus próximos pasos?
IronOCR aporta un reconocimiento de texto fiable a los proyectos de C# en GitHub a través de una biblioteca distribuida por NuGet que gestiona la configuración de Tesseract, el preprocesamiento, la detección de BarCodes y la compatibilidad multilingüe sin dependencias binarias externas. Los ejemplos de código de esta guía abarcan los casos de uso principales: extracción básica de texto, preprocesamiento de imágenes, escaneo de BarCode, creación de PDF con capacidad de búsqueda y procesamiento multilingüe.
Para explorar el conjunto completo de funciones, inicia una prueba gratuita sin compromiso de tiempo ni necesidad de tarjeta de crédito. Cuando esté listo para la implementación en producción, revise las opciones de licencia que abarcan desde desarrolladores individuales hasta equipos empresariales.
Recursos relacionados para ampliar tus conocimientos:
- Cómo leer texto de una imagen en C#
- Tutorial de Tesseract OCR en C#
- Repositorio de ejemplos de IronOCR en GitHub

Preguntas Frecuentes
¿Qué es IronOCR?
IronOCR es una biblioteca de OCR .NET para C# que extrae texto de imágenes y archivos PDF mediante un motor Tesseract 5 optimizado. Se instala mediante NuGet y gestiona las dependencias binarias internamente, sin necesidad de configuración manual de tessdata.
¿Cómo instalo IronOCR en un proyecto C#?
Ejecute «Install-Package IronOCR» en la consola del Administrador de paquetes NuGet de Visual Studio o use la interfaz del Administrador de paquetes NuGet para buscar IronOCR. El paquete incluye todos los binarios necesarios para Windows, Linux y macOS.
¿ IronOCR funciona en Linux para GitHub Actions?
Sí, IronOCR es compatible con ejecutores de Linux en GitHub Actions. Consulta la guía de implementación de Linux en https://ironsoftware.com/csharp/ocr/how-to/linux/para conocer las dependencias de los paquetes necesarios en Ubuntu y otras distribuciones.
¿Puede IronOCR leer códigos de barras y códigos QR?
Sí. Configure ocr.Configuration.ReadBarCodes como true antes de ejecutar Read(). La colección OcrResult.Barcodes contiene el valor y el tipo de formato de cada código detectado, compatible con QR, Code 128, EAN-13, UPC, Data Matrix y PDF417.
¿Cómo puedo generar un PDF con capacidad de búsqueda a partir de una imagen escaneada?
Tras llamar a ocr.Read(input), utilice result.SaveAsSearchablePdf("output.pdf") para crear un PDF con una capa de texto invisible sobre el escaneo original. El resultado es adecuado para sistemas de archivo y gestión documental empresarial.
¿ IronOCR admite otros idiomas además del inglés?
Sí. IronOCR admite más de 125 idiomas mediante paquetes de idioma NuGet dedicados. Instale el paquete de idioma (por ejemplo, Install-Package IronOcr.Languages.French) y configure ocr.Language = OcrLanguage.French antes del procesamiento.
¿Cómo debo almacenar las claves de licencia de IronOCR en un repositorio de GitHub ?
Almacena las claves de licencia en GitHub Secrets e inyéctalas como variables de entorno en tu flujo de trabajo de GitHub Actions. Nunca confirmes las cadenas de claves de licencia directamente en código C# ni en archivos de configuración de aplicaciones.
¿Qué formatos de imagen soporta IronOCR?
IronOCR admite PNG, JPG, JPEG, BMP, GIF, TIFF (incluidos los multifotogramas), PDF y otros formatos comunes. Las imágenes se pueden cargar desde rutas de archivo, URL, secuencias o matrices de bytes.



