IRONSOFTWAREHOME
USANDO IRONOCR

.NET OCR SDK: una biblioteca de reconocimiento de texto para C#

Kannaopat Udonpant
Kannapat Udonpant
Updated: 21 de abril de 2026

Un SDK de OCR para .NET es un kit de desarrollo de software que permite a las aplicaciones de C# y .NET extraer texto de imágenes, archivos PDF escaneados y otros formatos de documento mediante programación. IronOCR es un SDK de OCR for .NET listo para producción que integra un motor Tesseract 5 optimizado con filtros de preprocesamiento, lectura de BarCodes, salida en PDF con capacidad de búsqueda y compatibilidad con más de 125 idiomas, todo ello accesible a través de una API de C# sencilla que funciona en Windows, Linux, macOS y plataformas en la nube.

¿Por qué IronOCR es el SDK de OCR for .NET adecuado para su proyecto?

Crear un sistema de reconocimiento de texto desde cero implica gestionar procesos de preprocesamiento de imágenes, archivos de datos lingüísticos, modelos de subprocesos y análisis de resultados: meses de trabajo antes de poder extraer la primera palabra. IronOCR elimina esa sobrecarga al ofrecer un motor probado en la práctica que tu equipo puede integrar en un proyecto en cuestión de minutos.

Capacidades clave que la diferencian de los enlaces Tesseract sin procesar:

  • Reconocimiento de más de 125 idiomas y alfabetos, incluido el texto manuscrito
  • Filtros integrados: eliminación de ruido, corrección de inclinación, binarización, mejora de la resolución y corrección del contraste
  • Detección de BarCodes y códigos QR en una misma lectura
  • Generación de PDF con capacidad de búsqueda y capas de texto invisibles para flujos de trabajo de archivo
  • Procesamiento asíncrono y en paralelo por lotes para pipelines de alto rendimiento
  • OCR zonal para seleccionar regiones específicas de la página y reducir el tiempo de procesamiento
  • Compatibilidad multiplataforma con Windows, Linux, macOS, Docker y Azure

Según la documentación del proyecto Tesseract OCR, Tesseract sin modificar requiere una configuración manual de los paquetes de idiomas, los ajustes de DPI y los modos de salida. IronOCR se encarga de todo esto automáticamente, lo que te permite centrarte en el significado del texto extraído en lugar de en cómo extraerlo.

¿En qué se diferencia IronOCR de Tesseract sin procesar?

Tesseract en bruto a través de un contenedor P/Invoke o el paquete NuGet Tesseract te deja la responsabilidad de: descargar y colocar los archivos de idioma tessdata, seleccionar el modo de segmentación de página correcto, manejar la división de TIFF y PDF de múltiples páginas por ti mismo, y configurar el enhebrado si deseas procesamiento paralelo. Ninguno de esos detalles es exclusivo de su problema empresarial.

IronOCR se encarga de toda esa infraestructura. Obtienes una interfaz API tipada, gestión automática de datos, división y recombinación de PDF integrada, y un motor seguro para subprocesos que puedes reutilizar en todas las solicitudes. La contrapartida es una licencia de pago para uso en producción; la página de licencias muestra los niveles de precios actuales, incluida una licencia de desarrollo gratuita.

Para los equipos que necesitan dependencias exclusivamente de código abierto, Tesseract Plus sin procesar más un preprocesamiento personalizado es una opción viable. Para los equipos que necesitan implementar un OCR fiable rápidamente, IronOCR reduce la superficie de integración a unas pocas líneas de C#.

¿Cómo se instala el SDK de IronOCR .NET?

La instalación se realiza a través de NuGet, el gestor de paquetes estándar de .NET Standard. Ejecuta el siguiente comando en el directorio de tu proyecto:

PM > Install-Package IronOcr

Para usuarios de Visual Studio, busca IronOcr en la GUI del Administrador de Paquetes de NuGet e instálalo desde allí. Para ver todas las opciones de instalación, incluidas las referencias manuales a DLL, consulte la documentación de instalación de IronOCR.

Después de la instalación, añade la clave de licencia al inicio de tu aplicación o appsettings.json. Puedes iniciar una prueba gratuita para obtener una clave de prueba que desbloquee todas las funciones durante la evaluación.

Verificación de la instalación

Una rápida comprobación tras la instalación confirma que todo está conectado correctamente. Crea una aplicación de consola para .NET 10:

