Saltar al pie de página
USANDO IRONOCR

OCR en C# Tutorial de CodeProject: Extraer Texto de Imágenes con IronOCR

El reconocimiento óptico de caracteres (OCR) en C# permite extraer texto legible por máquina de documentos escaneados, archivos de imagen y archivos TIFF dentro de aplicaciones .NET. Con IronOCR, una biblioteca IronOCR nativa de .NET, basta con instalar un paquete NuGet para empezar a leer texto de imágenes con unas pocas líneas de código: sin servicios externos, sin dependencias de tiempo de ejecución y sin tarifas por llamada a la API.

Comienza tu prueba gratuita de IronOCR para seguir los ejemplos de código que se muestran a continuación.

¿Cómo se instala IronOCR en un proyecto .NET?

La forma más rápida de añadir OCR a un proyecto .NET 10 es a través del Gestor de paquetes NuGet. Abre un terminal en el directorio de tu proyecto y ejecuta el comando dotnet CLI, o utiliza la Consola del Administrador de paquetes dentro de Visual Studio:

# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
# .NET CLI
dotnet add package IronOcr

# Package Manager Console
Install-Package IronOcr
SHELL

Tras la instalación, el gestor de paquetes NuGet descarga todos los ensamblados necesarios y configura las referencias automáticamente. IronOCR está destinado a .NET Framework 4.6.2+, .NET Core 3.1+ y .NET 5 hasta .NET 10, por lo que funciona en aplicaciones de consola, servicios ASP.NET Core, aplicaciones WPF y Azure Functions.

No es necesario registrar una clave de licencia para realizar pruebas locales; aparecerá una marca de agua de prueba en el resultado hasta que se aplique una licencia. Añade la directiva using y, cuando estés listo para la producción, pasa tu clave una vez al iniciar:

using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
using IronOcr;

// Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Consulte la página de licencias de IronOCR para obtener información sobre precios y activación.

¿Cómo se extrae texto de un archivo de imagen?

El flujo de trabajo básico del OCR implica tres objetos: IronTesseract (el motor), OcrInput (el contenedor de entrada) y OcrResult (la salida). El ejemplo siguiente lee un archivo PNG e imprime el texto reconocido en la consola.

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("sample-document.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.LoadImage("sample-document.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Resultado del reconocimiento óptico de caracteres

Tutorial de OCR en C# de CodeProject: Extraer texto de imágenes con IronOCR: Imagen 1 - Captura de pantalla del resultado del OCR

IronTesseract integra el motor Tesseract 5 con valores predeterminados compatibles con .NET y gestión automática de modelos. OcrInput.LoadImage admite archivos PNG, JPEG, BMP, GIF, TIFF y WebP, por lo que rara vez es necesario convertir formatos antes de pasar una imagen al motor.

La propiedad OcrResult.Text devuelve una cadena simple de todos los caracteres reconocidos unidos por saltos de línea. Para un acceso más completo (cuadros de delimitación de palabras, puntuaciones de confianza, texto por párrafo), explore las colecciones result.Pages, result.Paragraphs, result.Words y result.Characters.

Propiedades clave que conviene conocer:

  • result.Pages[0].Text -- texto de una sola página
  • result.Words[n].Text y result.Words[n].Confidence -- precisión por palabra (0,0 -- 1,0)
  • result.Pages[0].Paragraphs -- segmentación de párrafos para la extracción estructurada

También puede llamar a ocr.ReadAsync(input) para mantener libre el subproceso de la interfaz de usuario en aplicaciones de escritorio o web.

¿Cómo se procesan los documentos escaneados y los archivos TIFF?

Los archivos TIFF de varias páginas son habituales en los flujos de trabajo de digitalización de documentos. IronOCR los gestiona con LoadImageFrames, lo que te permite elegir exactamente qué fotogramas (páginas) procesar, algo útil cuando solo necesitas un subconjunto de un archivo grande.

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
int[] pageIndices = { 0, 1, 2 };
input.LoadImageFrames("scanned-documents.tiff", pageIndices);

// Correct skew and remove noise before reading
input.Deskew();
input.DeNoise();

OcrResult result = ocr.Read(input);

foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber}:");
    Console.WriteLine(page.Text);
}
$vbLabelText   $csharpLabel

Salida OCR de un archivo TIFF de varias páginas

Tutorial de OCR en C# de CodeProject: Extraer texto de imágenes con IronOCR: Imagen 2 - Salida de OCR de TIFF de varias páginas

