Saltar al pie de página
USANDO IRONOCR

Cómo crear un SDK de OCR en .NET con IronOCR

Supongamos que alguna vez hayas necesitado extraer texto de documentos escaneados, PDFs o imágenes. En ese caso, sabes lo complicado que puede ser manejar diferentes formatos de archivo, múltiples idiomas y escaneos de baja calidad. Ahí es donde entra en juego la OCR (reconocimiento óptico de caracteres), convirtiendo imágenes escaneadas y archivos de documento en texto editable con el que puedes trabajar programáticamente.

En esta guía, exploraremos cómo construir un SDK OCR de .NET de alto rendimiento usando IronOCR, mostrándote cómo realizar OCR, extraer datos estructurados y generar PDFs buscables a través de múltiples tipos de documentos. Aprenderás cómo procesar PDFs escaneados, imágenes y otros archivos de texto de una manera rápida, confiable y que se integra sin problemas en aplicaciones .NET en dispositivos de escritorio, web o móviles.

¿Qué hace que IronOCR sea el SDK de OCR .NET ideal?

Construir una biblioteca OCR desde cero requiere meses de desarrollo, preprocesamiento de imágenes y pruebas extensivas. IronOCR elimina este esfuerzo proporcionando un SDK OCR completo de .NET que admite varios formatos e integra sin problemas en aplicaciones .NET.

El SDK maneja la tarea pesada del reconocimiento de texto mientras ofrece características que normalmente solo se encuentran en soluciones empresariales:

  • Alto rendimiento a través de diversos formatos de documentos e imágenes escaneadas
  • Soporte para más de 125 idiomas y reconocimiento de texto manuscrito
  • Binarización adaptativa, información de fuente y soporte de cajas delimitadoras para OCR zonal
  • Capacidad para procesar PDFs escaneados, formatos de imagen y bloques de texto
  • Creación instantánea de documentos buscables con capas de texto ocultas

A diferencia de las implementaciones en bruto de Tesseract, IronOCR funciona inmediatamente en Windows, Linux, macOS, y plataformas en la nube, admitiendo APIs de OCR, reconocimiento asistido por IA, e integración fluida sin configuración adicional.

Introducción a IronOCR

La instalación toma segundos a través del Administrador de Paquetes NuGet. Ejecuta:

Install-Package IronOcr

Para instrucciones detalladas de instalación, consulta la documentación de IronOCR. Una vez instalado, extraer texto de documentos escaneados se vuelve sencillo:

using IronOcr;
public class OcrService
{
    private readonly IronTesseract _ocr;
    public OcrService()
    {
        _ocr = new IronTesseract();
    }
    public string ExtractText(string imagePath)
    {
        using var input = new OcrInput();
        input.LoadImage(imagePath);
        var result = _ocr.Read(input);
        return result.Text;
    }
}
using IronOcr;
public class OcrService
{
    private readonly IronTesseract _ocr;
    public OcrService()
    {
        _ocr = new IronTesseract();
    }
    public string ExtractText(string imagePath)
    {
        using var input = new OcrInput();
        input.LoadImage(imagePath);
        var result = _ocr.Read(input);
        return result.Text;
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este código crea un servicio OCR reutilizable que maneja varios formatos de imagen, incluidos JPEG, PNG, TIFF y BMP, así como documentos PDF y otros formatos de documento, todo de manera automática.

Para probarlo, lo ejecutaremos a través de nuestra clase principal con esta imagen de ejemplo:

class Program
{
    static void Main(string[] args)
    {
        var ocrService = new OcrService();
        string imagePath = "test.png"; // Replace with your image path
        string extractedText = ocrService.ExtractText(imagePath);
        Console.WriteLine(extractedText);
    }
}
class Program
{
    static void Main(string[] args)
    {
        var ocrService = new OcrService();
        string imagePath = "test.png"; // Replace with your image path
        string extractedText = ocrService.ExtractText(imagePath);
        Console.WriteLine(extractedText);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Resultado

Cómo crear un SDK OCR de .NET con IronOCR: Figura 2 - Salida de consola de ejemplo

Desarrollar la funcionalidad básica de OCR

Las aplicaciones del mundo real necesitan más que una extracción básica de texto. IronOCR ofrece capacidades completas de procesamiento de documentos:

// Async document processing with barcodes
 public async Task<ProcessedDocument> ProcessDocumentAsync(string filePath)
 {
     using var input = new OcrInput();
     LoadFile(input, filePath);
     input.DeNoise();
     input.Deskew();
     var result = await _ocr.ReadAsync(input);
     return new ProcessedDocument
     {
         Text = result.Text,
         Confidence = result.Confidence,
         Barcodes = result.Barcodes.Select(b => b.Value).ToList()
     };
 }
// Helper to load image or PDF
private void LoadFile(OcrInput input, string filePath)
{
    if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
        input.LoadPdf(filePath);
    else
        input.LoadImage(filePath);
}
// Model for processed documents with barcodes
public class ProcessedDocument
{
    public string Text { get; set; }
    public double Confidence { get; set; }
    public List<string> Barcodes { get; set; }
}
// Async document processing with barcodes
 public async Task<ProcessedDocument> ProcessDocumentAsync(string filePath)
 {
     using var input = new OcrInput();
     LoadFile(input, filePath);
     input.DeNoise();
     input.Deskew();
     var result = await _ocr.ReadAsync(input);
     return new ProcessedDocument
     {
         Text = result.Text,
         Confidence = result.Confidence,
         Barcodes = result.Barcodes.Select(b => b.Value).ToList()
     };
 }
// Helper to load image or PDF
private void LoadFile(OcrInput input, string filePath)
{
    if (filePath.EndsWith(".pdf", StringComparison.OrdinalIgnoreCase))
        input.LoadPdf(filePath);
    else
        input.LoadImage(filePath);
}
// Model for processed documents with barcodes
public class ProcessedDocument
{
    public string Text { get; set; }
    public double Confidence { get; set; }
    public List<string> Barcodes { get; set; }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Esta implementación maneja múltiples documentos, aplica preprocesamiento de imágenes y extrae códigos de barras y texto del mismo documento. El patrón asíncrono asegura un alto rendimiento en aplicaciones .NET.

Resultado

Cómo crear un SDK OCR de .NET con IronOCR: Figura 3 - Imagen de entrada de OCR vs. texto de salida

Mejorar la precisión con funciones integradas

Las capacidades de preprocesamiento de IronOCR mejoran significativamente la precisión del reconocimiento en documentos del mundo real:

// OCR optimized for low-quality images
    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();
        LoadFile(input, filePath);
        // Preprocessing for low-quality documents
        input.DeNoise();
        input.Deskew();
        input.Scale(150);
        input.Binarize();
        input.EnhanceResolution(300);
        var result = _ocr.Read(input);
        return result.Text;
    }
// OCR optimized for low-quality images
    public string ProcessLowQualityDocument(string filePath)
    {
        using var input = new OcrInput();
        LoadFile(input, filePath);
        // Preprocessing for low-quality documents
        input.DeNoise();
        input.Deskew();
        input.Scale(150);
        input.Binarize();
        input.EnhanceResolution(300);
        var result = _ocr.Read(input);
        return result.Text;
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Cada filtro se dirige a problemas específicos con la calidad del documento. DeNoise() elimina artefactos del escaneo, Deskew() corrige páginas inclinadas, y EnhanceResolution() agudiza texto borroso.

Estos filtros trabajan juntos para lograr una extracción precisa de texto incluso de fuentes de baja calidad. Según las discusiones en Stack Overflow, un preprocesamiento adecuado puede mejorar la precisión del OCR hasta en un 40%.

Capacidades avanzadas del SDK de extracción de datos

IronOCR va más allá de la extracción básica de texto con características esenciales para las aplicaciones modernas de SDK OCR de .NET:

// Create a searchable PDF from an image or PDF
  public void CreateSearchablePdf(string inputPath, string outputPath)
  {
      using var input = new OcrInput();
      LoadFile(input, inputPath);
      _ocr.Read(input).SaveAsSearchablePdf(outputPath);
  }
  // Extract structured data (phone numbers, emails, amounts) from text
  public List<string> ExtractStructuredData(string filePath)
  {
      using var input = new OcrInput();
      LoadFile(input, filePath);
      var result = _ocr.Read(input);
      var text = result.Text;
      var phoneNumbers = Regex.Matches(text, @"\+?\d[\d\s\-]{7,}\d")
                              .Select(m => m.Value).ToList();
      var emails = Regex.Matches(text, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}")
                        .Select(m => m.Value).ToList();
      var amounts = Regex.Matches(text, @"\$\d+(?:\.\d{2})?")
                         .Select(m => m.Value).ToList();
      return phoneNumbers.Concat(emails).Concat(amounts).ToList();
  }
// Create a searchable PDF from an image or PDF
  public void CreateSearchablePdf(string inputPath, string outputPath)
  {
      using var input = new OcrInput();
      LoadFile(input, inputPath);
      _ocr.Read(input).SaveAsSearchablePdf(outputPath);
  }
  // Extract structured data (phone numbers, emails, amounts) from text
  public List<string> ExtractStructuredData(string filePath)
  {
      using var input = new OcrInput();
      LoadFile(input, filePath);
      var result = _ocr.Read(input);
      var text = result.Text;
      var phoneNumbers = Regex.Matches(text, @"\+?\d[\d\s\-]{7,}\d")
                              .Select(m => m.Value).ToList();
      var emails = Regex.Matches(text, @"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-z]{2,}")
                        .Select(m => m.Value).ToList();
      var amounts = Regex.Matches(text, @"\$\d+(?:\.\d{2})?")
                         .Select(m => m.Value).ToList();
      return phoneNumbers.Concat(emails).Concat(amounts).ToList();
  }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El código que hemos escrito aquí muestra dos operaciones clave de OCR. CreateSearchablePdf convierte un PDF escaneado o una imagen de entrada en un documento buscable con texto editable para un fácil reconocimiento de texto a través de múltiples formatos de documento.

ExtractStructuredData procesa el mismo documento escaneado para extraer datos, como números de teléfono, correos electrónicos y cantidades, de diversos tipos de documentos, permitiendo que las aplicaciones .NET manejen imágenes escaneadas, archivos de texto y documentos PDF de manera eficiente.

Implementación lista para producción

Despliega IronOCR con confianza con características integradas para producción:

public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger _logger;
    public ProductionOcrService(ILogger logger)
    {
        _logger = logger;
        _ocr = new IronTesseract();
        // Production configuration
        _ocr.Configuration.RenderSearchablePdfsAndHocr = true;
        _ocr.Configuration.ReadBarCodes = true;
    }
    public async Task<string> ProcessBatchAsync(string[] documents)
    {
        var results = new List<string>();
        // Parallel processing for performance
        await Parallel.ForEachAsync(documents, async (doc, ct) =>
        {
            try
            {
                var text = await ExtractTextAsync(doc);
                results.Add(text);
                _logger.LogInformation($"Processed: {doc}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Failed: {doc}");
            }
        });
        return string.Join("\n", results);
    }
}
public class ProductionOcrService
{
    private readonly IronTesseract _ocr;
    private readonly ILogger _logger;
    public ProductionOcrService(ILogger logger)
    {
        _logger = logger;
        _ocr = new IronTesseract();
        // Production configuration
        _ocr.Configuration.RenderSearchablePdfsAndHocr = true;
        _ocr.Configuration.ReadBarCodes = true;
    }
    public async Task<string> ProcessBatchAsync(string[] documents)
    {
        var results = new List<string>();
        // Parallel processing for performance
        await Parallel.ForEachAsync(documents, async (doc, ct) =>
        {
            try
            {
                var text = await ExtractTextAsync(doc);
                results.Add(text);
                _logger.LogInformation($"Processed: {doc}");
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"Failed: {doc}");
            }
        });
        return string.Join("\n", results);
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este patrón demuestra procesamiento paralelo para operaciones por lotes, registro estructurado para monitoreo y manejo de errores elegantes que previenen que los fallos de un solo documento detengan lotes enteros.

Aplicación en el mundo real: procesamiento de facturas

Aquí se muestra cómo las organizaciones usan IronOCR como su SDK OCR de .NET para automatizar el procesamiento de facturas:

// Extract structured invoice data
    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();
        LoadFile(input, invoicePath);
        // Preprocessing for documents
        input.DeNoise();
        input.Deskew();
        var result = _ocr.Read(input);
        var text = result.Text;
        return new Invoice
        {
            InvoiceNumber = ExtractInvoiceNumber(text),
            Date = ExtractDate(text),
            TotalAmount = ExtractAmount(text),
            RawText = text
        };
    }
    // --- Helper methods for invoice parsing ---
    private string ExtractInvoiceNumber(string text)
    {
        // Example: Invoice #: 12345
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)");
        return match.Success ? match.Groups[1].Value : null;
    }
    private DateOnly? ExtractDate(string text)
    {
        // Numeric dates
        var numericMatch = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numericMatch.Success && DateTime.TryParse(numericMatch.Groups[1].Value, out var numericDate))
            return DateOnly.FromDateTime(numericDate);
        // Written-out dates
        var writtenMatch = 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 (writtenMatch.Success && DateTime.TryParse(writtenMatch.Value, out var writtenDate))
            return DateOnly.FromDateTime(writtenDate);
        return null;
    }
    private decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
            return amount;
        return null;
    }
// Extract structured invoice data
    public Invoice ExtractInvoiceData(string invoicePath)
    {
        using var input = new OcrInput();
        LoadFile(input, invoicePath);
        // Preprocessing for documents
        input.DeNoise();
        input.Deskew();
        var result = _ocr.Read(input);
        var text = result.Text;
        return new Invoice
        {
            InvoiceNumber = ExtractInvoiceNumber(text),
            Date = ExtractDate(text),
            TotalAmount = ExtractAmount(text),
            RawText = text
        };
    }
    // --- Helper methods for invoice parsing ---
    private string ExtractInvoiceNumber(string text)
    {
        // Example: Invoice #: 12345
        var match = Regex.Match(text, @"Invoice\s*#?:?\s*(\S+)");
        return match.Success ? match.Groups[1].Value : null;
    }
    private DateOnly? ExtractDate(string text)
    {
        // Numeric dates
        var numericMatch = Regex.Match(text, @"\b(\d{1,2}/\d{1,2}/\d{2,4})\b");
        if (numericMatch.Success && DateTime.TryParse(numericMatch.Groups[1].Value, out var numericDate))
            return DateOnly.FromDateTime(numericDate);
        // Written-out dates
        var writtenMatch = 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 (writtenMatch.Success && DateTime.TryParse(writtenMatch.Value, out var writtenDate))
            return DateOnly.FromDateTime(writtenDate);
        return null;
    }
    private decimal? ExtractAmount(string text)
    {
        var match = Regex.Match(text, @"\$\s*(\d+(?:\.\d{2})?)");
        if (match.Success && decimal.TryParse(match.Groups[1].Value, out var amount))
            return amount;
        return null;
    }
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Este enfoque procesa miles de facturas al día, extrayendo campos clave para su entrada automática en sistemas de contabilidad.

Resultado

Cómo crear un SDK OCR de .NET con IronOCR: Figura 4 - Salida OCR de factura

Conclusión

IronOCR transforma aplicaciones .NET en sofisticadas soluciones de procesamiento de documentos sin la complejidad de construir OCR desde cero. Con amplio soporte de idiomas, precisión superior y características listas para producción, es el SDK OCR completo de .NET en el que los desarrolladores confían para aplicaciones empresariales.

IronOCR ofrece opciones flexibles de licenciamiento comenzando en $liteLicense para uso de un solo desarrollador, con opciones que escalan a implementaciones empresariales. El modelo libre de regalías significa que no hay costos adicionales al distribuir tus aplicaciones SDK OCR a clientes.

¿Listo para construir tu SDK OCR de .NET? Comienza tu prueba gratuita para empezar a construir aplicaciones de producción hoy.

NuGet Instalar con NuGet

PM >  Install-Package IronOcr

Echa un vistazo a IronOCR en NuGet para una instalación rápida. Con más de 10 millones de descargas, está transformando el desarrollo de PDF con C#. También puede descargar el DLL o el instalador de Windows.

Preguntas Frecuentes

¿Qué es el SDK de .NET OCR?

El SDK de .NET OCR de IronOCR es una biblioteca diseñada para integrar capacidades de reconocimiento óptico de caracteres en aplicaciones C#, permitiendo a los desarrolladores extraer texto de imágenes, PDFs y documentos escaneados.

¿Cuáles son las características clave del SDK de .NET de IronOCR?

El SDK de .NET de IronOCR ofrece una API simple, soporte para múltiples idiomas, compatibilidad multiplataforma y características avanzadas para manejar varios formatos de archivo y escaneos de baja calidad.

¿Cómo maneja IronOCR diferentes idiomas?

El SDK de .NET de IronOCR admite múltiples idiomas, permitiendo la extracción y reconocimiento de texto de documentos en varios idiomas sin requerir configuraciones adicionales.

¿Puede IronOCR procesar escaneos de baja calidad?

Sí, IronOCR está diseñado para manejar eficazmente escaneos de baja calidad, empleando algoritmos avanzados para mejorar la precisión del reconocimiento de texto incluso en escenarios desafiantes.

¿Es el SDK de .NET de IronOCR multiplataforma?

El SDK de .NET de IronOCR es multiplataforma, lo que significa que se puede usar en diferentes sistemas operativos, haciéndolo versátil para varios entornos de desarrollo.

¿Qué formatos de archivo admite IronOCR?

IronOCR admite una amplia gama de formatos de archivo, incluyendo imágenes, PDFs y documentos escaneados, proporcionando flexibilidad para tareas de reconocimiento de texto en diferentes medios.

¿Cómo pueden los desarrolladores integrar IronOCR en sus proyectos?

Los desarrolladores pueden integrar fácilmente IronOCR en sus proyectos C# utilizando su API sencilla, que simplifica el proceso de agregar funcionalidad OCR a las aplicaciones.

¿Cuáles son algunos casos de uso para IronOCR?

IronOCR se puede usar en sistemas de gestión de documentos, entrada de datos automatizada, digitalización de contenido y cualquier aplicación que requiera extracción de texto de imágenes o PDFs.

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