using IronOcr;

// Minimal smoke test -- reads a single image and prints extracted text
var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("sample.png");
var result = ocr.Read(input);
Console.WriteLine(result.Text);

Si aparece texto en la consola, significa que el SDK está instalado y que la clave de licencia es válida. Ya estás listo para crear flujos de trabajo de producción.

¿Cómo extraer texto de imágenes y PDFs en C#?

El patrón de extracción principal es consistente en todos los tipos de entrada. Creas una instancia de IronTesseract, cargas contenido en un objeto OcrInput y llamas a Read(). IronOCR detecta automáticamente el formato de archivo a partir de la extensión, por lo que la misma ruta de código gestiona archivos JPEG, PNG, TIFF, BMP y PDF de varias páginas.

using IronOcr;

// Reusable OCR service encapsulating the IronTesseract engine
public class OcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ExtractText(string filePath)
    {
        using var input = new OcrInput();

        // LoadPdf for PDF files; LoadImage for raster formats
        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        return _ocr.Read(input).Text;
    }

    public async Task<string> ExtractTextAsync(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        var result = await _ocr.ReadAsync(input);
        return result.Text;
    }
}

Punto de entrada de primer nivel para utilizar el servicio:

using IronOcr;

var service = new OcrService();
string text = await service.ExtractTextAsync("invoice.pdf");
Console.WriteLine(text);

La instancia IronTesseract es segura para hilos y está diseñada para su reutilización. Cree un objeto una sola vez al iniciar la aplicación (por ejemplo, mediante la inyección de dependencias en .NET Core) en lugar de instanciarlo por cada solicitud.

Para PDFs de múltiples páginas, result.Pages te ofrece acceso por página al texto, puntaje de confianza y cuadros limitantes. Consulte la guía de OCR para PDF de varias páginas para obtener detalles sobre la iteración página por página.

¿Cómo se mejora la precisión del OCR con filtros de preprocesamiento?

Los escaneos sin procesar procedentes de escáneres planos, cámaras de teléfonos inteligentes o máquinas de fax suelen adolecer de ruido, rotación, bajo contraste y resolución insuficiente. El proceso de corrección de la calidad de imagen de IronOCR aborda cada problema con filtros específicos que se encadenan antes de la llamada de lectura.

using IronOcr;

public class AccuracyOptimizedOcr
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();

        if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(filePath);
        else
            input.LoadImage(filePath);

        // Chain preprocessing filters in order of operation
        input.DeNoise();              // Remove scan artifacts and speckling
        input.Deskew();               // Correct page tilt up to 35 degrees
        input.Scale(150);             // Enlarge small text for better recognition
        input.Binarize();             // Convert to black/white for cleaner edges
        input.EnhanceResolution(300); // Sharpen blurry or low-DPI input

        var result = _ocr.Read(input);

        // Confidence below 70 often signals a preprocessing mismatch
        if (result.Confidence < 70)
            Console.WriteLine($"Warning: low confidence ({result.Confidence:F1}%)");

        return result.Text;
    }
}

Guía para la selección de filtros:

  • DeNoise() -- úsalo para escaneos con mucho moteado o artefactos de compresión
  • Deskew() -- úsalo cuando los documentos son fotografiados en un ángulo; Véase la detección de rotación de página para la detección automática
  • Scale() -- úsalo para impresiones pequeñas o entradas inferiores a 150 DPI; Los valores de 150-200 suelen dar los mejores resultados
  • Binarize() -- úsalo para fondos coloreados o con gradientes; convierte la imagen a blanco y negro estricto
  • EnhanceResolution() -- úsalo para texto borroso o de bajo contraste; apunta a 300 ppp como el punto óptimo de Tesseract

Las investigaciones publicadas en la revista International Journal on Document Analysis and Recognition demuestran sistemáticamente que la binarización y la corrección de la inclinación son los dos pasos de preprocesamiento de mayor impacto para mejorar las tasas de reconocimiento de caracteres. Aplique ambas como referencia para cualquier proceso de producción.