Deskew gira la imagen para corregir cualquier inclinación introducida por los escáneres planos. DeNoise elimina las motas y los artefactos JPEG que confunden al motor de Tesseract. Juntos, estos dos filtros de preprocesamiento mejoran significativamente la precisión del reconocimiento en escaneos de baja calidad.

Filtros adicionales OcrInput disponibles para material de origen difícil:

  • input.Sharpen() -- aumenta el contraste de los bordes en imágenes borrosas
  • input.Binarize() -- se convierte a blanco y negro para documentos con calidad de fax
  • input.Scale(200) -- amplía las imágenes pequeñas para mejorar la separación de caracteres
  • input.Rotate(90) -- corrige la orientación girada de los documentos

Consulte la guía de filtros de imagen de IronOCR para obtener una lista completa de las opciones de preprocesamiento y saber cuándo aplicarlas.

¿Cómo se configura la compatibilidad con idiomas para el OCR?

Por defecto, IronOCR lee texto en inglés. Para procesar documentos en otros idiomas, instale el paquete NuGet del idioma correspondiente y establezca la propiedad Language en la instancia IronTesseract.

dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
dotnet add package IronOcr.Languages.German
dotnet add package IronOcr.Languages.French
dotnet add package IronOcr.Languages.Japanese
SHELL

A continuación, configure el motor y, para los documentos bilingües, añada un idioma secundario:

using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronOcr.Languages;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.German;

// For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French);

using var input = new OcrInput();
input.LoadImage("german-invoice.png");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

IronOCR admite más de 125 idiomas, cada uno de ellos distribuido como un paquete NuGet independiente y ligero. Esto mantiene pequeño el binario de producción: solo se incluyen los datos de idioma que tu aplicación realmente necesita. El motor combina modelos de lenguaje primarios y secundarios durante el reconocimiento cuando se llama a AddSecondaryLanguage.

¿Cómo se gestionan los errores de OCR y se mejoran los resultados de reconocimiento?

Las aplicaciones de producción necesitan un manejo de errores en torno al proceso de OCR. Los problemas de calidad de imagen, los archivos que faltan o los formatos no compatibles pueden provocar excepciones. Envolver la llamada en un bloque try/catch te proporciona una ruta de recuperación clara.

using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;

try
{
    using var input = new OcrInput();
    input.LoadImage("document.png");
    input.DeNoise();
    input.Deskew();

    OcrResult result = ocr.Read(input);

    if (result.Text.Length > 0)
    {
        Console.WriteLine("Recognised text:");
        Console.WriteLine(result.Text);
    }
    else
    {
        Console.WriteLine("No text was detected in the image.");
    }
}
catch (Exception ex)
{
    Console.WriteLine($"OCR error: {ex.Message}");
}
$vbLabelText   $csharpLabel

Algunos ajustes adicionales que pueden ayudar cuando la precisión es inferior a la esperada:

  • ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto -- permite a Tesseract elegir automáticamente entre diseños de una sola columna, de varias columnas y de una sola palabra
  • ocr.Configuration.ReadBarCodes = false -- desactiva la detección de BarCodes si se procesan documentos de solo texto y se desea un rendimiento más rápido
  • ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5 -- garantiza que se utilice el motor más rápido disponible

En formularios estructurados donde los campos aparecen en posiciones predecibles, utilice el OCR basado en regiones para leer solo las áreas que importan:

using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;

var ocr = new IronTesseract();

using var input = new OcrInput();
var region = new CropRectangle(x: 50, y: 200, width: 600, height: 100);
input.LoadImage("form.png", region);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
$vbLabelText   $csharpLabel

Limitar el reconocimiento a un rectángulo de recorte reduce el tiempo de procesamiento hasta en un 90 % en imágenes de gran tamaño. Esta técnica es ideal para la extracción de números de factura, la lectura de campos de formularios y el escaneo de documentos de identidad. Hay más detalles disponibles en la guía práctica de OCR de la región.

¿Cómo se crea un PDF con capacidad de búsqueda a partir de texto reconocido?

La conversión de archivos de imágenes escaneadas en archivos PDF con capacidad de búsqueda es uno de los casos de uso más valiosos del OCR. El archivo resultante conserva el aspecto visual original al tiempo que incorpora una capa de texto invisible que los visores de PDF, los motores de búsqueda y los lectores de pantalla pueden indexar.

using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
using IronOcr;

var ocr = new IronTesseract();

using var input = new OcrInput();
input.Title = "Quarterly Report Q1 2026";
input.LoadImage("page1.png");
input.LoadImage("page2.png");
input.LoadImage("page3.png");

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable-output.pdf");

