Cómo usar imágenes de entrada para procesamiento de OCR en C#

Cómo leer de flujos en C# para OCR

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR lee datos de imágenes directamente de flujos en C# pasando el flujo a los constructores OcrInput u OcrImageInput, lo que permite un procesamiento OCR eficiente sin guardar archivos en el disco.

Un flujo es un flujo continuo de información binaria que puede leerse o escribirse. En programación, las secuencias procesan de forma eficiente datos demasiado grandes para la memoria al manejarlos en trozos manejables.

Los métodos de importación de IronOCR aceptan directamente flujos de datos de imágenes. Pase los datos del flujo a un método de importación, que se encargará automáticamente de todos los pasos necesarios. Para escenarios avanzados, explore la clase OcrInput que proporciona amplias opciones para preparar varios formatos de entrada.

iniciar-rápidamente:2(Inicio Rápido: Usar un Flujo para Entrada de OCR en Segundos)

Este ejemplo demuestra el OCR inmediato mediante la alimentación de un System.IO.Stream en IronOCR, omitiendo las rutas de archivo y recuperando el texto reconocido con un código mínimo.

Nuget IconEmpieza a crear PDF con NuGet ahora:

  1. Instalar IronOCR con el gestor de paquetes NuGet

    PM > Install-Package IronOcr

  2. Copie y ejecute este fragmento de código.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. Despliegue para probar en su entorno real

    Empieza a utilizar IronOCR en tu proyecto hoy mismo con una prueba gratuita
    arrow pointer


¿Cómo leer flujos con IronOCR?

<Descripción: Captura de pantalla que muestra el proceso paso a paso -->

En primer lugar, instancie la clase IronTesseract para realizar el OCR. Utilice el método FromFile de AnyBitmap para importar el archivo de imagen. Este objeto AnyBitmap convierte los datos de la imagen en un flujo. A continuación, utilice la sentencia using para crear el objeto OcrImageInput pasando el flujo de imágenes con el método GetStream. Finalmente, usar el método Read para realizar OCR.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-streams.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Import image stream
Private imageInput = New OcrImageInput(anyBitmap.GetStream())
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

El OCR basado en secuencias beneficia a las aplicaciones web que reciben cargas de imágenes, procesan imágenes de bases de datos o gestionan datos temporales que no deben escribirse en el disco. El enfoque de flujo se integra perfectamente con Objetos System.Drawing y otras bibliotecas de manipulación de imágenes.

¿Por qué usar Streams para OCR?

Trabajar con secuencias ofrece varias ventajas a los desarrolladores de .NET:

  1. Eficiencia de memoria: Procesar datos en trozos en lugar de cargar archivos enteros en la memoria
  2. Seguridad: Procese documentos confidenciales sin crear archivos temporales en el disco
  3. Rendimiento: Eliminar la sobrecarga de E/S de las operaciones del sistema de archivos
  4. Flexibilidad: Trabaja con cargas web, BLOBs de bases de datos y transformaciones en memoria

Para procesar documentos de varias páginas o manejar corrientes PDF, IronOCR mantiene la misma API sencilla a la vez que proporciona un rendimiento sólido. Cuando trabaje con documentos escaneados, también puede aprovechar las capacidades de IronOCR para leer documentos escaneados de forma eficiente mediante el procesamiento de flujos.

¿Cómo puedo especificar una región de escaneado para Stream OCR?

<Descripción: Captura de pantalla que muestra el proceso paso a paso -->

Para mejorar el rendimiento en imágenes de gran tamaño y obtener lecturas específicas de determinadas regiones, utilice la clase CropRectangle. El constructor OcrImageInput acepta un objeto CropRectangle como segundo parámetro, lo que permite especificar qué región del documento de imagen debe leerse. El código del ejemplo siguiente especifica que sólo deben leerse el número de capítulo y la región del título.

:path=/static-assets/ocr/content-code-examples/how-to/input-streams-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput(anyBitmap.GetStream(), ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput(anyBitmap.GetStream(), ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output the result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

Esta técnica es especialmente útil cuando se necesita OCR una región específica de una imagen o cuando se trata de documentos estructurados en los que el texto aparece en lugares predecibles. Para situaciones más complejas que impliquen tablas o datos estructurados, explora cómo leer tablas en documentos.

¿Qué aspecto tiene la región de escaneado en la salida?

Demostración de OCR: documento en el visor de fotos con el texto extraído 'Capítulo ocho La fiesta del día de la muerte' mostrado en la consola de depuración

¿Qué técnicas avanzadas de procesamiento de flujos puedo utilizar?

Cuando trabaje con secuencias, aproveche las funciones adicionales de IronOCR para mejorar la precisión del reconocimiento. Los filtros de optimización de imágenes pueden aplicarse directamente a los datos de flujo antes del procesamiento de OCR:

using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para mejorar el procesamiento de imágenes, considere la posibilidad de utilizar el Asistente de filtro para determinar automáticamente los mejores pasos de preprocesamiento para sus tipos de documentos específicos. Además, al tratar con imágenes giradas o torcidas en sus flujos, la funcionalidad fijar la orientación de la imagen puede mejorar significativamente la precisión del OCR.

¿Cómo trabajar con diferentes fuentes de flujo?

IronOCR maneja varias fuentes de flujo sin problemas. Ya se trate de procesar cargas desde un formulario web, recuperar imágenes de una base de datos o convertir entre formatos, la API debe ser coherente:

// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Para obtener resultados óptimos, considere la posibilidad de ajustar la configuración de DPI cuando trabaje con secuencias de baja resolución. IronOCR gestiona automáticamente la detección de PPP, pero la configuración manual puede mejorar la precisión para casos de uso específicos. Cuando trabaje con documentos multipágina, explore el manejo de archivos TIFF y GIF multipágina mediante el procesamiento de secuencias.

¿Cómo manejo los resultados de OCR de los flujos?

Después de procesar su flujo, IronOCR proporciona objetos de resultados enriquecidos que van más allá de la simple extracción de texto. La clase OcrResult contiene información detallada sobre el texto reconocido, incluyendo puntuaciones de confianza, posicionamiento y estructura:

// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

El objeto resultante también proporciona métodos para exportar a PDF con opción de búsqueda o formato HTML hOCR, lo que facilita la creación de archivos de documentos con opción de búsqueda a partir de sus entradas de flujo. Con fines de depuración, puede utilizar la función resaltar textos para visualizar lo que IronOCR ha detectado en sus imágenes.

¿Qué consideraciones de rendimiento debo tener en cuenta?

Al procesar varios flujos o implementar soluciones de OCR de alto rendimiento, tenga en cuenta estas estrategias de optimización:

  1. Reutilizar instancias de IronTesseract: Crear una única instancia y reutilizarla en múltiples operaciones
  2. Implemente el seguimiento del progreso: Para grandes flujos, utilice seguimiento del progreso para supervisar el estado de procesamiento
  3. Proceso en paralelo: IronOCR soporta procesamiento concurrente para múltiples flujos
  4. Optimizar la calidad de la imagen: Preprocesa las secuencias para garantizar una resolución y claridad óptimas

Para obtener el máximo rendimiento, explore las opciones de configuración rápida de OCR y considere la posibilidad de implementar procesamiento multihilo para las operaciones por lotes. Cuando se trabaja con aplicaciones sensibles al tiempo, entender timeouts puede ayudar a gestionar eficazmente las operaciones de OCR de larga duración.

¿Cómo puedo solucionar los problemas más comunes de Streaming?

Al trabajar con flujos, puede encontrarse con retos específicos. A continuación se ofrecen soluciones a situaciones habituales:

  • Posición del flujo: Restablezca siempre la posición del flujo a 0 antes de pasarlo a IronOCR
  • Disposición: Utilice declaraciones using para garantizar una limpieza adecuada de los recursos
  • Soporte de Formatos: IronOCR soporta varios formatos de imagen incluyendo JPEG, PNG, TIFF, y BMP a través de streams
  • Gestión de memoria: Para grandes flujos, considere el procesamiento por trozos o los enfoques de streaming

En el caso de documentos complejos o cuando el OCR estándar no ofrece resultados satisfactorios, las características de visión por ordenador pueden ayudar a localizar y extraer el texto con mayor precisión. Además, cuando trabaje con flujos de baja calidad, consulte la guía sobre fijación de escaneos de baja calidad para conocer las técnicas de preprocesamiento que pueden mejorar significativamente las tasas de reconocimiento.

Para obtener información más detallada sobre cómo trabajar con secuencias y otros métodos de entrada, explore nuestras completas guías de procedimientos y ejemplos de código.

Preguntas Frecuentes

¿Cómo puedo realizar un OCR en datos de imagen sin guardarlos primero en el disco?

IronOCR permite procesar flujos de imágenes directamente pasándolos a los constructores OcrInput u OcrImageInput. Esto permite un procesamiento eficiente del OCR sin crear archivos temporales, lo que es ideal para manejar cargas web, BLOBs de bases de datos o documentos sensibles que no deben tocar el disco.

¿Qué tipos de secuencias pueden utilizarse como entrada para el procesamiento OCR?

IronOCR acepta cualquier System.IO.Stream que contenga datos de imagen. Esto incluye flujos de memoria de cargas web, flujos de campos BLOB de bases de datos o flujos creados a partir de bibliotecas de manipulación de imágenes. La librería maneja todos los pasos de conversión necesarios automáticamente cuando se pasa el flujo a OcrInput u OcrImageInput.

¿Cuál es la forma más sencilla de realizar un OCR en un flujo en C#?

El método más rápido es crear un objeto OcrInput con su flujo y llamar al método Read: 'using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input);'. Este código mínimo realiza el OCR y devuelve el texto reconocido inmediatamente.

¿Por qué debo utilizar secuencias en lugar de rutas de archivo para el OCR?

El OCR basado en secuencias con IronOCR ofrece varias ventajas: eficiencia de memoria al procesar datos en trozos, mayor seguridad al evitar archivos temporales en el disco, mejor rendimiento al eliminar la sobrecarga de E/S de archivos y mayor flexibilidad al trabajar con cargas web o BLOB de bases de datos.

¿Puedo especificar un área concreta de una secuencia de imágenes para leerla?

Sí, IronOCR permite definir el área de lectura especificando una región de recorte al procesar secuencias. Esta función le permite centrar el OCR en partes específicas de la imagen sin procesar todo el documento, lo que mejora tanto la velocidad como la precisión.

¿Cómo se integra el procesamiento de secuencias con otras bibliotecas de manipulación de imágenes?

El enfoque de flujo de IronOCR se integra perfectamente con los objetos System.Drawing y otras bibliotecas de manipulación de imágenes .NET. Puede utilizar la clase AnyBitmap para convertir imágenes en flujos mediante el método GetStream, lo que facilita la combinación de OCR con otros flujos de trabajo de procesamiento de imágenes.

Chaknith Bin
Ingeniero de Software
Chaknith trabaja en IronXL e IronBarcode. Tiene un profundo conocimiento en C# y .NET, ayudando a mejorar el software y apoyar a los clientes. Sus conocimientos derivados de las interacciones con los usuarios contribuyen a mejores productos, documentación y experiencia en general.
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 5,246,844 | Versión: 2025.12 recién lanzado