Filtros de preprocesamiento de IronOCR y sus principales casos de uso
FiltrarProblema resueltoCuándo solicitarlo
DeNoise()Artefactos del escáner, ruido de moteadoCualquier escaneo con escáner plano o fax
Descortar()Inclinación y rotación de la páginaDocumentos fotografiados o desalineados
Escala()Texto pequeño o baja resolución (DPI)Resolución inferior a 150 ppp
Binarize()Fondos de color, degradadosPapel de color o formularios con marca de agua
EnhanceResolution()Desenfoque y bajo contrasteCapturas de cámara y archivos JPEG comprimidos

¿Cómo se crea un canal de procesamiento por lotes en producción?

La extracción de un solo documento es sencilla, pero los escenarios de producción implican cientos o miles de archivos que llegan a colas, carpetas compartidas o almacenamiento en la nube. La API asíncrona y el motor seguro para subprocesos de IronOCR lo hacen adecuado para cargas de trabajo en paralelo.

using IronOcr;
using Microsoft.Extensions.Logging;

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger<ProductionOcrService> _logger;

    public ProductionOcrService(ILogger<ProductionOcrService> logger)
    {
        _logger = logger;
        _ocr = new IronTesseract
        {
            Configuration =
            {
                RenderSearchablePdfsAndHocr = true,
                ReadBarCodes = true
            }
        };
    }

    public async Task<IReadOnlyList<string>> ProcessBatchAsync(
        IEnumerable<string> filePaths,
        int maxDegreeOfParallelism = 4)
    {
        var results = new System.Collections.Concurrent.ConcurrentBag<string>();

        var options = new ParallelOptions
        {
            MaxDegreeOfParallelism = maxDegreeOfParallelism
        };

        await Parallel.ForEachAsync(filePaths, options, async (filePath, ct) =>
        {
            try
            {
                using var input = new OcrInput();

                if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
                    input.LoadPdf(filePath);
                else
                    input.LoadImage(filePath);

                var result = await _ocr.ReadAsync(input);
                results.Add(result.Text);
                _logger.LogInformation("Processed {FilePath} at {Confidence:F1}% confidence",
                    filePath, result.Confidence);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "OCR failed for {FilePath}", filePath);
                results.Add(string.Empty);
            }
        });

        return results.ToList();
    }

    public void CreateSearchablePdf(string inputPath, string outputPath)
    {
        using var input = new OcrInput();

        if (inputPath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(inputPath);
        else
            input.LoadImage(inputPath);

        _ocr.Read(input).SaveAsSearchablePdf(outputPath);
        _logger.LogInformation("Searchable PDF written to {OutputPath}", outputPath);
    }
}

El límite MaxDegreeOfParallelism previene el agotamiento de memoria cuando los archivos son grandes. Un valor de 4 funciona bien en un servidor de cuatro núcleos; Auméntelo solo después de analizar el uso de la memoria. Para implementaciones de Azure Functions o AWS Lambda, ajuste la concurrencia a 1 por instancia de función y escale horizontalmente en su lugar.

CreateSearchablePdf genera un PDF donde la imagen original se conserva como una capa visible y el texto reconocido se incrusta de manera invisible debajo de ella. Esto permite la búsqueda de texto completo en visores de PDF y la indexación por parte de los motores de búsqueda, un requisito habitual en los sistemas de gestión de documentos.

Supervisión de las puntuaciones de confianza en producción

Cada OcrResult expone una propiedad Confidence (0-100) que refleja cuán seguro está el motor respecto al texto reconocido. El seguimiento de esta métrica en su infraestructura de registro le proporciona una señal de alerta temprana cuando la calidad de los documentos se degrada; por ejemplo, si la calibración de un escáner se desvía o si un nuevo proveedor de documentos envía escaneos con un DPI inferior al esperado.

Una estrategia práctica de umbrales: registrar una advertencia con una confianza inferior a 80, activar una pasada de preprocesamiento y reintento por debajo de 70, y marcar los documentos para su revisión humana por debajo de 60. Este enfoque por niveles detecta los problemas de calidad antes de que provoquen una corrupción silenciosa de los datos en los sistemas posteriores.

La documentación de registros de Microsoft .NET cubre los patrones ILogger utilizados en el servicio por lotes arriba para equipos que se integran con el contenedor de DI incorporado de ASP.NET Core.

¿Cómo se extraen datos estructurados de documentos escaneados?

La extracción de texto es el primer paso. El segundo paso consiste en analizar ese texto y convertirlo en campos tipificados sobre los que tu aplicación pueda actuar. Este patrón combina el paso de lectura de IronOCR con Regex de .NET para extraer datos estructurados de facturas, formularios e informes.