Console.WriteLine("Searchable PDF created.");
Console.WriteLine($"Pages processed: {result.Pages.Count}");
$vbLabelText   $csharpLabel

Documento PDF de salida con capacidad de búsqueda

Tutorial de OCR en C# de CodeProject: Extraer texto de imágenes con IronOCR: Imagen 3 - PDF con capacidad de búsqueda creado a partir de imágenes de entrada

SaveAsSearchablePdf genera un archivo compatible con PDF/A en el que cada palabra reconocida se coloca en las coordenadas exactas en píxeles de la imagen original. Adobe Acrobat, Vista previa en macOS y Foxit Reader admiten la búsqueda de texto completo en estos archivos inmediatamente después de su generación.

Para visores de documentos basados en web o procesos de PLN posteriores, utilice result.SaveAsHocrFile("output.hocr") en su lugar. El formato hOCR es un estándar XML abierto que codifica cuadros delimitadores por palabra junto al texto, lo que permite el resaltado en la búsqueda del lado del cliente y anotaciones de accesibilidad a nivel de palabra.

Formatos de salida adicionales disponibles en OcrResult:

  • result.SaveAsHocrFile("output.hocr") -- hOCR XML con datos posicionales
  • result.ToXDocument() -- XDocument consultable mediante LINQ para el procesamiento mediante programación
  • result.Pages[0].Text -- texto sin formato por página para canalizaciones de streaming

Para las aplicaciones que ya funcionan con IronPDF, puede integrar OcrResult directamente en los flujos de trabajo de generación de PDF, combinando la extracción mediante OCR con la edición de PDF en un único proceso .NET.

¿Cómo se leen los BarCodes junto con el texto?

IronOCR puede leer códigos de barras y códigos QR incrustados en la misma imagen que el texto impreso, lo que elimina la necesidad de ejecutar una biblioteca IronOCR independiente. Habilite la función con una propiedad de configuración:

using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
using IronOcr;

var ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
input.LoadImage("shipping-label.png");

OcrResult result = ocr.Read(input);

Console.WriteLine("Text:");
Console.WriteLine(result.Text);

Console.WriteLine("Barcodes:");
foreach (var barcode in result.Barcodes)
{
    Console.WriteLine($"  {barcode.Format}: {barcode.Value}");
}
$vbLabelText   $csharpLabel

Los formatos de BarCode compatibles incluyen Code 128, Code 39, EAN-13, EAN-8, UPC-A, UPC-E, PDF417, Data Matrix y QR Code. Encontrará todos los detalles en la guía de lectura de BarCodes de IronOCR.

Esta capacidad resulta especialmente útil en aplicaciones de logística, sanidad y Retail, donde las etiquetas de envío, las pulseras de pacientes y las etiquetas de productos contienen tanto texto legible para el ser humano como BarCodes legibles por máquina.

¿Cómo se compara IronOCR con otras opciones de OCR for .NET?

Los desarrolladores que evalúan bibliotecas de OCR for .NET suelen tener en cuenta IronOCR, Tesseract.NET y servicios en la nube como Google Cloud Vision o Azure Computer Vision. La siguiente tabla resume las diferencias clave:

Comparación de las opciones de OCR for .NET según criterios clave para desarrolladores
Criterio IronOCR Tesseract.NET Azure Computer Vision
Despliegue Local o en la nube, sin llamadas externas Local Solo en la nube, requiere conexión a Internet
Instalación Paquete NuGet único Varios paquetes + binarios nativos SDK + suscripción a Azure
Paquetes de idiomas Más de 125 a través de paquetes NuGet Descarga del manual de tessdata Gestionado por Azure
Salida en PDF con capacidad de búsqueda Integrado en una sola llamada de método No incluido No incluido
preprocesamiento de imágenes Más de 12 filtros integrados Se requiere preprocesamiento manual Automático (del lado del servidor)
Modelo de precios Licencia perpetua de pago único Código abierto (Apache 2.0) Facturación por llamada

Tesseract, mantenido por Google como un proyecto de código abierto, es el motor que impulsa tanto IronOCR como Tesseract.NET. IronOCR añade un empaquetado propio de .NET, gestión automática de modelos y las funciones de salida de producción (PDF con capacidad de búsqueda, exportación hOCR) de las que carecen los enlaces Tesseract sin procesar. Azure Computer Vision ofrece una precisión de vanguardia en la nube, pero introduce una latencia de red y unos costes por llamada que no son adecuados para flujos de trabajo de gran volumen o sin conexión.

En los casos en que las normativas de privacidad de datos prohíben el envío de documentos a servicios externos —historiales médicos, documentos legales, estados financieros—, una biblioteca local como IronOCR es la opción adecuada.

¿Cuales son tus próximos pasos?

Ahora dispone de los componentes básicos para añadir OCR a cualquier aplicación .NET 10: instalación a través de NuGet, extracción básica de imagen a texto, procesamiento de TIFF de varias páginas, configuración de idioma, gestión de errores, lectura basada en regiones, detección de BarCode y generación de PDF con capacidad de búsqueda.

Para profundizar, explore estos recursos de IronOCR:

Si tiene preguntas sobre licencias o desea implementar IronOCR en un entorno de producción, visite la página de licencias de IronOCR. Una licencia de prueba gratuita elimina las marcas de agua de los resultados durante el periodo de evaluación, y el equipo de asistencia de Iron Software está disponible para resolver dudas técnicas en cualquier nivel.

Empiece con IronOCR ahora.
green arrow pointer

Preguntas Frecuentes

¿Qué es el OCR y en qué beneficia a los desarrolladores de C#?

El OCR, o reconocimiento óptico de caracteres, convierte documentos como documentos escaneados, archivos PDF o imágenes en datos editables y con capacidad de búsqueda. Para los desarrolladores de C#, el OCR simplifica el procesamiento de documentos al permitir que las aplicaciones extraigan texto de imágenes y documentos escaneados, lo que mejora la accesibilidad y la usabilidad de los datos.

¿Cómo implementar OCR en un proyecto C#?

Para implementar el OCR en un proyecto de C#, instale el paquete NuGet IronOCR , cree una instancia de IronTesseract, cargue una imagen en OcrInput y llame al método Read. El resultado devuelto contiene el texto extraído y los datos de posicionamiento por palabra.

¿Qué formatos de imagen son compatibles con IronOCR?

IronOCR admite los formatos de imagen PNG, JPEG, BMP, GIF, TIFF y WebP. Esto le permite trabajar con los tipos de imagen más comunes sin tener que convertir los archivos antes de procesarlos.

¿Puede IronOCR manejar archivos TIFF de varias páginas?

Sí, IronOCR puede procesar archivos TIFF de varias páginas. Utilice LoadImageFrames con una matriz de índices de página para procesar fotogramas específicos e itere result.Pages para acceder al texto por página.

¿Es posible extraer texto de un área específica de una imagen utilizando IronOCR?

Sí, pase un CropRectangle a LoadImage para restringir el OCR a una región definida. Esto reduce significativamente el tiempo de procesamiento y resulta útil para extraer campos específicos de formularios, facturas y documentos de identidad.

¿Es IronOCR compatible con diferentes idiomas para la extracción de texto?

IronOCR admite más de 125 idiomas, cada uno disponible como un paquete NuGet independiente. Configure la propiedad Language en IronTesseract y llame a AddSecondaryLanguage para documentos bilingües.

¿Cuáles son las ventajas de IronOCR en comparación con el Tesseract .NET sin formato?

IronOCR agrega empaquetado idiomático .NET, administración automática de modelos de lenguaje, filtros de preprocesamiento de imágenes integrados, salida PDF con capacidad de búsqueda y exportación hOCR sobre el motor Tesseract, todo accesible a través de un único paquete NuGet sin administración binaria nativa manual.

¿Cómo mejora IronOCR la precisión del reconocimiento de texto?

IronOCR proporciona filtros de preprocesamiento (corrección de distorsión, eliminación de ruido, nitidez, binarización, escala y rotación) que corrigen defectos de escaneo comunes antes de que el motor Tesseract procese la imagen, lo que mejora la precisión del reconocimiento en material de origen de baja calidad.

¿Puede IronOCR leer códigos de barras y códigos QR?

Sí, configure ocr.Configuration.ReadBarCodes como true para detectar códigos de barras y códigos QR junto con texto en la misma imagen. Los resultados están disponibles en OcrResult.Barcodes con el tipo de formato y el valor decodificado.

¿Cuáles son los casos de uso comunes de IronOCR en aplicaciones C#?

IronOCR se utiliza en sistemas de gestión de documentos, extracción de datos de facturas y recibos, generación de PDF con capacidad de búsqueda a partir de archivos escaneados, lectura de campos de formulario, procesamiento de etiquetas de envío, digitalización de registros sanitarios y herramientas de accesibilidad.

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

Equipo de soporte de Iron

Estamos disponibles online las 24 horas, 5 días a la semana.
Chat
Email
Llámame