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
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";
Imports IronOcr
' Apply license key before any OCR calls (production only)
IronOcr.License.LicenseKey = "YOUR-LICENSE-KEY"
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 principal de OCR incluye 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);
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.LoadImage("sample-document.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
Resultado del reconocimiento óptico de caracteres
IronTesseract envuelve el motor de Tesseract 5 con valores predeterminados .NET-friendly y gestión automática de modelos. OcrInput.LoadImage acepta 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 sin formato con todos los caracteres reconocidos unidos por nuevas líneas. Para un acceso más completo (cuadros delimitadores de palabras, puntuaciones de confianza, texto por párrafo), navegue por 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áginaresult.Words[n].Textyresult.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 hilo de la interfaz de usuario en aplicaciones web o de escritorio.
¿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 maneja con LoadImageFrames, lo que le permite elegir exactamente qué marcos (páginas) procesar -- útil cuando sólo necesita 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);
}
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim pageIndices As Integer() = {0, 1, 2}
input.LoadImageFrames("scanned-documents.tiff", pageIndices)
' Correct skew and remove noise before reading
input.Deskew()
input.DeNoise()
Dim result As OcrResult = ocr.Read(input)
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber}:")
Console.WriteLine(page.Text)
Next
End Using
SalidaOCR de un archivo 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 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 fuente difícil:
input.Sharpen()-- aumenta el contraste de los bordes de las imágenes borrosasinput.Binarize()-- convierte a blanco y negro para documentos con calidad de faxinput.Scale(200)-- aumenta la escala de imágenes pequeñas para separar mejor los caracteresinput.Rotate(90)-- corrige orientaciones de documentos girados
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
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);
Imports IronOcr
Imports IronOcr.Languages
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.German
' For bilingual documents (e.g. Canadian forms, EU directives)
ocr.AddSecondaryLanguage(OcrLanguage.French)
Using input As New OcrInput()
input.LoadImage("german-invoice.png")
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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 lingüísticos 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}");
}
Imports IronOcr
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
Try
Using input As New OcrInput()
input.LoadImage("document.png")
input.DeNoise()
input.Deskew()
Dim result As OcrResult = ocr.Read(input)
If result.Text.Length > 0 Then
Console.WriteLine("Recognised text:")
Console.WriteLine(result.Text)
Else
Console.WriteLine("No text was detected in the image.")
End If
End Using
Catch ex As Exception
Console.WriteLine($"OCR error: {ex.Message}")
End Try
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 columna, varias columnas y una sola palabraocr.Configuration.ReadBarCodes = false-- desactiva la detección de códigos de barras si está procesando documentos de sólo texto y desea un rendimiento más rápidoocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5-- garantiza el uso del 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);
Imports IronOcr
Imports IronSoftware.Drawing
Dim ocr As New IronTesseract()
Using input As New OcrInput()
Dim region As New CropRectangle(x:=50, y:=200, width:=600, height:=100)
input.LoadImage("form.png", region)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
End Using
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}");
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
input.Title = "Quarterly Report Q1 2026"
input.LoadImage("page1.png")
input.LoadImage("page2.png")
input.LoadImage("page3.png")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable-output.pdf")
Console.WriteLine("Searchable PDF created.")
Console.WriteLine($"Pages processed: {result.Pages.Count}")
End Using
Documento PDF de salida con capacidad de búsqueda
SaveAsSearchablePdf escribe un archivo compatible con PDF/A en el que cada palabra reconocida se coloca en las coordenadas exactas de 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 los visores de documentos basados en web o los procesos de PLN, 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.
Otros formatos de salida disponibles en OcrResult:
result.SaveAsHocrFile("output.hocr")-- hOCR XML con datos posicionalesresult.ToXDocument()-- XDocument consultable mediante LINQ para procesamiento programáticoresult.Pages[0].Text-- texto sin formato por página para streaming pipelines
Para las aplicaciones que ya trabajan con IronPDF, puede canalizar OcrResult directamente en los flujos de trabajo de generación de PDF, combinando la extracción de 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}");
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
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 para .NET?
Los desarrolladores que evalúan bibliotecas de OCR para .NET suelen tener en cuenta IronOCR, Tesseract.NET y servicios en la nube como Google Cloud Vision o Visión por computadora de Azure. La siguiente tabla resume las diferencias clave:
| Criterio | IronOCR | Tesseract.NET | Visión por computadora de Azure |
|---|---|---|---|
| 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. Visión por computadora de Azure 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:
- Página principal de la documentación de IronOCR: referencia completa de la API y guías de características
- Tutorial de filtros de imagen: guía detallada de todos los filtros de preprocesamiento
- Guía de lectura de BarCodes: códigos QR y BarCodes lineales junto con texto
- Guía práctica de OCR regional: reconocimiento basado en recortes para formularios y documentos de identidad
- Referencia de idiomas: lista completa de más de 125 idiomas compatibles
- Referencia de la API: todas las clases, métodos y propiedades
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.
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.