using IronOcr;
using System.Text.RegularExpressions;

public record Invoice(
    string? InvoiceNumber,
    DateOnly? Date,
    decimal? TotalAmount,
    string RawText
);

public class InvoiceOcrService
{
    private readonly IronTesseract _ocr = new IronTesseract();

    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();

        if (invoicePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
            input.LoadPdf(invoicePath);
        else
            input.LoadImage(invoicePath);

        input.DeNoise();
        input.Deskew();

        var result = _ocr.Read(input);
        string text = result.Text;

        return new Invoice(
            InvoiceNumber: ExtractInvoiceNumber(text),
            Date: ExtractDate(text),
            TotalAmount: ExtractAmount(text),
            RawText: text
        );
    }

    private static string? ExtractInvoiceNumber(string text)
    {
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)", RegexOptions.IgnoreCase);
        return match.Success ? match.Groups[1].Value : null;
    }

    private static DateOnly? ExtractDate(string text)
    {
        // Numeric format: MM/DD/YYYY
        var numeric = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numeric.Success && DateTime.TryParse(numeric.Groups[1].Value, out var d1))
            return DateOnly.FromDateTime(d1);

        // Written format: January 15, 2025
        var written = Regex.Match(text,
            @"\b(January|February|March|April|May|June|July|August|September|October|November|December)\s+(\d{1,2}),?\s+(\d{4})\b",
            RegexOptions.IgnoreCase);
        if (written.Success && DateTime.TryParse(written.Value, out var d2))
            return DateOnly.FromDateTime(d2);

        return null;
    }

    private static decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        return match.Success && decimal.TryParse(match.Groups[1].Value, out var amt)
            ? amt
            : null;
    }
}

Este enfoque se combina bien con OCR zonal cuando sabe exactamente dónde aparece cada campo en un formulario. Al proporcionar un rectángulo delimitador, se omite el reconocimiento de página completa y se selecciona únicamente la zona que contiene el número de factura o el total, lo que reduce drásticamente el tiempo de procesamiento de los documentos de diseño fijo.

Para escenarios de extracción más avanzados, que incluyen tablas y formularios estructurados, consulte los ejemplos de extracción de datos de IronOCR en el sitio web del producto.

¿Cómo se gestiona el OCR multilingüe en .NET?

Muchas organizaciones procesan documentos en más de un idioma: formularios de importación/exportación, contratos internacionales o envíos multilingües de clientes. IronOCR lo gestiona permitiéndole configurar el paquete de idioma antes de la llamada de lectura.

using IronOcr;

// Configure multi-language recognition
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.EnglishBest;  // Swap for any of 125+ supported languages

// For mixed-language documents, combine language packs
ocr.AddSecondaryLanguage(OcrLanguage.German);

using var input = new OcrInput();
input.LoadPdf("multilingual-contract.pdf");
var result = ocr.Read(input);
Console.WriteLine(result.Text);

La página de compatibilidad lingüística de IronOCR enumera los más de 125 paquetes de idiomas disponibles con instrucciones de descarga. Los paquetes de idiomas se envían como paquetes NuGet (por ejemplo, IronOcr.Languages.German) para que se integren con el mismo flujo de trabajo de gestión de paquetes que ya utilizas.

Para conjuntos de caracteres fuera del alfabeto latino (árabe, chino, japonés, coreano), IronOCR proporciona modelos optimizados que gestionan la dirección del texto de derecha a izquierda y los scripts ideográficos. Consulte la guía de OCR CJK para conocer los detalles de configuración.

¿Cuales son tus próximos pasos?

Ahora dispone de los patrones necesarios para añadir OCR de nivel de producción a cualquier aplicación .NET 10: extracción básica de texto, preprocesamiento para escaneos difíciles, procesamiento por lotes asíncrono, análisis de datos estructurados y compatibilidad con múltiples idiomas.

A partir de aquí, explora estas áreas en función de las necesidades de tu proyecto:

Empiece con la licencia de prueba gratuita para evaluar todas las funciones en sus propios documentos antes de comprometerse con un plan.

NuGetInstalar con NuGet

PM > Install-Package IronOcr

Install IronOCR by running the command above in the NuGet Package Manager Console, or search for the package in the NuGet Package Manager.

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta