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

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. Se trata de una biblioteca OCR .NET pura que utiliza el motor Tesseract más avanzado conocido, en cualquier lugar.

Instalación

Instalación con el gestor de paquetes NuGet

Instale IronOcr en Visual Studio o en la línea de comandos con el gestor de paquetes NuGet. En Visual Studio, navegue a la consola con:

  • Herramientas ->
  • Gestor de paquetes NuGet ->
  • Consola del gestor de paquetes
Install-Package IronOcr

Y echa un vistazo a IronOcr en NuGet para obtener más información sobre las actualizaciones de versión y la instalación.

Existen otros Paquetes NuGet IronOCR disponibles para diferentes plataformas:

Descargar el archivo .ZIP de IronOCR

También puede optar por descargar IronOCR mediante un archivo .ZIP. Haz clic para descargar directamente la DLL. Una vez descargado el .zip:

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

  • Incluya IronOcr.dll en la carpeta net40 de su proyecto.
  • Y luego añadir referencias de la Asamblea a:
    • Sistema.Configuración
    • Sistema.Dibujo
    • Sistema.Web

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

  • Incluya IronOcr.dll en la carpeta netstandard2.0 de su proyecto.
  • Y luego añadir una referencia de paquete NuGet a:
    • System.Drawing.Common 4.7 o superior

Descargar el instalador de IronOCR (sólo para Windows)

Otra opción es descargar nuestro instalador de IronOCR, que instalará todos los recursos necesarios para que IronOCR funcione de forma inmediata. Tenga en cuenta que esta opción sólo es válida para sistemas Windows. Para descargar el instalador pulse aquí. Una vez descargado el .zip:

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

  • Incluya IronOcr.dll en la carpeta net40 de su proyecto.
  • Y luego añadir referencias de la Asamblea a:
    • Sistema.Configuración
    • Sistema.Dibujo
    • Sistema.Web

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

  • Incluya IronOcr.dll en la carpeta netstandard2.0 de su proyecto.
  • Y luego añadir una referencia de paquete NuGet a:
    • 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.

Elija IronOCR para obtener una precisión de OCR superior al 99,8%** sin necesidad de utilizar servicios web externos, pagar cuotas periódicas ni enviar documentos confidenciales por Internet.

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

  • Instalar como una única DLL o NuGet
  • Incluye para Tesseract 5 , 4 y 3 Motores fuera de la caja.
  • La precisión 99,8% supera significativamente a la de Tesseract normal.
  • Velocidad vertiginosa y multihilo
  • Compatible con aplicaciones MVC, WebApp, de escritorio, de consola y de servidor
  • Sin Exes ni código C++ con los que trabajar
  • Compatibilidad total con PDF OCR
  • Para realizar el OCR de casi cualquier archivo de imagen o PDF
  • Compatibilidad total con .NET Core, Standard y FrameWork
  • Implementación en Windows, Mac, Linux, Azure, Docker, Lambda, AWS
  • Leer códigos de barras y códigos QR
  • Exportar OCR a XHTML
  • Exportación de OCR a documentos PDF con función de búsqueda
  • Soporte multihilo
  • 125 idiomas internacionales gestionados mediante archivos NuGet u OcrData
  • Extraiga imágenes, coordenadas, estadísticas y fuentes. No sólo texto.
  • Puede utilizarse para redistribuir Tesseract OCR dentro de aplicaciones comerciales y propietarias.

IronOCR brilla cuando se trabaja con imágenes del mundo real y documentos imperfectos, como fotografías, o escaneados de baja resolución que pueden tener ruido digital o imperfecciones.

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

OCR con Tesseract 5 - Empezar a codificar en C#

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

OneLiner

: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
VB   C#

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();

// Añadir varias imágenes
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

' Añadir varias imágenes
input.LoadImage("images/sample.jpeg")

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

C# PDF OCR

El mismo método puede utilizarse 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();

// También podemos seleccionar números de página específicos del PDF para el OCR
input.LoadPdf("example.pdf", Password: "password");

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

// 1 página por cada página del PDF
Console.WriteLine($"{result.Pages.Length} Pages");
Imports IronOcr

Private ocr As New IronTesseract()
Private OcrInput As using

' También podemos seleccionar números de página específicos del PDF para el OCR
input.LoadPdf("example.pdf", Password:= "password")

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

' 1 página por cada página del PDF
Console.WriteLine($"{result.Pages.Length} Pages")
VB   C#

OCR para TIFF multipágina

: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)
VB   C#

Códigos de barras y QR

