# C# OCR Image to Text Tutorial: Convert Images to Text Without Tesseract
¿Buscas convertir imágenes a texto en C# sin las complicaciones de configuraciones complejas de Tesseract? Este completo tutorial de IronOCR en C# te muestra cómo implementar un potente reconocimiento óptico de caracteres en tus aplicaciones .NET con solo unas pocas líneas de código.
*as-heading:2(Guía rápida: Extraer texto de una imagen en una sola línea)*
Este ejemplo muestra lo fácil que es entender IronOCR: solo una línea de C# convierte tu imagen en texto. Demuestra la inicialización del motor de OCR y cómo leer y recuperar texto de inmediato sin una configuración compleja.
```cs
:title=Start OCR in Seconds with IronOCR!
string text = new IronTesseract().Read("image.png").Text;
```
<div class="hsg-featured-snippet">
<h3>Flujo de trabajo mínimo (5 pasos)</h3>
<ol>
<li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">Descargue IronOCR: la biblioteca de OCR de C# para la conversión de imágenes a texto</a></li>
<li>Utilice la clase <code>IronTesseract</code> para leer texto de imágenes al instante</li>
<li>Aplicar filtros de imagen para mejorar la precisión del OCR en escaneos de baja calidad</li>
<li>Procese varios idiomas con paquetes de idiomas descargables</li>
<li>Exportar resultados como archivos PDF con capacidad de búsqueda o extraer cadenas de texto</li>
</ol>
</div>
## ¿Cómo leo texto de imágenes en aplicaciones .NET?
Para lograr la funcionalidad de OCR de imagen a texto en C# en tus aplicaciones .NET, necesitarás una biblioteca OCR confiable. IronOCR proporciona una solución gestionada utilizando la clase `IronOcr.IronTesseract` que maximiza tanto la precisión como la velocidad sin requerir dependencias externas.
Primero, instala IronOCR en tu proyecto de Visual Studio. Puedes descargar el [DLL de IronOCR directamente](https://www.nuget.org/packages/IronOcr/) o usar el [Administrador de paquetes NuGet](https://www.nuget.org/packages/IronOcr/).
```shell
:ProductInstall
```
## ¿Por qué elegir IronOCR para OCR en C# sin Tesseract?
Cuando necesitas convertir imágenes a texto en C#, IronOCR ofrece ventajas significativas sobre las implementaciones tradicionales de Tesseract:
- Funciona inmediatamente en entornos .NET puros
- No necesita instalación o configuración de Tesseract
- Ejecuta los motores más recientes: **Tesseract 5** (además de Tesseract 4 y 3)
- Compatible con .NET Framework 4.6.2+, .NET Standard 2+ y .NET Core 2, 3, 5, 6, 7, 8, 9 y 10
- Mejora la precisión y la velocidad comparado con Tesseract sin modificar
- Soporta implementaciones en Xamarin, Mono, Azure, y Docker
- Gestiona diccionarios complejos de Tesseract a través de paquetes NuGet
- Maneja PDFs, TIFFs de múltiples cuadros y todos los formatos de imagen principales automáticamente
- Corrige escaneos de baja calidad y torcidos para obtener resultados óptimos
## ¿Cómo usar el tutorial de C# de IronOCR para OCR básico?
Este ejemplo de C# usando Iron Tesseract demuestra la manera más simple de leer texto de una imagen con IronOCR. La clase `IronOcr.IronTesseract` extrae texto y lo devuelve como una cadena.
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.LowQuality.tiff", pageindices);
input.Deskew(); // removes rotation and perspective
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
```
Este código extrae texto limpio de imágenes de alta calidad, exactamente como aparece:
```txt
IronOCR Simple Example
In this simple example we test the accuracy of our C# OCR library to read text from a PNG Image. This is a very basic test, but things will get more complicated as the tutorial continues.
The quick brown fox jumps over the lazy dog
```
La clase `IronTesseract` maneja internamente operaciones complejas de OCR. Escanea automáticamente para alineación, optimiza la resolución y utiliza inteligencia artificial para leer texto de imagen usando IronOCR.
A pesar del sofisticado procesamiento que ocurre detrás de escenas, que incluye análisis de imagen, optimización del motor y reconocimiento inteligente de texto, el proceso de OCR sigue siendo eficiente.

*Captura de pantalla demostrando la capacidad de IronOCR para extraer texto de una imagen PNG*
## ¿Cómo implementar OCR avanzado en C# sin la configuración de Tesseract?
Para aplicaciones de producción que requieren un rendimiento óptimo al convertir imágenes a texto en C#, utilice las clases `OcrInput` y `IronTesseract` juntas. Este enfoque proporciona un control detallado sobre el proceso de OCR.
### Características de la clase `OcrInput`
- Procesa múltiples formatos de imagen: JPEG, TIFF, GIF, BMP, PNG
- Importa páginas completas de PDFs o páginas específicas
- Mejora el contraste, la resolución y la calidad de la imagen automáticamente
- Corrige rotación, ruido de escaneo, desvíos e imágenes negativas
### Características de la clase `IronTesseract`
- Acceso a más de 127 idiomas preconfigurados
- Incluye motores Tesseract 5, 4 y 3
- Especificación del tipo de documento (captura de pantalla, fragmento o documento completo)
- Capacidades de lectura de códigos de barras integradas
- Múltiples formatos de salida: PDFs buscables, HOCR HTML, objetos DOM, y cadenas
### ¿Cómo empezar con `OcrInput` y `IronTesseract`?
Aquí está una configuración recomendada para este tutorial de IronOCR en C# que funciona bien con la mayoría de los tipos de documentos:
```csharp
using IronOcr;
using IronSoftware.Drawing;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// restrict OCR to a content area for faster processing
Rectangle contentArea = new Rectangle(x: 215, y: 1250, height: 280, width: 1335);
input.LoadImage("img/ComSci.png", contentArea);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
```
Esta configuración logra consistentemente una precisión casi perfecta en escaneos de calidad media. El método `LoadImageFrames` maneja eficientemente documentos de varias páginas, lo que lo hace ideal para escenarios de procesamiento por lotes.
<br />
<center>
<a href="/img/tutorials/how-to-read-text-from-an-image-in-csharp-net/Potter.tiff" target="_blank">
<img src="/img/tutorials/how-to-read-text-from-an-image-in-csharp-net/Potter.thumb.png" alt="Documento TIFF de varias páginas que muestra texto de Harry Potter listo para el procesamiento OCR de C#" class="img-responsive add-shadow img-margin" style="max-height:250px; border:1px solid gray" />
</a>
</center>
*Documento TIFF de muestra que demuestra las capacidades de extracción de texto de varias páginas de IronOCR*
La capacidad de leer texto de imágenes y códigos de barras en documentos escaneados como TIFFs muestra cómo IronOCR simplifica tareas de OCR complejas. La biblioteca sobresale con documentos del mundo real, manejando sin problemas TIFFs de múltiples páginas y [extracción de texto de PDFs](/csharp/ocr/how-to/input-pdfs/).
### ¿Cómo gestiona IronOCR los escaneos de baja calidad?
<br />
<center>
<a href="/img/tutorials/how-to-read-text-from-an-image-in-csharp-net/Potter.LowQuality.tiff" target="_blank">
<img src="/img/tutorials/how-to-read-text-from-an-image-in-csharp-net/Potter.LowQualitythumb.png" alt="Escaneo de baja calidad con ruido digital que demuestra las capacidades de mejora de imágenes de IronOCR" class="img-responsive add-shadow img-margin" style="max-height:250px; border:1px solid gray" />
</a>
</center>
*Documento de baja resolución con ruido que IronOCR puede procesar con precisión utilizando filtros de imagen*
Al trabajar con escaneos imperfectos que contienen distorsión y ruido digital, **IronOCR supera a otras bibliotecas OCR de C#**. Está diseñado específicamente para escenarios del mundo real en lugar de imágenes de prueba prístinas.
```csharp
// PM> Install IronOcr.Languages.Arabic
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using OcrInput input = new OcrInput();
input.LoadImageFrame("img/arabic.gif", 1);
// add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
```
Usando `Input.Deskew()`, la precisión mejora significativamente en escaneos de baja calidad, casi igualando los resultados de alta calidad. Esto demuestra por qué IronOCR es la elección preferida para OCR en C# sin complicaciones de Tesseract.
Los filtros de imagen pueden aumentar ligeramente el tiempo de procesamiento pero reducen significativamente la duración total del OCR. Encontrar el equilibrio correcto depende de la calidad de tu documento.
Para la mayoría de los escenarios, `Input.Deskew()` y `Input.DeNoise()` proporcionan mejoras confiables en el rendimiento de OCR. Aprende más sobre [técnicas de preprocesamiento de imagen](/csharp/ocr/tutorials/c-sharp-ocr-image-filters/).
## ¿Cómo optimizar el rendimiento y la velocidad del OCR?
El factor más significativo que afecta la velocidad del OCR al convertir imágenes a texto en C# es la calidad de entrada. Un DPI más alto (~200 dpi) con ruido mínimo produce los resultados más rápidos y precisos.
Aunque IronOCR se destaca en corregir documentos imperfectos, esta mejora requiere tiempo de procesamiento adicional.
Elige formatos de imagen con artefactos mínimos de compresión. TIFF y PNG generalmente brindan resultados más rápidos que JPEG debido a un menor ruido digital.
### ¿Qué filtros de imagen mejoran la velocidad del OCR?
Los siguientes filtros pueden mejorar dramáticamente el rendimiento en tu flujo de trabajo de imagen a texto en OCR de C#:
- **`OcrInput.Rotate(double degrees)`:** Rota imágenes en el sentido de las agujas del reloj (negativo para sentido contrario)
- **`OcrInput.Binarize()`:** Convierte a blanco/negro, mejorando el rendimiento en escenarios de bajo contraste
- **`OcrInput.ToGrayScale()`:** Convierte a escala de grises para posibles mejoras de velocidad
- **`OcrInput.Contrast()`:** Ajusta automáticamente el contraste para mejor precisión
- **`OcrInput.DeNoise()`:** Elimina artefactos digitales cuando se espera ruido
- **`OcrInput.Invert()`:** Invierte colores para texto blanco sobre negro
- **`OcrInput.Dilate()`:** Expande los límites del texto
- **`OcrInput.Erode()`:** Reduce los límites del texto
- **`OcrInput.Deskew()`:** Corrige la alineación; esencial para documentos inclinados
- **`OcrInput.Despeckle()`:** Eliminación agresiva de ruido
- **`OcrInput.EnhanceResolution`:** Mejora la calidad de imagen de baja resolución
- **`OcrInput.DetectPageOrientation()`**: Detecta y corrige la rotación de página. Pase un `OrientationDetectionMode` para controlar el equilibrio entre precisión y velocidad: `Fast`, `Balanced`, `Detailed`, o `ExtremeDetailed` (añadido v2025.8.6)
`Scale()` y `EnhanceResolution()` son incompatibles con `SaveAsSearchablePdf()` debido a un problema conocido en v2025.12.3. Todos los demás filtros funcionan correctamente con la salida PDF con capacidad de búsqueda.
### ¿Cómo configurar IronOCR para obtener la máxima velocidad?
Usa estas configuraciones para optimizar la velocidad al procesar escaneos de alta calidad:
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
// We can add any number of languages.
ocr.AddSecondaryLanguage(OcrLanguage.English);
// Optionally add custom tesseract .traineddata files by specifying a file path
using OcrInput input = new OcrInput();
input.LoadImage("img/MultiLanguage.jpeg");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("MultiLanguage.txt");
```
Esta configuración optimizada mantiene una alta precisión mientras mejora la velocidad de procesamiento en comparación con la configuración predeterminada.
## ¿Cómo leer áreas específicas de imágenes usando C# OCR?
El ejemplo de C# Iron Tesseract a continuación muestra cómo enfocar regiones específicas usando `System.Drawing.Rectangle`. Esta técnica es invaluable para procesar formularios estandarizados donde el texto aparece en ubicaciones predecibles.
### ¿Puede IronOCR procesar regiones recortadas para obtener resultados más rápidos?
Usando coordenadas basadas en píxeles, puedes limitar el OCR a áreas específicas, mejorando dramáticamente la velocidad y evitando la extracción de texto no deseado:
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine($"{result.Pages.Length} Pages"); // 3 Pages
```
Este enfoque dirigido mejora la velocidad de procesamiento mientras extrae solo el texto relevante. Es ideal para documentos estructurados como [facturas](/csharp/ocr/blog/using-ironocr/invoice-ocr-csharp-tutorial/), cheques y formularios. La misma técnica de recorte funciona sin problemas con [operaciones de PDF OCR](/csharp/ocr/how-to/input-pdfs/).

*Documento demostrando extracción precisa de texto basada en región usando la selección de rectángulo de IronOCR*
## ¿Cuántos idiomas admite IronOCR?
IronOCR ofrece **127 idiomas internacionales** a través de prácticos paquetes de idiomas. Descárgalos como DLLs desde nuestro sitio web o a través del [Administrador de paquetes NuGet](https://www.nuget.org/packages?q=IronOcr.Languages).
Instala paquetes de idiomas a través de la interfaz de NuGet ([busca "IronOcr.Languages"](https://www.nuget.org/packages?q=IronOcr.Languages)) o visita el [listado completo de paquetes de idioma](/csharp/ocr/languages/).
Los idiomas soportados incluyen árabe, chino (simplificado/tradicional), japonés, coreano, hindi, ruso, alemán, francés, español y más de 115 otros, cada uno optimizado para el reconocimiento preciso de texto.
### ¿Cómo implementar OCR en varios idiomas?
Este ejemplo de tutorial de IronOCR en C# demuestra el reconocimiento de texto en árabe:
```shell
:InstallCmd Install-Package IronOcr.Languages.Arabic
```
<center>
<img src="/img/tutorials/how-to-read-text-from-an-image-in-csharp-net/arabic.gif" alt="Texto árabe procesado por IronOCR que demuestra compatibilidad con OCR en varios idiomas" class="img-responsive add-shadow img-margin" style="max-height:250px; border:1px solid gray;" />
</center>
*IronOCR extrae con precisión texto árabe de una imagen GIF*
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
// We can also select specific PDF page numbers to OCR
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Console.WriteLine($"{result.Pages.Length} Pages");
// 1 page for every page of the PDF
```
### ¿Puede IronOCR gestionar documentos con múltiples idiomas?
Cuando los documentos contienen idiomas mixtos, configura IronOCR para soporte multilingüe:
```shell
:InstallCmd Install-Package IronOcr.Languages.ChineseSimplified
```
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Pdf Metadata Name";
input.LoadPdf("example.pdf", Password: "password");
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
```
## ¿Cómo procesar documentos de varias páginas con C# OCR?
IronOCR combina perfectamente múltiples páginas o imágenes en un único `OcrResult`. Esta función habilita capacidades poderosas como [crear PDFs buscables](/csharp/ocr/how-to/searchable-pdf/) y extraer texto de conjuntos de documentos completos.
Mezcla y combina varias fuentes - imágenes, marcos de TIFF y páginas de PDF - en una sola operación de OCR:
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Pdf Title";
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
```
Procesa todas las páginas de un archivo TIFF de manera eficiente:
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
// Add more content as required...
input.LoadImage("image2.jpeg");
input.LoadPdf("example.pdf",Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("hocr.html");
```
Convierte TIFFs o PDFs a formatos buscables:
```csharp
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");
OcrResult result = ocr.Read(input);
foreach (var barcode in result.Barcodes)
{
Console.WriteLine(barcode.Value);
// type and location properties also exposed
}
```
Convierte PDFs existentes a versiones buscables:
```csharp
using IronOcr;
using IronSoftware.Drawing;
// We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters
// This allows us to explore, export and draw OCR content using other APIs
IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
OcrResult result = ocr.Read(input);
foreach (var page in result.Pages)
{
// Page object
int pageNumber = page.PageNumber;
string pageText = page.Text;
int pageWordCount = page.WordCount;
// null if we don't set Ocr.Configuration.ReadBarCodes = true;
OcrResult.Barcode[] barcodes = page.Barcodes;
AnyBitmap pageImage = page.ToBitmap(input);
System.Drawing.Bitmap pageImageLegacy = page.ToBitmap(input);
double pageWidth = page.Width;
double pageHeight = page.Height;
foreach (var paragraph in page.Paragraphs)
{
// Pages -> Paragraphs
int paragraphNumber = paragraph.ParagraphNumber;
String paragraphText = paragraph.Text;
System.Drawing.Bitmap paragraphImage = paragraph.ToBitmap(input);
int paragraphXLocation = paragraph.X;
int paragraphYLocation = paragraph.Y;
int paragraphWidth = paragraph.Width;
int paragraphHeight = paragraph.Height;
double paragraphOcrAccuracy = paragraph.Confidence;
var paragraphTextDirection = paragraph.TextDirection;
foreach (var line in paragraph.Lines)
{
// Pages -> Paragraphs -> Lines
int lineNumber = line.LineNumber;
String lineText = line.Text;
AnyBitmap lineImage = line.ToBitmap(input);
System.Drawing.Bitmap lineImageLegacy = line.ToBitmap(input);
int lineXLocation = line.X;
int lineYLocation = line.Y;
int lineWidth = line.Width;
int lineHeight = line.Height;
double lineOcrAccuracy = line.Confidence;
double lineSkew = line.BaselineAngle;
double lineOffset = line.BaselineOffset;
foreach (var word in line.Words)
{
// Pages -> Paragraphs -> Lines -> Words
int wordNumber = word.WordNumber;
String wordText = word.Text;
AnyBitmap wordImage = word.ToBitmap(input);
System.Drawing.Image wordImageLegacy = word.ToBitmap(input);
int wordXLocation = word.X;
int wordYLocation = word.Y;
int wordWidth = word.Width;
int wordHeight = word.Height;
double wordOcrAccuracy = word.Confidence;
if (word.Font != null)
{
// Word.Font is only set when using Tesseract Engine Modes rather than LTSM
String fontName = word.Font.FontName;
double fontSize = word.Font.FontSize;
bool isBold = word.Font.IsBold;
bool isFixedWidth = word.Font.IsFixedWidth;
bool isItalic = word.Font.IsItalic;
bool isSerif = word.Font.IsSerif;
bool isUnderlined = word.Font.IsUnderlined;
bool fontIsCaligraphic = word.Font.IsCaligraphic;
}
foreach (var character in word.Characters)
{
// Pages -> Paragraphs -> Lines -> Words -> Characters
int characterNumber = character.CharacterNumber;
String characterText = character.Text;
AnyBitmap characterImage = character.ToBitmap(input);
System.Drawing.Bitmap characterImageLegacy = character.ToBitmap(input);
int characterXLocation = character.X;
int characterYLocation = character.Y;
int characterWidth = character.Width;
int characterHeight = character.Height;
double characterOcrAccuracy = character.Confidence;
// Output alternative symbols choices and their probability.
// Very useful for spell checking
OcrResult.Choice[] characterChoices = character.Choices;
}
}
}
}
}
```
Aplica la misma técnica a las conversiones de TIFF:
```csharp
using IronOcr;
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
// Configure document properties
input.Title = "Scanned Archive Document";
// Select pages to process
var pageIndices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageIndices);
// Create searchable PDF from TIFF
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
}
```
## ¿Cómo exportar resultados de OCR como HTML HOCR?
IronOCR soporta la exportación de HOCR HTML, permitiendo conversiones estructuradas de **PDF a HTML** y **TIFF a HTML** mientras preserva la información de diseño:
```csharp
using IronOcr;
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
// Set HTML title
input.Title = "Document Archive";
// Process multiple document types
input.LoadImage("image2.jpeg");
input.LoadPdf("example.pdf", "password");
// Add TIFF pages
var pageIndices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageIndices);
// Export as HOCR with position data
OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("hocr.html");
}
```
## ¿Puede IronOCR leer códigos de barras junto con texto?
IronOCR combina de manera única el reconocimiento de texto con [capacidades de lectura de códigos de barras](/csharp/ocr/how-to/barcodes/), eliminando la necesidad de bibliotecas separadas:
```csharp
// Enable combined text and barcode recognition
using IronOcr;
var ocr = new IronTesseract();
// Enable barcode detection
ocr.Configuration.ReadBarCodes = true;
using (var input = new OcrInput())
{
// Load image containing both text and barcodes
input.LoadImage("img/Barcode.png");
// Process both text and barcodes
var result = ocr.Read(input);
// Extract barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Barcode Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
```
## ¿Cómo acceder a resultados detallados de OCR y metadatos?
El objeto de resultados de IronOCR proporciona datos comprensivos que los desarrolladores avanzados pueden aprovechar para aplicaciones sofisticadas.
Cada `OcrResult` contiene colecciones jerárquicas: páginas, párrafos, líneas, palabras y caracteres. Todos los elementos incluyen metadatos detallados como ubicación, información de fuente, y puntuaciones de confianza.
Los elementos individuales (párrafos, palabras, códigos de barras) pueden ser exportados como imágenes o bitmaps para procesamiento adicional:
```csharp
using System;
using IronOcr;
using IronSoftware.Drawing;
// Configure with barcode support
IronTesseract ocr = new IronTesseract
{
Configuration = { ReadBarCodes = true }
};
using OcrInput input = new OcrInput();
// Process multi-page document
int[] pageIndices = { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageIndices);
OcrResult result = ocr.Read(input);
// Navigate the complete results hierarchy
foreach (var page in result.Pages)
{
// Page-level data
int pageNumber = page.PageNumber;
string pageText = page.Text;
int pageWordCount = page.WordCount;
// Extract page elements
OcrResult.Barcode[] barcodes = page.Barcodes;
AnyBitmap pageImage = page.ToBitmap();
double pageWidth = page.Width;
double pageHeight = page.Height;
foreach (var paragraph in page.Paragraphs)
{
// Paragraph properties
int paragraphNumber = paragraph.ParagraphNumber;
string paragraphText = paragraph.Text;
double paragraphConfidence = paragraph.Confidence;
var textDirection = paragraph.TextDirection;
foreach (var line in paragraph.Lines)
{
// Line details including baseline information
string lineText = line.Text;
double lineConfidence = line.Confidence;
double baselineAngle = line.BaselineAngle;
double baselineOffset = line.BaselineOffset;
foreach (var word in line.Words)
{
// Word-level data
string wordText = word.Text;
double wordConfidence = word.Confidence;
// Font information (when available)
if (word.Font != null)
{
string fontName = word.Font.FontName;
double fontSize = word.Font.FontSize;
bool isBold = word.Font.IsBold;
bool isItalic = word.Font.IsItalic;
}
foreach (var character in word.Characters)
{
// Character-level analysis
string charText = character.Text;
double charConfidence = character.Confidence;
// Alternative character choices for spell-checking
OcrResult.Choice[] alternatives = character.Choices;
}
}
}
}
}
```
## Resumen
IronOCR proporciona a los desarrolladores de C# la implementación más avanzada del [API Tesseract](/csharp/ocr/), funcionando sin problemas en plataformas Windows, Linux y Mac. Su capacidad de leer texto de imágenes utilizando IronOCR - incluso de documentos imperfectos - lo distingue de las soluciones básicas de OCR.
Las características únicas de la biblioteca incluyen lectura de códigos de barras integrada y la capacidad de exportar resultados como PDFs buscables o HOCR HTML, capacidades no disponibles en implementaciones estándar de Tesseract.
### Avanzando
Para continuar dominando IronOCR:
- Explora nuestra [completa guía de inicio](/csharp/ocr/docs/)
- Explora [ejemplos prácticos de código en C#](/csharp/ocr/examples/simple-csharp-ocr-tesseract/)
- Consulta la [documentación de API detallada](/csharp/ocr/object-reference/)
### Descargar código fuente
- [Repositorio GitHub](https://github.com/iron-software/IronOcr.Examples/tree/main/src/ironsoftware.IronOcr.Examples/ironsoftware.IronOcr.Examples)
- [Descargar Código Completo](/downloads/assets/tutorials/how-to-read-text-from-an-image-in-csharp-net/CSharp-Image-to-Text.zip)
¿Listo para implementar la conversión de OCR de imagen a texto en C# en tus aplicaciones? [Descarga IronOCR](download-modal) y comienza tu [prueba gratuita](trial-license) hoy.
¿Buscas convertir imágenes a texto en C# sin las complicaciones de configuraciones complejas de Tesseract? Este completo tutorial de IronOCR en C# te muestra cómo implementar un potente reconocimiento óptico de caracteres en tus aplicaciones .NET con solo unas pocas líneas de código.
Guía rápida: Extraer texto de una imagen en una sola línea
Este ejemplo muestra lo fácil que es entender IronOCR: solo una línea de C# convierte tu imagen en texto. Demuestra la inicialización del motor de OCR y cómo leer y recuperar texto de inmediato sin una configuración compleja.
1Install IronOCR with NuGet Package Manager
PM > Install-Package IronOcr
Install-Package IronOcr
2Copie y ejecute este fragmento de código.
string text = new IronTesseract().Read("image.png").Text;
string text = new IronTesseract().Read("image.png").Text;
C#
3Despliegue para probar en su entorno real
Comienza a usar IronOCR en tu proyecto hoy mismo con una prueba gratuita
Utilice la clase IronTesseract para leer texto de imágenes al instante
Aplicar filtros de imagen para mejorar la precisión del OCR en escaneos de baja calidad
Procese varios idiomas con paquetes de idiomas descargables
Exportar resultados como archivos PDF con capacidad de búsqueda o extraer cadenas de texto
¿Cómo leo texto de imágenes en aplicaciones .NET?
Para lograr la funcionalidad de OCR de imagen a texto en C# en tus aplicaciones .NET, necesitarás una biblioteca OCR confiable. IronOCR proporciona una solución gestionada utilizando la clase IronOcr.IronTesseract que maximiza tanto la precisión como la velocidad sin requerir dependencias externas.
¿Por qué elegir IronOCR para OCR en C# sin Tesseract?
Cuando necesitas convertir imágenes a texto en C#, IronOCR ofrece ventajas significativas sobre las implementaciones tradicionales de Tesseract:
Funciona inmediatamente en entornos .NET puros
No necesita instalación o configuración de Tesseract
Ejecuta los motores más recientes: Tesseract 5 (además de Tesseract 4 y 3)
Compatible con .NET Framework 4.6.2+, .NET Standard 2+ y .NET Core 2, 3, 5, 6, 7, 8, 9 y 10
Mejora la precisión y la velocidad comparado con Tesseract sin modificar
Soporta implementaciones en Xamarin, Mono, Azure, y Docker
Gestiona diccionarios complejos de Tesseract a través de paquetes NuGet
Maneja PDFs, TIFFs de múltiples cuadros y todos los formatos de imagen principales automáticamente
Corrige escaneos de baja calidad y torcidos para obtener resultados óptimos
¿Cómo usar el tutorial de C# de IronOCR para OCR básico?
Este ejemplo de C# usando Iron Tesseract demuestra la manera más simple de leer texto de una imagen con IronOCR. La clase IronOcr.IronTesseract extrae texto y lo devuelve como una cadena.
using IronOcr;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();var pageindices = new int[] { 1, 2 };input.LoadImageFrames(@"img\Potter.LowQuality.tiff", pageindices);input.Deskew(); // removes rotation and perspectiveOcrResult result = ocr.Read(input);Console.WriteLine(result.Text);
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.LowQuality.tiff", pageindices);
input.Deskew(); // removes rotation and perspective
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
ImportsIronOcrPrivate ocr As New IronTesseract()PrivateOcrInputAsusingPrivate pageindices = New Integer() { 1, 2 }input.LoadImageFrames("img\Potter.LowQuality.tiff", pageindices)input.Deskew() ' removes rotation and perspectiveDim result AsOcrResult = ocr.Read(input)Console.WriteLine(result.Text)
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.LowQuality.tiff", pageindices)
input.Deskew() ' removes rotation and perspective
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
Este código extrae texto limpio de imágenes de alta calidad, exactamente como aparece:
IronOCR Simple ExampleIn this simple example we test the accuracy of our C# OCR library to read text from a PNG Image. This is a very basic test, but things will get more complicated as the tutorial continues.The quick brown fox jumps over the lazy dog
IronOCR Simple Example
In this simple example we test the accuracy of our C# OCR library to read text from a PNG Image. This is a very basic test, but things will get more complicated as the tutorial continues.
The quick brown fox jumps over the lazy dog
Text
La clase IronTesseract maneja internamente operaciones complejas de OCR. Escanea automáticamente para alineación, optimiza la resolución y utiliza inteligencia artificial para leer texto de imagen usando IronOCR.
A pesar del sofisticado procesamiento que ocurre detrás de escenas, que incluye análisis de imagen, optimización del motor y reconocimiento inteligente de texto, el proceso de OCR sigue siendo eficiente.
Captura de pantalla demostrando la capacidad de IronOCR para extraer texto de una imagen PNG
¿Cómo implementar OCR avanzado en C# sin la configuración de Tesseract?
Para aplicaciones de producción que requieren un rendimiento óptimo al convertir imágenes a texto en C#, utilice las clases OcrInput y IronTesseract juntas. Este enfoque proporciona un control detallado sobre el proceso de OCR.
Características de la clase OcrInput
Procesa múltiples formatos de imagen: JPEG, TIFF, GIF, BMP, PNG
Importa páginas completas de PDFs o páginas específicas
Mejora el contraste, la resolución y la calidad de la imagen automáticamente
Corrige rotación, ruido de escaneo, desvíos e imágenes negativas
Características de la clase IronTesseract
Acceso a más de 127 idiomas preconfigurados
Incluye motores Tesseract 5, 4 y 3
Especificación del tipo de documento (captura de pantalla, fragmento o documento completo)
Capacidades de lectura de códigos de barras integradas
Múltiples formatos de salida: PDFs buscables, HOCR HTML, objetos DOM, y cadenas
¿Cómo empezar con OcrInput y IronTesseract?
Aquí está una configuración recomendada para este tutorial de IronOCR en C# que funciona bien con la mayoría de los tipos de documentos:
using IronOcr;using IronSoftware.Drawing;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();// restrict OCR to a content area for faster processingRectangle contentArea = new Rectangle(x: 215, y: 1250, height: 280, width: 1335);input.LoadImage("img/ComSci.png", contentArea);OcrResult result = ocr.Read(input);Console.WriteLine(result.Text);
using IronOcr;
using IronSoftware.Drawing;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
// restrict OCR to a content area for faster processing
Rectangle contentArea = new Rectangle(x: 215, y: 1250, height: 280, width: 1335);
input.LoadImage("img/ComSci.png", contentArea);
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
C#
Esta configuración logra consistentemente una precisión casi perfecta en escaneos de calidad media. El método LoadImageFrames maneja eficientemente documentos de varias páginas, lo que lo hace ideal para escenarios de procesamiento por lotes.
Documento TIFF de muestra que demuestra las capacidades de extracción de texto de varias páginas de IronOCR
La capacidad de leer texto de imágenes y códigos de barras en documentos escaneados como TIFFs muestra cómo IronOCR simplifica tareas de OCR complejas. La biblioteca sobresale con documentos del mundo real, manejando sin problemas TIFFs de múltiples páginas y extracción de texto de PDFs.
¿Cómo gestiona IronOCR los escaneos de baja calidad?
Documento de baja resolución con ruido que IronOCR puede procesar con precisión utilizando filtros de imagen
Al trabajar con escaneos imperfectos que contienen distorsión y ruido digital, IronOCR supera a otras bibliotecas OCR de C#. Está diseñado específicamente para escenarios del mundo real en lugar de imágenes de prueba prístinas.
// PM> Install IronOcr.Languages.Arabicusing IronOcr;IronTesseract ocr = new IronTesseract();ocr.Language = OcrLanguage.Arabic;using OcrInput input = new OcrInput();input.LoadImageFrame("img/arabic.gif", 1);// add image filters if needed// In this case, even thought input is very low quality// IronTesseract can read what conventional Tesseract cannot.OcrResult result = ocr.Read(input);// Console can't print Arabic on Windows easily.// Let's save to disk instead.result.SaveAsTextFile("arabic.txt");
// PM> Install IronOcr.Languages.Arabic
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;
using OcrInput input = new OcrInput();
input.LoadImageFrame("img/arabic.gif", 1);
// add image filters if needed
// In this case, even thought input is very low quality
// IronTesseract can read what conventional Tesseract cannot.
OcrResult result = ocr.Read(input);
// Console can't print Arabic on Windows easily.
// Let's save to disk instead.
result.SaveAsTextFile("arabic.txt");
' PM> Install IronOcr.Languages.ArabicImportsIronOcrPrivate ocr As New IronTesseract()ocr.Language = OcrLanguage.ArabicUsing input As New OcrInput() input.LoadImageFrame("img/arabic.gif", 1) ' add image filters if needed ' In this case, even thought input is very low quality ' IronTesseract can read what conventional Tesseract cannot. Dim result AsOcrResult = ocr.Read(input) ' Console can't print Arabic on Windows easily. ' Let's save to disk instead. result.SaveAsTextFile("arabic.txt")EndUsing
' PM> Install IronOcr.Languages.Arabic
Imports IronOcr
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic
Using input As New OcrInput()
input.LoadImageFrame("img/arabic.gif", 1)
' add image filters if needed
' In this case, even thought input is very low quality
' IronTesseract can read what conventional Tesseract cannot.
Dim result As OcrResult = ocr.Read(input)
' Console can't print Arabic on Windows easily.
' Let's save to disk instead.
result.SaveAsTextFile("arabic.txt")
End Using
Usando Input.Deskew(), la precisión mejora significativamente en escaneos de baja calidad, casi igualando los resultados de alta calidad. Esto demuestra por qué IronOCR es la elección preferida para OCR en C# sin complicaciones de Tesseract.
Los filtros de imagen pueden aumentar ligeramente el tiempo de procesamiento pero reducen significativamente la duración total del OCR. Encontrar el equilibrio correcto depende de la calidad de tu documento.
Para la mayoría de los escenarios, Input.Deskew() y Input.DeNoise() proporcionan mejoras confiables en el rendimiento de OCR. Aprende más sobre técnicas de preprocesamiento de imagen.
¿Cómo optimizar el rendimiento y la velocidad del OCR?
El factor más significativo que afecta la velocidad del OCR al convertir imágenes a texto en C# es la calidad de entrada. Un DPI más alto (~200 dpi) con ruido mínimo produce los resultados más rápidos y precisos.
Aunque IronOCR se destaca en corregir documentos imperfectos, esta mejora requiere tiempo de procesamiento adicional.
Elige formatos de imagen con artefactos mínimos de compresión. TIFF y PNG generalmente brindan resultados más rápidos que JPEG debido a un menor ruido digital.
¿Qué filtros de imagen mejoran la velocidad del OCR?
Los siguientes filtros pueden mejorar dramáticamente el rendimiento en tu flujo de trabajo de imagen a texto en OCR de C#:
OcrInput.Rotate(double degrees): Rota imágenes en el sentido de las agujas del reloj (negativo para sentido contrario)
OcrInput.Binarize(): Convierte a blanco/negro, mejorando el rendimiento en escenarios de bajo contraste
OcrInput.ToGrayScale(): Convierte a escala de grises para posibles mejoras de velocidad
OcrInput.Contrast(): Ajusta automáticamente el contraste para mejor precisión
OcrInput.DeNoise(): Elimina artefactos digitales cuando se espera ruido
OcrInput.Invert(): Invierte colores para texto blanco sobre negro
OcrInput.Dilate(): Expande los límites del texto
OcrInput.Erode(): Reduce los límites del texto
OcrInput.Deskew(): Corrige la alineación; esencial para documentos inclinados
OcrInput.Despeckle(): Eliminación agresiva de ruido
OcrInput.EnhanceResolution: Mejora la calidad de imagen de baja resolución
OcrInput.DetectPageOrientation(): Detecta y corrige la rotación de página. Pase un OrientationDetectionMode para controlar el equilibrio entre precisión y velocidad: Fast, Balanced, Detailed, o ExtremeDetailed (añadido v2025.8.6)
Scale() y EnhanceResolution() son incompatibles con SaveAsSearchablePdf() debido a un problema conocido en v2025.12.3. Todos los demás filtros funcionan correctamente con la salida PDF con capacidad de búsqueda.
¿Cómo configurar IronOCR para obtener la máxima velocidad?
Usa estas configuraciones para optimizar la velocidad al procesar escaneos de alta calidad:
using IronOcr;IronTesseract ocr = new IronTesseract();ocr.Language = OcrLanguage.ChineseSimplified;// We can add any number of languages.ocr.AddSecondaryLanguage(OcrLanguage.English);// Optionally add custom tesseract .traineddata files by specifying a file pathusing OcrInput input = new OcrInput();input.LoadImage("img/MultiLanguage.jpeg");OcrResult result = ocr.Read(input);result.SaveAsTextFile("MultiLanguage.txt");
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;
// We can add any number of languages.
ocr.AddSecondaryLanguage(OcrLanguage.English);
// Optionally add custom tesseract .traineddata files by specifying a file path
using OcrInput input = new OcrInput();
input.LoadImage("img/MultiLanguage.jpeg");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("MultiLanguage.txt");
ImportsIronOcrPrivate ocr As New IronTesseract()ocr.Language = OcrLanguage.ChineseSimplified' We can add any number of languages.ocr.AddSecondaryLanguage(OcrLanguage.English)' Optionally add custom tesseract .traineddata files by specifying a file pathUsing input As New OcrInput() input.LoadImage("img/MultiLanguage.jpeg") Dim result AsOcrResult = ocr.Read(input) result.SaveAsTextFile("MultiLanguage.txt")EndUsing
Imports IronOcr
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified
' We can add any number of languages.
ocr.AddSecondaryLanguage(OcrLanguage.English)
' Optionally add custom tesseract .traineddata files by specifying a file path
Using input As New OcrInput()
input.LoadImage("img/MultiLanguage.jpeg")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsTextFile("MultiLanguage.txt")
End Using
Esta configuración optimizada mantiene una alta precisión mientras mejora la velocidad de procesamiento en comparación con la configuración predeterminada.
¿Cómo leer áreas específicas de imágenes usando C# OCR?
El ejemplo de C# Iron Tesseract a continuación muestra cómo enfocar regiones específicas usando System.Drawing.Rectangle. Esta técnica es invaluable para procesar formularios estandarizados donde el texto aparece en ubicaciones predecibles.
¿Puede IronOCR procesar regiones recortadas para obtener resultados más rápidos?
Usando coordenadas basadas en píxeles, puedes limitar el OCR a áreas específicas, mejorando dramáticamente la velocidad y evitando la extracción de texto no deseado:
using IronOcr;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();input.LoadImage("image1.jpeg");input.LoadImage("image2.png");var pageindices = new int[] { 1, 2 };input.LoadImageFrames("image3.gif", pageindices);OcrResult result = ocr.Read(input);Console.WriteLine($"{result.Pages.Length} Pages"); // 3 Pages
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);
OcrResult result = ocr.Read(input);
Console.WriteLine($"{result.Pages.Length} Pages"); // 3 Pages
ImportsIronOcrPrivate ocr As New IronTesseract()PrivateOcrInputAsusinginput.LoadImage("image1.jpeg")input.LoadImage("image2.png")Dim pageindices = New Integer() { 1, 2 }input.LoadImageFrames("image3.gif", pageindices)Dim result AsOcrResult = ocr.Read(input)Console.WriteLine($"{result.Pages.Length} Pages") ' 3 Pages
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("image1.jpeg")
input.LoadImage("image2.png")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("image3.gif", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine($"{result.Pages.Length} Pages") ' 3 Pages
Este enfoque dirigido mejora la velocidad de procesamiento mientras extrae solo el texto relevante. Es ideal para documentos estructurados como facturas, cheques y formularios. La misma técnica de recorte funciona sin problemas con operaciones de PDF OCR.
Documento demostrando extracción precisa de texto basada en región usando la selección de rectángulo de IronOCR
¿Cuántos idiomas admite IronOCR?
IronOCR ofrece 127 idiomas internacionales a través de prácticos paquetes de idiomas. Descárgalos como DLLs desde nuestro sitio web o a través del Administrador de paquetes NuGet.
Los idiomas soportados incluyen árabe, chino (simplificado/tradicional), japonés, coreano, hindi, ruso, alemán, francés, español y más de 115 otros, cada uno optimizado para el reconocimiento preciso de texto.
¿Cómo implementar OCR en varios idiomas?
Este ejemplo de tutorial de IronOCR en C# demuestra el reconocimiento de texto en árabe:
PM > Install-Package IronOcr.Languages.Arabic
Install-Package IronOcr.Languages.Arabic
IronOCR extrae con precisión texto árabe de una imagen GIF
using IronOcr;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();input.LoadPdf("example.pdf", Password: "password");// We can also select specific PDF page numbers to OCROcrResult result = ocr.Read(input);Console.WriteLine(result.Text);Console.WriteLine($"{result.Pages.Length} Pages");// 1 page for every page of the PDF
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadPdf("example.pdf", Password: "password");
// We can also select specific PDF page numbers to OCR
OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Console.WriteLine($"{result.Pages.Length} Pages");
// 1 page for every page of the PDF
ImportsIronOcrPrivate ocr As New IronTesseract()PrivateOcrInputAsusinginput.LoadPdf("example.pdf", Password:= "password")' We can also select specific PDF page numbers to OCRDim result AsOcrResult = ocr.Read(input)Console.WriteLine(result.Text)Console.WriteLine($"{result.Pages.Length} Pages")' 1 page for every page of the PDF
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadPdf("example.pdf", Password:= "password")
' We can also select specific PDF page numbers to OCR
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
Console.WriteLine($"{result.Pages.Length} Pages")
' 1 page for every page of the PDF
¿Puede IronOCR gestionar documentos con múltiples idiomas?
Cuando los documentos contienen idiomas mixtos, configura IronOCR para soporte multilingüe:
using IronOcr;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();input.Title = "Pdf Metadata Name";input.LoadPdf("example.pdf", Password: "password");OcrResult result = ocr.Read(input);result.SaveAsSearchablePdf("searchable.pdf");
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Pdf Metadata Name";
input.LoadPdf("example.pdf", Password: "password");
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
ImportsIronOcrPrivate ocr As New IronTesseract()PrivateOcrInputAsusinginput.Title = "Pdf Metadata Name"input.LoadPdf("example.pdf", Password:= "password")Dim result AsOcrResult = ocr.Read(input)result.SaveAsSearchablePdf("searchable.pdf")
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Pdf Metadata Name"
input.LoadPdf("example.pdf", Password:= "password")
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
¿Cómo procesar documentos de varias páginas con C# OCR?
IronOCR combina perfectamente múltiples páginas o imágenes en un único OcrResult. Esta función habilita capacidades poderosas como crear PDFs buscables y extraer texto de conjuntos de documentos completos.
Mezcla y combina varias fuentes - imágenes, marcos de TIFF y páginas de PDF - en una sola operación de OCR:
using IronOcr;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();input.Title = "Pdf Title";var pageindices = new int[] { 1, 2 };input.LoadImageFrames("example.tiff", pageindices);OcrResult result = ocr.Read(input);result.SaveAsSearchablePdf("searchable.pdf");
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Pdf Title";
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
ImportsIronOcrPrivate ocr As New IronTesseract()PrivateOcrInputAsusinginput.Title = "Pdf Title"Dim pageindices = New Integer() { 1, 2 }input.LoadImageFrames("example.tiff", pageindices)Dim result AsOcrResult = ocr.Read(input)result.SaveAsSearchablePdf("searchable.pdf")
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Pdf Title"
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
Procesa todas las páginas de un archivo TIFF de manera eficiente:
using IronOcr;IronTesseract ocr = new IronTesseract();using OcrInput input = new OcrInput();input.Title = "Html Title";// Add more content as required...input.LoadImage("image2.jpeg");input.LoadPdf("example.pdf",Password: "password");var pageindices = new int[] { 1, 2 };input.LoadImageFrames("example.tiff", pageindices);OcrResult result = ocr.Read(input);result.SaveAsHocrFile("hocr.html");
using IronOcr;
IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
// Add more content as required...
input.LoadImage("image2.jpeg");
input.LoadPdf("example.pdf",Password: "password");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("hocr.html");
ImportsIronOcrPrivate ocr As New IronTesseract()PrivateOcrInputAsusinginput.Title = "Html Title"' Add more content as required...input.LoadImage("image2.jpeg")input.LoadPdf("example.pdf",Password:= "password")Dim pageindices = New Integer() { 1, 2 }input.LoadImageFrames("example.tiff", pageindices)Dim result AsOcrResult = ocr.Read(input)result.SaveAsHocrFile("hocr.html")
Imports IronOcr
Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
' Add more content as required...
input.LoadImage("image2.jpeg")
input.LoadPdf("example.pdf",Password:= "password")
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
result.SaveAsHocrFile("hocr.html")
Convierte TIFFs o PDFs a formatos buscables:
using IronOcr;IronTesseract ocr = new IronTesseract();ocr.Configuration.ReadBarCodes = true;using OcrInput input = new OcrInput();input.LoadImage("img/Barcode.png");OcrResult result = ocr.Read(input);foreach (var barcode in result.Barcodes){Console.WriteLine(barcode.Value); // type and location properties also exposed}
using IronOcr;
IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
input.LoadImage("img/Barcode.png");
OcrResult result = ocr.Read(input);
foreach (var barcode in result.Barcodes)
{
Console.WriteLine(barcode.Value);
// type and location properties also exposed
}
ImportsIronOcrPrivate ocr As New IronTesseract()ocr.Configuration.ReadBarCodes = TrueUsing input As New OcrInput() input.LoadImage("img/Barcode.png") Dim result AsOcrResult = ocr.Read(input) For Each barcode In result.BarcodesConsole.WriteLine(barcode.Value) ' type and location properties also exposed Next barcodeEndUsing
Imports IronOcr
Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
input.LoadImage("img/Barcode.png")
Dim result As OcrResult = ocr.Read(input)
For Each barcode In result.Barcodes
Console.WriteLine(barcode.Value)
' type and location properties also exposed
Next barcode
End Using
Convierte PDFs existentes a versiones buscables:
using IronOcr;using IronSoftware.Drawing;// We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters// This allows us to explore, export and draw OCR content using other APIsIronTesseract ocr = new IronTesseract();ocr.Configuration.ReadBarCodes = true;using OcrInput input = new OcrInput();var pageindices = new int[] { 1, 2 };input.LoadImageFrames(@"img\Potter.tiff", pageindices);OcrResult result = ocr.Read(input);foreach (var page in result.Pages){ // Page object int pageNumber = page.PageNumber; string pageText = page.Text; int pageWordCount = page.WordCount; // null if we don't set Ocr.Configuration.ReadBarCodes = true; OcrResult.Barcode[] barcodes = page.Barcodes; AnyBitmap pageImage = page.ToBitmap(input); System.Drawing.Bitmap pageImageLegacy = page.ToBitmap(input); double pageWidth = page.Width; double pageHeight = page.Height; foreach (var paragraph in page.Paragraphs) { // Pages -> Paragraphs int paragraphNumber = paragraph.ParagraphNumber; String paragraphText = paragraph.Text; System.Drawing.Bitmap paragraphImage = paragraph.ToBitmap(input); int paragraphXLocation = paragraph.X; int paragraphYLocation = paragraph.Y; int paragraphWidth = paragraph.Width; int paragraphHeight = paragraph.Height; double paragraphOcrAccuracy = paragraph.Confidence; var paragraphTextDirection = paragraph.TextDirection; foreach (var line in paragraph.Lines) { // Pages -> Paragraphs -> Lines int lineNumber = line.LineNumber; String lineText = line.Text; AnyBitmap lineImage = line.ToBitmap(input); System.Drawing.Bitmap lineImageLegacy = line.ToBitmap(input); int lineXLocation = line.X; int lineYLocation = line.Y; int lineWidth = line.Width; int lineHeight = line.Height; double lineOcrAccuracy = line.Confidence; double lineSkew = line.BaselineAngle; double lineOffset = line.BaselineOffset; foreach (var word in line.Words) { // Pages -> Paragraphs -> Lines -> Words int wordNumber = word.WordNumber; String wordText = word.Text; AnyBitmap wordImage = word.ToBitmap(input); System.Drawing.Image wordImageLegacy = word.ToBitmap(input); int wordXLocation = word.X; int wordYLocation = word.Y; int wordWidth = word.Width; int wordHeight = word.Height; double wordOcrAccuracy = word.Confidence; if (word.Font != null) { // Word.Font is only set when using Tesseract Engine Modes rather than LTSM String fontName = word.Font.FontName; double fontSize = word.Font.FontSize; bool isBold = word.Font.IsBold; bool isFixedWidth = word.Font.IsFixedWidth; bool isItalic = word.Font.IsItalic; bool isSerif = word.Font.IsSerif; bool isUnderlined = word.Font.IsUnderlined; bool fontIsCaligraphic = word.Font.IsCaligraphic; } foreach (var character in word.Characters) { // Pages -> Paragraphs -> Lines -> Words -> Characters int characterNumber = character.CharacterNumber; String characterText = character.Text; AnyBitmap characterImage = character.ToBitmap(input); System.Drawing.Bitmap characterImageLegacy = character.ToBitmap(input); int characterXLocation = character.X; int characterYLocation = character.Y; int characterWidth = character.Width; int characterHeight = character.Height; double characterOcrAccuracy = character.Confidence; // Output alternative symbols choices and their probability. // Very useful for spell checking OcrResult.Choice[] characterChoices = character.Choices; } } } }}
using IronOcr;
using IronSoftware.Drawing;
// We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters
// This allows us to explore, export and draw OCR content using other APIs
IronTesseract ocr = new IronTesseract();
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);
OcrResult result = ocr.Read(input);
foreach (var page in result.Pages)
{
// Page object
int pageNumber = page.PageNumber;
string pageText = page.Text;
int pageWordCount = page.WordCount;
// null if we don't set Ocr.Configuration.ReadBarCodes = true;
OcrResult.Barcode[] barcodes = page.Barcodes;
AnyBitmap pageImage = page.ToBitmap(input);
System.Drawing.Bitmap pageImageLegacy = page.ToBitmap(input);
double pageWidth = page.Width;
double pageHeight = page.Height;
foreach (var paragraph in page.Paragraphs)
{
// Pages -> Paragraphs
int paragraphNumber = paragraph.ParagraphNumber;
String paragraphText = paragraph.Text;
System.Drawing.Bitmap paragraphImage = paragraph.ToBitmap(input);
int paragraphXLocation = paragraph.X;
int paragraphYLocation = paragraph.Y;
int paragraphWidth = paragraph.Width;
int paragraphHeight = paragraph.Height;
double paragraphOcrAccuracy = paragraph.Confidence;
var paragraphTextDirection = paragraph.TextDirection;
foreach (var line in paragraph.Lines)
{
// Pages -> Paragraphs -> Lines
int lineNumber = line.LineNumber;
String lineText = line.Text;
AnyBitmap lineImage = line.ToBitmap(input);
System.Drawing.Bitmap lineImageLegacy = line.ToBitmap(input);
int lineXLocation = line.X;
int lineYLocation = line.Y;
int lineWidth = line.Width;
int lineHeight = line.Height;
double lineOcrAccuracy = line.Confidence;
double lineSkew = line.BaselineAngle;
double lineOffset = line.BaselineOffset;
foreach (var word in line.Words)
{
// Pages -> Paragraphs -> Lines -> Words
int wordNumber = word.WordNumber;
String wordText = word.Text;
AnyBitmap wordImage = word.ToBitmap(input);
System.Drawing.Image wordImageLegacy = word.ToBitmap(input);
int wordXLocation = word.X;
int wordYLocation = word.Y;
int wordWidth = word.Width;
int wordHeight = word.Height;
double wordOcrAccuracy = word.Confidence;
if (word.Font != null)
{
// Word.Font is only set when using Tesseract Engine Modes rather than LTSM
String fontName = word.Font.FontName;
double fontSize = word.Font.FontSize;
bool isBold = word.Font.IsBold;
bool isFixedWidth = word.Font.IsFixedWidth;
bool isItalic = word.Font.IsItalic;
bool isSerif = word.Font.IsSerif;
bool isUnderlined = word.Font.IsUnderlined;
bool fontIsCaligraphic = word.Font.IsCaligraphic;
}
foreach (var character in word.Characters)
{
// Pages -> Paragraphs -> Lines -> Words -> Characters
int characterNumber = character.CharacterNumber;
String characterText = character.Text;
AnyBitmap characterImage = character.ToBitmap(input);
System.Drawing.Bitmap characterImageLegacy = character.ToBitmap(input);
int characterXLocation = character.X;
int characterYLocation = character.Y;
int characterWidth = character.Width;
int characterHeight = character.Height;
double characterOcrAccuracy = character.Confidence;
// Output alternative symbols choices and their probability.
// Very useful for spell checking
OcrResult.Choice[] characterChoices = character.Choices;
}
}
}
}
}
ImportsIronOcrImportsIronSoftware.Drawing' We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters' This allows us to explore, export and draw OCR content using other APIsPrivate ocr As New IronTesseract()ocr.Configuration.ReadBarCodes = TrueUsing input As New OcrInput() Dim pageindices = New Integer() { 1, 2 } input.LoadImageFrames("img\Potter.tiff", pageindices) Dim result AsOcrResult = ocr.Read(input) For Each page In result.Pages ' Page object Dim pageNumber AsInteger = page.PageNumber Dim pageText AsString = page.Text Dim pageWordCount AsInteger = page.WordCount ' null if we don't set Ocr.Configuration.ReadBarCodes = true; Dim barcodes() AsOcrResult.Barcode = page.Barcodes Dim pageImage AsAnyBitmap = page.ToBitmap(input) Dim pageImageLegacy AsSystem.Drawing.Bitmap = page.ToBitmap(input) Dim pageWidth AsDouble = page.Width Dim pageHeight AsDouble = page.Height For Each paragraph In page.Paragraphs ' Pages -> Paragraphs Dim paragraphNumber AsInteger = paragraph.ParagraphNumber Dim paragraphText AsString = paragraph.Text Dim paragraphImage AsSystem.Drawing.Bitmap = paragraph.ToBitmap(input) Dim paragraphXLocation AsInteger = paragraph.X Dim paragraphYLocation AsInteger = paragraph.Y Dim paragraphWidth AsInteger = paragraph.Width Dim paragraphHeight AsInteger = paragraph.Height Dim paragraphOcrAccuracy AsDouble = paragraph.Confidence Dim paragraphTextDirection = paragraph.TextDirection For Each line In paragraph.Lines ' Pages -> Paragraphs -> Lines Dim lineNumber AsInteger = line.LineNumber Dim lineText AsString = line.Text Dim lineImage AsAnyBitmap = line.ToBitmap(input) Dim lineImageLegacy AsSystem.Drawing.Bitmap = line.ToBitmap(input) Dim lineXLocation AsInteger = line.X Dim lineYLocation AsInteger = line.Y Dim lineWidth AsInteger = line.Width Dim lineHeight AsInteger = line.Height Dim lineOcrAccuracy AsDouble = line.Confidence Dim lineSkew AsDouble = line.BaselineAngle Dim lineOffset AsDouble = line.BaselineOffset For Each word In line.Words ' Pages -> Paragraphs -> Lines -> Words Dim wordNumber AsInteger = word.WordNumber Dim wordText AsString = word.Text Dim wordImage AsAnyBitmap = word.ToBitmap(input) Dim wordImageLegacy AsSystem.Drawing.Image = word.ToBitmap(input) Dim wordXLocation AsInteger = word.X Dim wordYLocation AsInteger = word.Y Dim wordWidth AsInteger = word.Width Dim wordHeight AsInteger = word.Height Dim wordOcrAccuracy AsDouble = word.Confidence If word.FontIsNot Nothing Then ' Word.Font is only set when using Tesseract Engine Modes rather than LTSM Dim fontName AsString = word.Font.FontName Dim fontSize AsDouble = word.Font.FontSize Dim isBold AsBoolean = word.Font.IsBold Dim isFixedWidth AsBoolean = word.Font.IsFixedWidth Dim isItalic AsBoolean = word.Font.IsItalic Dim isSerif AsBoolean = word.Font.IsSerif Dim isUnderlined AsBoolean = word.Font.IsUnderlined Dim fontIsCaligraphic AsBoolean = word.Font.IsCaligraphic End If For Each character In word.Characters ' Pages -> Paragraphs -> Lines -> Words -> Characters Dim characterNumber AsInteger = character.CharacterNumber Dim characterText AsString = character.Text Dim characterImage AsAnyBitmap = character.ToBitmap(input) Dim characterImageLegacy AsSystem.Drawing.Bitmap = character.ToBitmap(input) Dim characterXLocation AsInteger = character.X Dim characterYLocation AsInteger = character.Y Dim characterWidth AsInteger = character.Width Dim characterHeight AsInteger = character.Height Dim characterOcrAccuracy AsDouble = character.Confidence ' Output alternative symbols choices and their probability. ' Very useful for spell checking Dim characterChoices() AsOcrResult.Choice = character.Choices Next character Next word Next line Next paragraph Next pageEndUsing
Imports IronOcr
Imports IronSoftware.Drawing
' We can delve deep into OCR results as an object model of Pages, Barcodes, Paragraphs, Lines, Words and Characters
' This allows us to explore, export and draw OCR content using other APIs
Private ocr As New IronTesseract()
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
Dim pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("img\Potter.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
For Each page In result.Pages
' Page object
Dim pageNumber As Integer = page.PageNumber
Dim pageText As String = page.Text
Dim pageWordCount As Integer = page.WordCount
' null if we don't set Ocr.Configuration.ReadBarCodes = true;
Dim barcodes() As OcrResult.Barcode = page.Barcodes
Dim pageImage As AnyBitmap = page.ToBitmap(input)
Dim pageImageLegacy As System.Drawing.Bitmap = page.ToBitmap(input)
Dim pageWidth As Double = page.Width
Dim pageHeight As Double = page.Height
For Each paragraph In page.Paragraphs
' Pages -> Paragraphs
Dim paragraphNumber As Integer = paragraph.ParagraphNumber
Dim paragraphText As String = paragraph.Text
Dim paragraphImage As System.Drawing.Bitmap = paragraph.ToBitmap(input)
Dim paragraphXLocation As Integer = paragraph.X
Dim paragraphYLocation As Integer = paragraph.Y
Dim paragraphWidth As Integer = paragraph.Width
Dim paragraphHeight As Integer = paragraph.Height
Dim paragraphOcrAccuracy As Double = paragraph.Confidence
Dim paragraphTextDirection = paragraph.TextDirection
For Each line In paragraph.Lines
' Pages -> Paragraphs -> Lines
Dim lineNumber As Integer = line.LineNumber
Dim lineText As String = line.Text
Dim lineImage As AnyBitmap = line.ToBitmap(input)
Dim lineImageLegacy As System.Drawing.Bitmap = line.ToBitmap(input)
Dim lineXLocation As Integer = line.X
Dim lineYLocation As Integer = line.Y
Dim lineWidth As Integer = line.Width
Dim lineHeight As Integer = line.Height
Dim lineOcrAccuracy As Double = line.Confidence
Dim lineSkew As Double = line.BaselineAngle
Dim lineOffset As Double = line.BaselineOffset
For Each word In line.Words
' Pages -> Paragraphs -> Lines -> Words
Dim wordNumber As Integer = word.WordNumber
Dim wordText As String = word.Text
Dim wordImage As AnyBitmap = word.ToBitmap(input)
Dim wordImageLegacy As System.Drawing.Image = word.ToBitmap(input)
Dim wordXLocation As Integer = word.X
Dim wordYLocation As Integer = word.Y
Dim wordWidth As Integer = word.Width
Dim wordHeight As Integer = word.Height
Dim wordOcrAccuracy As Double = word.Confidence
If word.Font IsNot Nothing Then
' Word.Font is only set when using Tesseract Engine Modes rather than LTSM
Dim fontName As String = word.Font.FontName
Dim fontSize As Double = word.Font.FontSize
Dim isBold As Boolean = word.Font.IsBold
Dim isFixedWidth As Boolean = word.Font.IsFixedWidth
Dim isItalic As Boolean = word.Font.IsItalic
Dim isSerif As Boolean = word.Font.IsSerif
Dim isUnderlined As Boolean = word.Font.IsUnderlined
Dim fontIsCaligraphic As Boolean = word.Font.IsCaligraphic
End If
For Each character In word.Characters
' Pages -> Paragraphs -> Lines -> Words -> Characters
Dim characterNumber As Integer = character.CharacterNumber
Dim characterText As String = character.Text
Dim characterImage As AnyBitmap = character.ToBitmap(input)
Dim characterImageLegacy As System.Drawing.Bitmap = character.ToBitmap(input)
Dim characterXLocation As Integer = character.X
Dim characterYLocation As Integer = character.Y
Dim characterWidth As Integer = character.Width
Dim characterHeight As Integer = character.Height
Dim characterOcrAccuracy As Double = character.Confidence
' Output alternative symbols choices and their probability.
' Very useful for spell checking
Dim characterChoices() As OcrResult.Choice = character.Choices
Next character
Next word
Next line
Next paragraph
Next page
End Using
Aplica la misma técnica a las conversiones de TIFF:
using IronOcr;var ocr = new IronTesseract();using (var input = new OcrInput()){ // Configure document properties input.Title = "Scanned Archive Document"; // Select pages to process var pageIndices = new int[] { 1, 2 }; input.LoadImageFrames("example.tiff", pageIndices); // Create searchable PDF from TIFF OcrResult result = ocr.Read(input); result.SaveAsSearchablePdf("searchable.pdf");}
using IronOcr;
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
// Configure document properties
input.Title = "Scanned Archive Document";
// Select pages to process
var pageIndices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageIndices);
// Create searchable PDF from TIFF
OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
}
ImportsIronOcrDim ocr As New IronTesseract()Using input As New OcrInput() ' Configure document properties input.Title = "Scanned Archive Document" ' Select pages to process Dim pageIndices AsInteger() = {1, 2} input.LoadImageFrames("example.tiff", pageIndices) ' Create searchable PDF from TIFF Dim result AsOcrResult = ocr.Read(input) result.SaveAsSearchablePdf("searchable.pdf")EndUsing
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
' Configure document properties
input.Title = "Scanned Archive Document"
' Select pages to process
Dim pageIndices As Integer() = {1, 2}
input.LoadImageFrames("example.tiff", pageIndices)
' Create searchable PDF from TIFF
Dim result As OcrResult = ocr.Read(input)
result.SaveAsSearchablePdf("searchable.pdf")
End Using
¿Cómo exportar resultados de OCR como HTML HOCR?
IronOCR soporta la exportación de HOCR HTML, permitiendo conversiones estructuradas de PDF a HTML y TIFF a HTML mientras preserva la información de diseño:
using IronOcr;var ocr = new IronTesseract();using (var input = new OcrInput()){ // Set HTML title input.Title = "Document Archive"; // Process multiple document types input.LoadImage("image2.jpeg"); input.LoadPdf("example.pdf", "password"); // Add TIFF pages var pageIndices = new int[] { 1, 2 }; input.LoadImageFrames("example.tiff", pageIndices); // Export as HOCR with position data OcrResult result = ocr.Read(input); result.SaveAsHocrFile("hocr.html");}
using IronOcr;
var ocr = new IronTesseract();
using (var input = new OcrInput())
{
// Set HTML title
input.Title = "Document Archive";
// Process multiple document types
input.LoadImage("image2.jpeg");
input.LoadPdf("example.pdf", "password");
// Add TIFF pages
var pageIndices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageIndices);
// Export as HOCR with position data
OcrResult result = ocr.Read(input);
result.SaveAsHocrFile("hocr.html");
}
ImportsIronOcrDim ocr As New IronTesseract()Using input As New OcrInput() ' Set HTML title input.Title = "Document Archive" ' Process multiple document types input.LoadImage("image2.jpeg") input.LoadPdf("example.pdf", "password") ' Add TIFF pages Dim pageIndices AsInteger() = {1, 2} input.LoadImageFrames("example.tiff", pageIndices) ' Export as HOCR with position data Dim result AsOcrResult = ocr.Read(input) result.SaveAsHocrFile("hocr.html")EndUsing
Imports IronOcr
Dim ocr As New IronTesseract()
Using input As New OcrInput()
' Set HTML title
input.Title = "Document Archive"
' Process multiple document types
input.LoadImage("image2.jpeg")
input.LoadPdf("example.pdf", "password")
' Add TIFF pages
Dim pageIndices As Integer() = {1, 2}
input.LoadImageFrames("example.tiff", pageIndices)
' Export as HOCR with position data
Dim result As OcrResult = ocr.Read(input)
result.SaveAsHocrFile("hocr.html")
End Using
¿Puede IronOCR leer códigos de barras junto con texto?
// Enable combined text and barcode recognitionusing IronOcr;var ocr = new IronTesseract();// Enable barcode detectionocr.Configuration.ReadBarCodes = true;using (var input = new OcrInput()){ // Load image containing both text and barcodes input.LoadImage("img/Barcode.png"); // Process both text and barcodes var result = ocr.Read(input); // Extract barcode data foreach (var barcode in result.Barcodes) {Console.WriteLine($"Barcode Value: {barcode.Value}");Console.WriteLine($"Format: {barcode.Format}"); }}
// Enable combined text and barcode recognition
using IronOcr;
var ocr = new IronTesseract();
// Enable barcode detection
ocr.Configuration.ReadBarCodes = true;
using (var input = new OcrInput())
{
// Load image containing both text and barcodes
input.LoadImage("img/Barcode.png");
// Process both text and barcodes
var result = ocr.Read(input);
// Extract barcode data
foreach (var barcode in result.Barcodes)
{
Console.WriteLine($"Barcode Value: {barcode.Value}");
Console.WriteLine($"Format: {barcode.Format}");
}
}
C#
¿Cómo acceder a resultados detallados de OCR y metadatos?
El objeto de resultados de IronOCR proporciona datos comprensivos que los desarrolladores avanzados pueden aprovechar para aplicaciones sofisticadas.
Cada OcrResult contiene colecciones jerárquicas: páginas, párrafos, líneas, palabras y caracteres. Todos los elementos incluyen metadatos detallados como ubicación, información de fuente, y puntuaciones de confianza.
Los elementos individuales (párrafos, palabras, códigos de barras) pueden ser exportados como imágenes o bitmaps para procesamiento adicional:
using System;using IronOcr;using IronSoftware.Drawing;// Configure with barcode supportIronTesseract ocr = new IronTesseract{Configuration = { ReadBarCodes = true }};using OcrInput input = new OcrInput();// Process multi-page documentint[] pageIndices = { 1, 2 };input.LoadImageFrames(@"img\Potter.tiff", pageIndices);OcrResult result = ocr.Read(input);// Navigate the complete results hierarchyforeach (var page in result.Pages){ // Page-level data int pageNumber = page.PageNumber; string pageText = page.Text; int pageWordCount = page.WordCount; // Extract page elements OcrResult.Barcode[] barcodes = page.Barcodes; AnyBitmap pageImage = page.ToBitmap(); double pageWidth = page.Width; double pageHeight = page.Height; foreach (var paragraph in page.Paragraphs) { // Paragraph properties int paragraphNumber = paragraph.ParagraphNumber; string paragraphText = paragraph.Text; double paragraphConfidence = paragraph.Confidence; var textDirection = paragraph.TextDirection; foreach (var line in paragraph.Lines) { // Line details including baseline information string lineText = line.Text; double lineConfidence = line.Confidence; double baselineAngle = line.BaselineAngle; double baselineOffset = line.BaselineOffset; foreach (var word in line.Words) { // Word-level data string wordText = word.Text; double wordConfidence = word.Confidence; // Font information (when available) if (word.Font != null) { string fontName = word.Font.FontName; double fontSize = word.Font.FontSize; bool isBold = word.Font.IsBold; bool isItalic = word.Font.IsItalic; } foreach (var character in word.Characters) { // Character-level analysis string charText = character.Text; double charConfidence = character.Confidence; // Alternative character choices for spell-checking OcrResult.Choice[] alternatives = character.Choices; } } } }}
using System;
using IronOcr;
using IronSoftware.Drawing;
// Configure with barcode support
IronTesseract ocr = new IronTesseract
{
Configuration = { ReadBarCodes = true }
};
using OcrInput input = new OcrInput();
// Process multi-page document
int[] pageIndices = { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageIndices);
OcrResult result = ocr.Read(input);
// Navigate the complete results hierarchy
foreach (var page in result.Pages)
{
// Page-level data
int pageNumber = page.PageNumber;
string pageText = page.Text;
int pageWordCount = page.WordCount;
// Extract page elements
OcrResult.Barcode[] barcodes = page.Barcodes;
AnyBitmap pageImage = page.ToBitmap();
double pageWidth = page.Width;
double pageHeight = page.Height;
foreach (var paragraph in page.Paragraphs)
{
// Paragraph properties
int paragraphNumber = paragraph.ParagraphNumber;
string paragraphText = paragraph.Text;
double paragraphConfidence = paragraph.Confidence;
var textDirection = paragraph.TextDirection;
foreach (var line in paragraph.Lines)
{
// Line details including baseline information
string lineText = line.Text;
double lineConfidence = line.Confidence;
double baselineAngle = line.BaselineAngle;
double baselineOffset = line.BaselineOffset;
foreach (var word in line.Words)
{
// Word-level data
string wordText = word.Text;
double wordConfidence = word.Confidence;
// Font information (when available)
if (word.Font != null)
{
string fontName = word.Font.FontName;
double fontSize = word.Font.FontSize;
bool isBold = word.Font.IsBold;
bool isItalic = word.Font.IsItalic;
}
foreach (var character in word.Characters)
{
// Character-level analysis
string charText = character.Text;
double charConfidence = character.Confidence;
// Alternative character choices for spell-checking
OcrResult.Choice[] alternatives = character.Choices;
}
}
}
}
}
ImportsSystemImportsIronOcrImportsIronSoftware.Drawing' Configure with barcode supportDim ocr As New IronTesseractWith { .Configuration = New TesseractConfigurationWith { .ReadBarCodes = True }}Using input As New OcrInput() ' Process multi-page document Dim pageIndices AsInteger() = {1, 2} input.LoadImageFrames("img\Potter.tiff", pageIndices) Dim result AsOcrResult = ocr.Read(input) ' Navigate the complete results hierarchy For Each page In result.Pages ' Page-level data Dim pageNumber AsInteger = page.PageNumber Dim pageText AsString = page.Text Dim pageWordCount AsInteger = page.WordCount ' Extract page elements Dim barcodes AsOcrResult.Barcode() = page.Barcodes Dim pageImage AsAnyBitmap = page.ToBitmap() Dim pageWidth AsDouble = page.Width Dim pageHeight AsDouble = page.Height For Each paragraph In page.Paragraphs ' Paragraph properties Dim paragraphNumber AsInteger = paragraph.ParagraphNumber Dim paragraphText AsString = paragraph.Text Dim paragraphConfidence AsDouble = paragraph.Confidence Dim textDirection = paragraph.TextDirection For Each line In paragraph.Lines ' Line details including baseline information Dim lineText AsString = line.Text Dim lineConfidence AsDouble = line.Confidence Dim baselineAngle AsDouble = line.BaselineAngle Dim baselineOffset AsDouble = line.BaselineOffset For Each word In line.Words ' Word-level data Dim wordText AsString = word.Text Dim wordConfidence AsDouble = word.Confidence ' Font information (when available) If word.FontIsNot Nothing Then Dim fontName AsString = word.Font.FontName Dim fontSize AsDouble = word.Font.FontSize Dim isBold AsBoolean = word.Font.IsBold Dim isItalic AsBoolean = word.Font.IsItalic End If For Each character In word.Characters ' Character-level analysis Dim charText AsString = character.Text Dim charConfidence AsDouble = character.Confidence ' Alternative character choices for spell-checking Dim alternatives AsOcrResult.Choice() = character.Choices Next Next Next Next NextEndUsing
Imports System
Imports IronOcr
Imports IronSoftware.Drawing
' Configure with barcode support
Dim ocr As New IronTesseract With {
.Configuration = New TesseractConfiguration With {
.ReadBarCodes = True
}
}
Using input As New OcrInput()
' Process multi-page document
Dim pageIndices As Integer() = {1, 2}
input.LoadImageFrames("img\Potter.tiff", pageIndices)
Dim result As OcrResult = ocr.Read(input)
' Navigate the complete results hierarchy
For Each page In result.Pages
' Page-level data
Dim pageNumber As Integer = page.PageNumber
Dim pageText As String = page.Text
Dim pageWordCount As Integer = page.WordCount
' Extract page elements
Dim barcodes As OcrResult.Barcode() = page.Barcodes
Dim pageImage As AnyBitmap = page.ToBitmap()
Dim pageWidth As Double = page.Width
Dim pageHeight As Double = page.Height
For Each paragraph In page.Paragraphs
' Paragraph properties
Dim paragraphNumber As Integer = paragraph.ParagraphNumber
Dim paragraphText As String = paragraph.Text
Dim paragraphConfidence As Double = paragraph.Confidence
Dim textDirection = paragraph.TextDirection
For Each line In paragraph.Lines
' Line details including baseline information
Dim lineText As String = line.Text
Dim lineConfidence As Double = line.Confidence
Dim baselineAngle As Double = line.BaselineAngle
Dim baselineOffset As Double = line.BaselineOffset
For Each word In line.Words
' Word-level data
Dim wordText As String = word.Text
Dim wordConfidence As Double = word.Confidence
' Font information (when available)
If word.Font IsNot Nothing Then
Dim fontName As String = word.Font.FontName
Dim fontSize As Double = word.Font.FontSize
Dim isBold As Boolean = word.Font.IsBold
Dim isItalic As Boolean = word.Font.IsItalic
End If
For Each character In word.Characters
' Character-level analysis
Dim charText As String = character.Text
Dim charConfidence As Double = character.Confidence
' Alternative character choices for spell-checking
Dim alternatives As OcrResult.Choice() = character.Choices
Next
Next
Next
Next
Next
End Using
Resumen
IronOCR proporciona a los desarrolladores de C# la implementación más avanzada del API Tesseract, funcionando sin problemas en plataformas Windows, Linux y Mac. Su capacidad de leer texto de imágenes utilizando IronOCR - incluso de documentos imperfectos - lo distingue de las soluciones básicas de OCR.
Las características únicas de la biblioteca incluyen lectura de códigos de barras integrada y la capacidad de exportar resultados como PDFs buscables o HOCR HTML, capacidades no disponibles en implementaciones estándar de Tesseract.
¿Listo para implementar la conversión de OCR de imagen a texto en C# en tus aplicaciones? Descarga IronOCR y comienza tu prueba gratuita hoy.
Preguntas Frecuentes
¿Cómo puedo convertir imágenes a texto en C# sin usar Tesseract?
Puedes usar IronOCR para convertir imágenes a texto en C# sin necesidad de Tesseract. IronOCR simplifica el proceso con métodos integrados que manejan la conversión de imagen a texto directamente.
¿Cómo mejoro la precisión del OCR en imágenes de baja calidad?
IronOCR proporciona filtros de imagen como Input.Deskew() y Input.DeNoise() que se pueden usar para mejorar imágenes de baja calidad corrigiendo la inclinación y reduciendo el ruido, mejorando así significativamente la precisión del OCR.
¿Cuáles son los pasos para extraer texto de un documento de varias páginas usando OCR en C#?
Para extraer texto de documentos de varias páginas, IronOCR te permite cargar y procesar cada página usando métodos como LoadPdf() para PDFs o files TIFF, convirtiendo efectivamente cada página a texto.
¿Es posible leer códigos de barras y texto simultáneamente desde una imagen?
Sí, IronOCR puede leer tanto texto como códigos de barras de una sola imagen. Puedes habilitar la lectura de códigos de barras con ocr.Configuration.ReadBarCodes = true, lo que permite la extracción tanto de datos de texto como de código de barras.
¿Cómo puedo configurar OCR para procesar documentos en varios idiomas?
IronOCR soporta más de 125 idiomas y te permite establecer un idioma principal usando ocr.Language y agregar idiomas adicionales con ocr.AddSecondaryLanguage() para el procesamiento de documentos multilingües.
¿Qué métodos están disponibles para exportar resultados de OCR en diferentes formatos?
IronOCR ofrece varios métodos para exportar resultados de OCR, como SaveAsSearchablePdf() para PDFs, SaveAsTextFile() para texto plano y SaveAsHocrFile() para formato HOCR HTML.
¿Cómo puedo optimizar la velocidad de procesamiento de OCR para archivos de imagen grandes?
Para optimizar la velocidad de procesamiento de OCR, usa el OcrLanguage.EnglishFast de IronOCR para un reconocimiento de idioma más rápido y define regiones específicas para OCR usando System.Drawing.Rectangle para reducir el tiempo de procesamiento.
¿Cómo manejo el procesamiento de OCR para archivos PDF protegidos?
Al tratar con PDFs protegidos, usa el método LoadPdf() junto con la contraseña correcta. IronOCR maneja PDFs basados en imágenes convirtiendo páginas a imágenes automáticamente para procesamiento OCR.
¿Qué debo hacer si los resultados de OCR no son exactos?
Si los resultados de OCR son inexactos, considera usar las funciones de mejora de imagen de IronOCR como Input.Deskew() y Input.DeNoise(), y asegúrate de que los paquetes de idiomas correctos estén instalados.
¿Puedo personalizar el proceso de OCR para excluir ciertos caracteres?
Sí, IronOCR permite la personalización del proceso de OCR utilizando la propiedad BlackListCharacters para excluir caracteres específicos, mejorando la precisión y la velocidad de procesamiento al centrarse solo en el texto relevante.
Jacob Mellor es Director de Tecnología de Iron Software y un ingeniero visionario pionero en la tecnología C# PDF. Como desarrollador original de la base de código principal de Iron Software, ha dado forma a la arquitectura de productos de la empresa desde su creación, transformándola, junto con el director ejecutivo Cameron Rimington, en una empresa de más de 50 personas que presta servicios a la NASA, Tesla y organismos gubernamentales de todo el mundo.