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

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

// 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")
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)
{
    // 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
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();

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

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

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

// 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
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
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.