Una característica única de IronOCR es que puede leer códigos de barras y códigos QR de los documentos mientras escanea el texto. 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)
{
    // propiedades de tipo y ubicación también expuestas
    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
		' propiedades de tipo y ubicación también expuestas
		Console.WriteLine(Barcode.Value)
	Next Barcode
End Using
VB   C#

OCR en áreas específicas de imágenes

Todos los métodos de escaneo y lectura de IronOCR'ofrecen la posibilidad de especificar exactamente de qué parte de una página o páginas deseamos leer el texto. Esto es muy útil cuando se trata de formularios normalizados y puede ahorrar muchísimo tiempo y mejorar la eficacia.

Para utilizar las regiones de recorte, necesitaremos añadir una referencia de sistema a System.Drawing para poder utilizar 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();

// Dimensiones en píxeles
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

' Dimensiones en píxeles
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)
VB   C#

OCR para escaneados de baja calidad

La clase IronOCR OcrInput puede fijar escaneos que 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);

// corrige el ruido digital y el escaneado deficiente
input.DeNoise();

// fija la rotación y la perspectiva
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)

' corrige el ruido digital y el escaneado deficiente
input.DeNoise()

' fija la rotación y la perspectiva
input.Deskew()

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

Exportar resultados de OCR como PDF con función 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")
VB   C#

Conversión de TIFF a PDF con función 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")
VB   C#

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")
VB   C#

Filtros de mejora de imágenes OCR

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

Ejemplo de código de mejora de imágenes

: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");

// corrige el ruido digital y el escaneado deficiente
input.DeNoise();

// fija la rotación y la perspectiva
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")

' corrige el ruido digital y el escaneado deficiente
input.DeNoise()

' fija la rotación y la perspectiva
input.Deskew()

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

Lista de filtros de imagen OCR

Entre los filtros de entrada para mejorar el rendimiento del OCR que incorpora IronOCR se incluyen:

  • OcrInput.Rotate( grados dobles) Gira las imágenes un número de grados en el sentido de las agujas del reloj. Para girar en sentido antihorario, utilice números negativos.
  • OcrInput.Binarize() Este filtro de imagen convierte cada píxel en blanco o negro sin término medio. Puede mejorar el rendimiento del OCR en casos de muy bajo contraste del texto con el fondo.
  • OcrInput.ToGrayScale() - Este filtro de imagen convierte cada píxel en un tono de escala de grises. Es poco probable que mejore la precisión del OCR, pero puede mejorar la velocidad
  • OcrInput.Contraste() - Aumenta el contraste automáticamente. Este filtro suele mejorar la velocidad y la precisión del OCR en escaneados de bajo contraste.
  • OcrInput.DeNoise() Elimina el ruido digital. Este filtro sólo debe utilizarse cuando se espera ruido.
  • OcrInput.Invert() Invierte todos los colores. Por ejemplo, el blanco se convierte en negro: el negro se convierte en blanco.
  • OcrInput.Dilate() Morfología avanzada. La dilatación añade píxeles a los límites de los objetos de una imagen. Enfrente de Erode
  • OcrInput.Erode() Morfología avanzada. Erosión elimina píxeles en los límites del objetoOpuesto de Dilatar
  • OcrInput.Deskew() - Gira una imagen para que quede al derecho y ortogonal. Esto resulta muy útil para el OCR, ya que la tolerancia de Tesseract para los escaneados sesgados puede ser de tan sólo 5 grados.
  • OcrInput.EnhanceResolution - Mejora la resolución de imágenes de baja calidad. Este filtro no suele ser necesario porque OcrInput.MinimumDPI y OcrInput.TargetDPI detectarán y resolverán automáticamente las entradas de baja resolución.
  • MejorarResolución es un ajuste que detecta automáticamente las imágenes de baja resolución.(que estén por debajo de 275 ppp) y automáticamente aumenta la escala de la imagen y luego agudiza todo el texto para que pueda ser leído perfectamente por una biblioteca de OCR. Aunque esta operación consume tiempo en sí misma, suele reducir el tiempo total de una operación de OCR en una imagen.
  • Idioma IronOCR admite 22 paquetes de idiomas internacionales, y la configuración de idioma puede utilizarse para seleccionar uno o varios idiomas que se aplicarán a una operación de OCR.
  • Estrategia IronOCR admite dos estrategias. Podemos optar por un escaneado rápido y menos preciso de un documento, o utilizar una estrategia avanzada que utiliza algunos modelos de inteligencia artificial para mejorar automáticamente la precisión del texto OCR examinando la relación estadística de las palabras entre sí en una frase.
  • ColorSpace es un ajuste mediante el cual podemos elegir realizar el OCR en escala de grises o en color. Por lo general, la escala de grises es la mejor opción. Sin embargo, a veces, cuando hay textos o fondos de tono similar pero color muy diferente, un espacio de color a todo color proporcionará mejores resultados.
  • **En general, todas las bibliotecas de OCR esperan ver texto negro sobre fondo blanco. Esta configuración permite a IronOCR detectar automáticamente los negativos, o páginas oscuras con texto blanco, y leerlos.
  • **Este ajuste permite al desarrollador guiar a la biblioteca de OCR en cuanto a si está mirando un documento completo o un fragmento, como una captura de pantalla.
  • RotateAndStraighten es una configuración avanzada que permite a IronOCR la capacidad única de leer documentos que no sólo están rotados, sino que quizás contienen perspectiva, como fotografías de documentos de texto.
  • ReadBarcodes es una función útil que permite a IronOCR leer automáticamente códigos de barras y códigos QR en las páginas como también lee texto, sin añadir una gran carga de tiempo adicional.
  • **Este parámetro determina cuántos bits por píxel utilizará la biblioteca OCR para determinar la profundidad de un color. Una mayor profundidad de color puede aumentar la calidad del OCR, pero también aumentará el tiempo necesario para que la operación de OCR se complete.

