Introducción al OCR en C# y VB.NET

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

IronOCR es una biblioteca de software C# que permite a los desarrolladores de software de la plataforma .NET reconocer y leer texto de imágenes y documentos PDF. Es una biblioteca OCR pura .NET que utiliza el motor Tesseract más avanzado conocido, en cualquier lugar.

Instalación

Instalar con el Administrador de paquetes NuGet

Instala IronOcr en Visual Studio o en la línea de comandos con el Administrador de Paquetes NuGet. En Visual Studio, navega a la consola con:

  • Herramientas ->
  • Administrador de Paquetes NuGet ->
  • Consola de Paquetes
Install-Package IronOcr

Y visita IronOCR en NuGet para más información sobre actualizaciones de versiones e instalación.

Hay otros paquetes NuGet de IronOCR disponibles para diferentes plataformas:

IronOcr.Extensions.AdvancedScan para Linux y macOS

Este paquete es para usuarios que usan Linux y Mac y también quieren las características avanzadas para IronOcr.

Solución de problemas

Con la nueva actualización de este paquete, IronOCR combina las dependencias de OpenCV dentro del paquete para simplificarlo, por lo tanto, si los desarrolladores que actualmente importan las dependencias de OpenCV reciben el siguiente error.

The type of namespace name `OpenCvSharp` could not be found(are you missing a using directive or an assembly reference)

Puedes eliminar de manera segura los espacios de nombres de OpenCV, y el problema se resolverá.

Descargue el IronOCR .ZIP

También puedes optar por descargar IronOCR a través de un archivo .ZIP. Haz clic para descargar directamente el DLL. Una vez que hayas descargado el .zip:

Instrucciones para la instalación de .NET Framework 4.0+:

  • Incluye el IronOcr.dll en la carpeta net40 en tu proyecto
  • Y luego agrega referencias de ensamblaje a:

    • System.Configuration
    • System.Drawing
    • System.Web

Instrucciones para .NET Standard, .NET Core 2.0+ y .NET 5

  • Incluye el IronOcr.dll en la carpeta netstandard2.0 en tu proyecto
  • Y luego agrega una referencia al paquete NuGet:

    • System.Drawing.Common 4.7 o superior

Descargue el instalador de IronOCR (solo Windows)

Otra opción es descargar nuestro instalador de IronOCR que instalará todos los recursos necesarios para que IronOCR funcione de inmediato. Ten en cuenta que esta opción es solo para sistemas Windows. Para descargar el instalador, por favor haz clic aquí. Una vez que hayas descargado el .zip:

Instrucciones para la instalación de .NET Framework 4.0+:

  • Incluye el IronOcr.dll en la carpeta net40 en tu proyecto
  • Y luego agrega referencias de ensamblaje a:

    • System.Configuration
    • System.Drawing
    • System.Web

Instrucciones para .NET Standard, .NET Core 2.0+ y .NET 5

  • Incluye el IronOcr.dll en la carpeta netstandard2.0 en tu proyecto
  • Y luego agrega una referencia al paquete NuGet:

    • System.Drawing.Common 4.7 o superior

¿Por qué elegir IronOCR?

IronOCR es una biblioteca de software .NET fácil de instalar, completa y bien documentada.

Elige IronOCR para lograr 99.8%+ de precisión en OCR sin usar servicios web externos, tarifas continuas o enviar documentos confidenciales a través de internet.

Por qué los desarrolladores de C# eligen IronOCR en lugar de Vanilla Tesseract:

  • Instalación como un solo DLL o NuGet
  • Incluye motores Tesseract 5, 4, y 3 listos para usar.
  • Precisión 99.8% supera significativamente a Tesseract regular.
  • Velocidad asombrosa y multitarea
  • Compatible con MVC, WebApp, Desktop, Console y aplicativos de servidor
  • Sin Exes o código C++ para trabajar
  • Soporte completo de OCR en PDF
  • Realiza OCR en casi cualquier archivo de imagen o PDF
  • Soporte completo para .NET Core, Standard y Framework
  • Despliegue en Windows, Mac, Linux, Azure, Docker, Lambda, AWS
  • Lee códigos de barras y códigos QR
  • Exporta resultados de OCR como XHTML
  • Exporta OCR a documentos PDF buscables
  • Soporte para multihilo
  • 125 idiomas internacionales todos gestionados a través de NuGet o archivos OcrData
  • Extrae Imágenes, Coordenadas, Estadísticas y Fuentes. No solo texto.
  • Se puede usar para redistribuir Tesseract OCR dentro de aplicaciones comerciales y propietarias.

