Cómo leer de flujos en C# para OCR
IronOCR lee datos de imagen directamente desde flujos en C# pasando el flujo a OcrInput o OcrImageInput constructores, permitiendo 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 OcrInput Class que ofrece amplias opciones para preparar varios formatos de entrada.
Guía rápida: Use un flujo para entrada de OCR en segundos
Este ejemplo demuestra un OCR inmediato alimentando un System.IO.Stream en IronOCR, omitiendo rutas de archivos y recuperando texto reconocido con un código mínimo.
-
Instala IronOCR con el Administrador de Paquetes NuGet
PM > Install-Package IronOcr -
Copie y ejecute este fragmento de código.
using var input = new IronOcr.OcrInput(stream); var result = new IronOcr.IronTesseract().Read(input); -
Despliegue para probar en su entorno real
Comienza a usar IronOCR en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (5 pasos)
- Descargue una biblioteca de C# para leer desde secuencias
- Obtener y preparar los datos del stream de imágenes
- Pase la secuencia de imágenes al constructor OcrImageInput para importar la imagen
- Utilice el método
Readpara realizar OCR - Definir el área de lectura especificando la región de recorte
¿Cómo leer flujos con IronOCR?
Primero, instancie la clase IronTesseract para realizar 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, use la declaración using para crear el objeto OcrImageInput pasando el flujo de imagen con el método GetStream. Finalmente, use el método Read para llevar a cabo el 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)
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 flujos 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:
- Eficiencia de Memoria: Procese datos en fragmentos en lugar de cargar archivos completos en memoria
- Seguridad: Procese documentos sensibles sin crear archivos temporales en el disco
- Rendimiento: Elimine la sobrecarga de I/O de las operaciones del sistema de archivos
- Flexibilidad: Trabaje 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?
Para mejorar el rendimiento en imágenes grandes y obtener lecturas específicas de ciertas regiones, utilice la clase CropRectangle. El constructor OcrImageInput acepta un objeto CropRectangle como segundo parámetro, permitiéndole 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)
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?
¿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;
}
Imports IronOcr
Imports IronSoftware.Drawing
Imports System.IO
' Process stream with filters
Public Function ProcessStreamWithFilters(imageStream As Stream) As String
Dim ocrTesseract As New IronTesseract()
' Configure for better accuracy
ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
Using input As New OcrImageInput(imageStream)
' Apply preprocessing filters
input.Deskew()
input.DeNoise()
input.Sharpen()
Dim result = ocrTesseract.Read(input)
Return result.Text
End Using
End Function
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);
Imports System.IO
Imports System.Net
' From MemoryStream
Dim imageBytes As Byte() = GetImageBytesFromDatabase()
Using memoryStream As New MemoryStream(imageBytes)
Using input As New OcrImageInput(memoryStream)
' Process input
End Using
End Using
' From FileStream
Using fileStream As New FileStream("document.png", FileMode.Open)
Using input2 As New OcrImageInput(fileStream)
' Process input2
End Using
End Using
' From network stream
Using webClient As New WebClient()
Using networkStream As Stream = webClient.OpenRead("https://example.com/image.jpg")
Using input3 As New OcrImageInput(networkStream)
' Process input3
End Using
End Using
End Using
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");
Imports IronOcr
' Process stream and analyze results
Using input As New OcrImageInput(stream)
Dim result = New IronTesseract().Read(input)
' Access detailed results
For Each page In result.Pages
Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%")
For Each paragraph In page.Paragraphs
Console.WriteLine($"Paragraph: {paragraph.Text}")
Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}")
Next
Next
' Export results
Dim text As String = result.Text
Dim searchablePdf As String = result.SaveAsSearchablePdf("output.pdf")
Dim hocrHtml As String = result.SaveAsHocrHtml("output.html")
End Using
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:
- Reutilizar instancias
IronTesseract: Cree una única instancia y reutilícela en múltiples operaciones - Implementar Seguimiento de Progreso: Para flujos grandes, use seguimiento de progreso para monitorear el estado del procesamiento
- Procesar en paralelo:
IronOCRadmite procesamiento concurrente para múltiples flujos - Optimizar Calidad de Imagen: Preprocese los flujos para asegurar 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: Siempre reinicie la posición del flujo a
0antes de pasar aIronOCR - Eliminación: Use declaraciones
usingpara asegurar una limpieza adecuada de recursos - Soporte de Formato: IronOCR admite varios formatos de imagen, incluidos JPEG, PNG, TIFF, y BMP a través de flujos
- Gestión de Memoria: Para flujos grandes, considere el procesamiento fragmentado 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.
¿Puede integrarse IronOCR en aplicaciones existentes?
IronOCR está diseñado para integrarse fácilmente en aplicaciones existentes usando C#, permitiendo a los desarrolladores agregar funcionalidad de OCR a su software con un esfuerzo mínimo.
¿Cuáles son los beneficios de usar IronOCR para la gestión de documentos?
Usar IronOCR para la gestión de documentos agiliza el flujo de trabajo al convertir documentos escaneados en texto buscable y editable, reduciendo la necesidad de entrada manual de datos y mejorando la accesibilidad del documento.
¿Cómo puede IronOCR mejorar la precisión de los datos?
IronOCR mejora la precisión de los datos a través de sus algoritmos de reconocimiento avanzados y características de corrección de imágenes, asegurando que el proceso de extracción de texto sea tanto confiable como preciso.
¿Hay una prueba gratuita disponible para IronOCR?
Sí, Iron Software ofrece una prueba gratuita de IronOCR, permitiendo a los usuarios probar sus características y capacidades antes de tomar una decisión de compra.