125 Paquetes de idiomas

IronOCR soporta 125 idiomas internacionales a través de paquetes de idiomas que se distribuyen como DLLs, que pueden ser descargado de este sitio webo también del Gestor de paquetes NuGet.

Idiomas: alemán, francés, inglés, chino, japonés y muchos más. Existen paquetes de idiomas especializados para pasaportes MRZ, cheques MICR, datos financieros, matrículas y muchos más. También puede utilizar cualquier archivo tesseract ".traineddata", incluidos los creados por usted mismo.

Ejemplo de lengua

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

// PM> Instalar 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);
// Añadir filtros de imagen si es necesario
// En este caso, aunque la entrada sea de muy baja calidad
// IronTesseract puede leer lo que Tesseract convencional no puede.
OcrResult result = ocr.Read(input);
// La consola no puede imprimir árabe en Windows fácilmente.
// En su lugar, guardemos en disco.
result.SaveAsTextFile("arabic.txt");
Imports IronOcr

' PM> Instalar 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)
	' Añadir filtros de imagen si es necesario
	' En este caso, aunque la entrada sea de muy baja calidad
	' IronTesseract puede leer lo que Tesseract convencional no puede.
	Dim result As OcrResult = ocr.Read(input)
	' La consola no puede imprimir árabe en Windows fácilmente.
	' En su lugar, guardemos en disco.
	result.SaveAsTextFile("arabic.txt")
End Using
VB   C#

Ejemplo de varios idiomas

También es posible realizar el OCR en varios idiomas al mismo tiempo. Esto puede ayudar mucho a obtener metadatos y urls en inglés en documentos Unicode.

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

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

// Podemos añadir cualquier número de idiomas
ocr.AddSecondaryLanguage(OcrLanguage.English);

using OcrInput input = new OcrInput();
input.LoadPdf("multi-language.pdf");
OcrResult result = ocr.Read(input);
result.SaveAsTextFile("results.txt");
Imports IronOcr

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

' Podemos añadir cualquier número de idiomas
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
VB   C#

Objetos detallados de los resultados del OCR

IronOCR devuelve un objeto de resultado OCR para cada operación OCR. Generalmente, los desarrolladores sólo utilizan la propiedad text de este objeto para obtener el texto escaneado de la imagen. Sin embargo, el DOM de resultados OCR es mucho más avanzado que esto.

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

IronTesseract ocr = new IronTesseract();

// Debe establecerse en true para leer el código de barras
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 aquí para encontrar una API masiva y detallada:
// - Páginas, Bloques, Parafabetos, Líneas, Palabras, Caracteres
// - Exportación de imágenes, coordenadas de fuentes, datos estadísticos, tablas
Imports IronOcr

Private ocr As New IronTesseract()

' Debe establecerse en true para leer el código de barras
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 aquí para encontrar una API masiva y detallada:
	' - Páginas, Bloques, Parafabetos, Líneas, Palabras, Caracteres
	' - Exportación de imágenes, coordenadas de fuentes, datos estadísticos, tablas
End Using
VB   C#

Rendimiento

IronOCR funciona desde el primer momento sin necesidad de ajustar el rendimiento o modificar en profundidad las imágenes de entrada.

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

Más información

Para obtener más información sobre OCR en C#, VB, F# o cualquier otro lenguaje .NET, consulte lea nuestros tutoriales comunitariosque ofrecen ejemplos reales de cómo puede utilizarse IronOCR y pueden mostrar los matices de cómo sacar el máximo partido a esta biblioteca.

Un completo Referencia de API para desarrolladores .NET también está disponible.