IronOCR destaca al trabajar con imágenes del mundo real y documentos imperfectos, como fotografías o escaneos de baja resolución que pueden tener ruido digital o imperfecciones.

Otras bibliotecas de OCR gratuitas para la plataforma .NET, como otras API de Tesseract para .NET y servicios web, no funcionan tan bien en estos casos del mundo real.

OCR con Tesseract 5: empieza a codificar en C

El siguiente ejemplo de código muestra lo fácil que es leer texto de una imagen usando C# o VB .NET.

Línea única

:path=/static-assets/ocr/content-code-examples/get-started/get-started-1.cs
string Text = new IronTesseract().Read(@"img\Screenshot.png").Text;
Dim Text As String = (New IronTesseract()).Read("img\Screenshot.png").Text
$vbLabelText   $csharpLabel

Hola mundo configurable

:path=/static-assets/ocr/content-code-examples/get-started/get-started-2.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Add multiple images
input.LoadImage("images/sample.jpeg");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Add multiple images
input.LoadImage("images/sample.jpeg")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Reconocimiento óptico de caracteres (OCR) de PDF en C

El mismo enfoque se puede utilizar para extraer texto de cualquier documento PDF.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-3.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password: "password");

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);

// 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' We can also select specific PDF page numbers to OCR
input.LoadPdf("example.pdf", Password:= "password")

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)

' 1 page for every page of the PDF
Console.WriteLine($"{result.Pages.Length} Pages")
$vbLabelText   $csharpLabel

OCR para TIFF de varias páginas

:path=/static-assets/ocr/content-code-examples/get-started/get-started-4.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("multi-frame.tiff", pageindices);
OcrResult result = 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("multi-frame.tiff", pageindices)
Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Códigos de barras y QR

Las instancias de la clase OcrResult.OcrBarcode brindan al desarrollador información detallada sobre cada código de barras escaneado. Las instancias de la clase OcrResult.OcrBarcode proporcionan al desarrollador información detallada sobre cada código de barras escaneado.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-5.cs
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)
{
    // type and location properties also exposed
    Console.WriteLine(Barcode.Value);
}
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
		' type and location properties also exposed
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
$vbLabelText   $csharpLabel

OCR en áreas específicas de imágenes

Todos los métodos de escaneo y lectura de IronOCR proporcionan la capacidad de especificar exactamente qué parte de una página o páginas deseamos leer el texto. Esto es muy útil cuando miramos formularios estandarizados y puede ahorrar mucho tiempo y mejorar la eficiencia.

Para usar regiones de recorte, necesitaremos agregar una referencia de sistema a System.Drawing para poder usar el objeto System.Drawing.Rectangle.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-6.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();

// Dimensions are in pixel
var contentArea = new System.Drawing.Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

input.LoadImage("document.png", contentArea);

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' Dimensions are in pixel
Private contentArea = New System.Drawing.Rectangle() With {
	.X = 215,
	.Y = 1250,
	.Height = 280,
	.Width = 1335
}

input.LoadImage("document.png", contentArea)

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

OCR para escaneos de baja calidad

La clase OcrInput de IronOCR puede corregir escaneos que el Tesseract normal no puede leer.

:path=/static-assets/ocr/content-code-examples/get-started/get-started-7.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\Potter.tiff", pageindices);

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = 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.tiff", pageindices)

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Exportar resultados de OCR como un PDF con capacidad de búsqueda

:path=/static-assets/ocr/content-code-examples/get-started/get-started-8.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Quarterly Report";
input.LoadImage("image1.jpeg");
input.LoadImage("image2.png");
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("image3.gif", pageindices);

OcrResult result = ocr.Read(input);
result.SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Quarterly Report"
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)
result.SaveAsSearchablePdf("searchable.pdf")
$vbLabelText   $csharpLabel

Conversión de TIFF a PDF con capacidad de búsqueda

:path=/static-assets/ocr/content-code-examples/get-started/get-started-9.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("example.tiff", pageindices);
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames("example.tiff", pageindices)
ocr.Read(input).SaveAsSearchablePdf("searchable.pdf")
$vbLabelText   $csharpLabel

Exportar resultados de OCR como HTML

:path=/static-assets/ocr/content-code-examples/get-started/get-started-10.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.Title = "Html Title";
input.LoadImage("image1.jpeg");

OcrResult Result = ocr.Read(input);
Result.SaveAsHocrFile("results.html");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.Title = "Html Title"
input.LoadImage("image1.jpeg")

Dim Result As OcrResult = ocr.Read(input)
Result.SaveAsHocrFile("results.html")
$vbLabelText   $csharpLabel

Filtros de mejora de imágenes OCR

IronOCR proporciona filtros únicos a objetos OcrInput para mejorar el rendimiento de OCR.

Ejemplo de código de mejora de imagen

:path=/static-assets/ocr/content-code-examples/get-started/get-started-11.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();
using OcrInput input = new OcrInput();
input.LoadImage("LowQuality.jpeg");

// fixes digital noise and poor scanning
input.DeNoise();

// fixes rotation and perspective
input.Deskew();

OcrResult result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using
input.LoadImage("LowQuality.jpeg")

' fixes digital noise and poor scanning
input.DeNoise()

' fixes rotation and perspective
input.Deskew()

Dim result As OcrResult = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Lista de filtros de imagen OCR

Filtros de entrada para mejorar el rendimiento de OCR que están integrados en IronOCR incluyen:

  • OcrInput.Rotate(double degrees) - Rota imágenes por un número de grados en el sentido de las agujas del reloj. Para rotación en sentido contrario, usa números negativos.
  • OcrInput.Binarize() - Este filtro convierte cada píxel en blanco o negro sin espacio intermedio, lo que potencialmente mejora el rendimiento de OCR en imágenes de muy bajo contraste.
  • OcrInput.ToGrayScale() - Convierte cada píxel en un tono de escala de grises. Puede que no mejore la precisión, pero podría mejorar la velocidad.
  • OcrInput.Contrast() - Aumenta automáticamente el contraste, a menudo mejorando la velocidad y la precisión en escaneos de bajo contraste.
  • OcrInput.DeNoise() - Elimina el ruido digital, recomendado solo cuando se espera ruido.
  • OcrInput.Invert() - Invierte todos los colores (blanco se convierte en negro y viceversa).
  • OcrInput.Dilate() - Avanza la morfología, agrega píxeles a los límites de los objetos, opuesto a Erode.
  • OcrInput.Erode() - Avanza la morfología, elimina píxeles de los límites de los objetos, opuesto a Dilate.
  • OcrInput.Deskew() - Rota una imagen para orientarla correctamente. Útil porque la tolerancia al sesgo de Tesseract es limitada.
  • OcrInput.EnhanceResolution - Mejora la resolución de imágenes de baja calidad. Esta configuración generalmente se utiliza para gestionar automáticamente la entrada de baja DPI.
  • EnhanceResolution detecta imágenes de baja resolución (por debajo de 275 dpi), las escala y afila texto para obtener mejores resultados de OCR. Aunque consume tiempo, a menudo reduce el tiempo total de la operación de OCR.
  • Language - Soporta selección de entre 22 paquetes de idiomas internacionales.
  • Strategy - Permite la selección entre estrategias rápidas y menos precisas o avanzadas (usando IA para la precisión) basadas en la relación estadística de las palabras.
  • ColorSpace - Elige OCR en escala de grises o color; gris es óptimo, pero el color puede ser mejor en algunos contrastes. - DetectWhiteTextOnDarkBackgrounds - Ajusta para imágenes negativas, detectando texto blanco en fondos oscuros.
  • InputImageType - Guía a la biblioteca OCR, especificando si está trabajando en un documento completo o un fragmento.
  • RotateAndStraighten - Permite a IronOCR manejar correctamente documentos rotados o afectados por distorsiones de perspectiva.
  • ReadBarcodes - Lee automáticamente códigos de barras y códigos QR simultáneamente con el escaneo de texto sin añadir tiempo significativo.
  • ColorDepth - Determina bits por píxel para la profundidad de color en el proceso de OCR.
  • ColorDepth - Determina los bits por píxel para la profundidad de color en el proceso de OCR. ## 125 Paquetes de Idiomas

125 paquetes de idiomas

IronOCR admite 125 idiomas internacionales a través de paquetes de idiomas que se distribuyen como DLLs, disponibles para descarga desde este sitio web, o desde el Administrador de Paquetes NuGet.

Existen paquetes para MRZ, cheques MICR, datos financieros, matrículas, etc., además de archivos "traineddata" personalizados de Tesseract. ### Ejemplo de Idioma

Ejemplo de idioma

// Reference to the path of the source file that demonstrates setting language packs for OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-12.cs
// Reference to the path of the source file that demonstrates setting language packs for OCR
using IronOcr;

// PM> Install IronOcr.Languages.Arabic
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.Arabic;

using OcrInput input = new OcrInput();

var pageindices = new int[] { 1, 2 };
input.LoadImageFrames("img/arabic.gif", pageindices);
// 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");
' Reference to the path of the source file that demonstrates setting language packs for OCR
Imports IronOcr

' PM> Install IronOcr.Languages.Arabic
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.Arabic

Using input As New OcrInput()
	
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img/arabic.gif", pageindices)
	' 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
$vbLabelText   $csharpLabel

Ejemplo de varios idiomas

Objetos de Resultados de OCR Detallados

// Reference to the path of the source file that demonstrates multi-language OCR
:path=/static-assets/ocr/content-code-examples/get-started/get-started-13.cs
// Reference to the path of the source file that demonstrates multi-language OCR
using IronOcr;

// PM> Install IronOcr.Languages.ChineseSimplified
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.ChineseSimplified;

// We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English);

using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
' Reference to the path of the source file that demonstrates multi-language OCR
Imports IronOcr

' PM> Install IronOcr.Languages.ChineseSimplified
Private ocr As New IronTesseract()
ocr.Language = OcrLanguage.ChineseSimplified

' We can add any number of languages
ocr.AddSecondaryLanguage(OcrLanguage.English)

Using input As New OcrInput()
	input.LoadPdf("multi-language.pdf")
	Dim result As OcrResult = ocr.Read(input)
	result.SaveAsTextFile("results.txt")
End Using
$vbLabelText   $csharpLabel

Objetos de resultados de OCR detallados

Los desarrolladores acceden a la propiedad Text para el texto escaneado. Generalmente, los desarrolladores acceden a la propiedad Text para obtener el texto escaneado. ## Rendimiento

// Reference to the path of the source file demonstrating detailed OCR result object usage
:path=/static-assets/ocr/content-code-examples/get-started/get-started-14.cs
// Reference to the path of the source file demonstrating detailed OCR result object usage
using IronOcr;

IronTesseract ocr = new IronTesseract();

// Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = true;
using OcrInput input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(@"img\sample.tiff", pageindices);

OcrResult result = ocr.Read(input);
var pages = result.Pages;
var words = pages[0].Words;
var barcodes = result.Barcodes;
// Explore here to find a massive, detailed API:
// - Pages, Blocks, Paraphaphs, Lines, Words, Chars
// - Image Export, Fonts Coordinates, Statistical Data, Tables
' Reference to the path of the source file demonstrating detailed OCR result object usage
Imports IronOcr

Private ocr As New IronTesseract()

' Must be set to true to read barcode
ocr.Configuration.ReadBarCodes = True
Using input As New OcrInput()
	Dim pageindices = New Integer() { 1, 2 }
	input.LoadImageFrames("img\sample.tiff", pageindices)
	
	Dim result As OcrResult = ocr.Read(input)
	Dim pages = result.Pages
	Dim words = pages(0).Words
	Dim barcodes = result.Barcodes
	' Explore here to find a massive, detailed API:
	' - Pages, Blocks, Paraphaphs, Lines, Words, Chars
	' - Image Export, Fonts Coordinates, Statistical Data, Tables
End Using
$vbLabelText   $csharpLabel

Actuación

La velocidad es increíble: IronOcr.2020+ es hasta 10 veces más rápido y comete más de 250% menos errores que versiones anteriores.

Aprende Más

Más información

Un referencia completa de API para desarrolladores .NET también está disponible.

También está disponible una referencia API completa para desarrolladores .NET .

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 5,167,857 | Version: 2025.11 recién lanzado