Guía de uso de los filtros IronOCR

IronOCR dispone de las herramientas necesarias para leer imágenes que puedan necesitar algún tratamiento previo en forma de filtros. Puedes elegir entre una amplia gama de filtros que pueden manipular tus imágenes para que sean procesables.

Biblioteca NuGet C# para OCR

Instalar con NuGet

Install-Package IronOcr
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

Lista de filtros de imagen OCR

Los siguientes filtros de imagen pueden mejorar realmente el rendimiento:

  • Filtros para cambiar la orientación de la imagen
    • Girar - 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.
    • Deshacer - Gira una imagen para que quede al derecho y ortogonal. Esto resulta muy útil para el reconocimiento óptico de caracteres, ya que la tolerancia de Tesseract a los escaneados sesgados puede ser de tan sólo 5 grados.
    • Escala - Escala proporcionalmente las páginas de entrada Ocr.
  • Filtros para manipular los colores de las imágenes
    • Binarizar - 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.
    • AEscalaDeGris - 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
    • Invertir - Invierte todos los colores. Por ejemplo, el blanco se convierte en negro: el negro se convierte en blanco.
    • ReemplazarColor - Reemplaza un color dentro de una imagen por otro color con un umbral determinado.
  • Filtros para intentar mejorar el Contraste en una Imagen
    • Contraste - Aumenta el contraste automáticamente. Este filtro suele mejorar la velocidad y la precisión del OCR en escaneados de bajo contraste.
    • Dilatar - Morfología avanzada. La dilatación añade píxeles a los límites de los objetos de una imagen. Enfrente de Erode
    • Erode - Morfología avanzada. La erosión elimina los píxeles de los límites del objeto. Opuesto a Dilatar
  • Filtros para intentar reducir el ruido de la imagen
    • Enfocar - Enfoca los documentos OCR borrosos y aplana los canales alfa a blanco.
    • DeNoise - Elimina el ruido digital. Este filtro sólo debe utilizarse cuando se espera ruido.
    • DeepCleanBackgroundNoise - Eliminación de ruido de fondo intenso. Utilice este filtro sólo en caso de que se conozca el ruido de fondo extremo del documento, ya que este filtro también corre el riesgo de reducir la precisión del OCR de los documentos limpios, y es muy costoso para la CPU.
    • MejorarResolución - Mejora la resolución de las 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.

Ejemplo de filtro y uso

En el siguiente ejemplo, se muestra cómo aplicar filtros en el código

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-1.cs
using IronOcr;
using System;

var ocr = new IronTesseract();
using var input = new OcrInput();
input.LoadImage("my_image.png");
input.Deskew();

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

Private ocr = New IronTesseract()
Private input = New OcrInput()
input.LoadImage("my_image.png")
input.Deskew()

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

Depurar filtro / ¿Qué hace el filtro?

Si tiene dificultades para leer imágenes o códigos de barras en su programa. Existe una forma de guardar una imagen de un resultado filtrado dentro de su programa. De esta forma puedes depurar y ver exactamente qué hace cada filtro y cómo está manipulando tu imagen.

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-2.cs
using IronOcr;
using System;

var file = "skewed_image.tiff";
var ocr = new IronTesseract();
using var input = new OcrInput();
var pageindices = new int[] { 1, 2 };
input.LoadImageFrames(file, pageindices);
//  Aquí aplicamos el filtro: Deskew
input.Deskew();

//  Guardar la entrada con filtro(s) aplicado(s)
input.SaveAsImages("my_deskewed");

//  Leemos e imprimimos el texto en la consola
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private file = "skewed_image.tiff"
Private ocr = New IronTesseract()
Private input = New OcrInput()
Private pageindices = New Integer() { 1, 2 }
input.LoadImageFrames(file, pageindices)
'  Aquí aplicamos el filtro: Deskew
input.Deskew()

'  Guardar la entrada con filtro(s) aplicado(s)
input.SaveAsImages("my_deskewed")

'  Leemos e imprimimos el texto en la consola
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
VB   C#

Filtrar casos de uso

Gire

Referencia API

Explicación del filtro

Rotar es un filtro que se utiliza para establecer manualmente una rotación conocida a una imagen para acercarla a la recta. IronOCR dispone de una función para ejecutar Deskew()Sin embargo, el grado de tolerancia es bastante estrecho y se utiliza mejor para imágenes casi perfectamente rectas. (dentro de 15 grados más o menos). Para las imágenes de entrada que están a 90 grados, o boca abajo, debemos llamar aRotar()`.

Ejemplo de caso práctico

Este es un ejemplo de llamada a Rotar para corregir una imagen invertida:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-3.cs
using IronOcr;
using System;

var image = "screenshot.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
//  Cargar al menos una imagen
input.LoadImage(image);

//  Girar 180 grados porque la imagen está al revés
input.Rotate(180);

//  Leer imagen en variable: resultado
var result = ocr.Read(input);

//  Ejemplo de impresión en consola
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "screenshot.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
'  Cargar al menos una imagen
input.LoadImage(image)

'  Girar 180 grados porque la imagen está al revés
input.Rotate(180)

'  Leer imagen en variable: resultado
Dim result = ocr.Read(input)

'  Ejemplo de impresión en consola
Console.WriteLine(result.Text)
VB   C#

Antes de Input.Rotate(180) After Input.Rotate(180)


Deskew

Referencia API

Explicación del filtro

Utiliza una transformada de Hough para intentar enderezar una imagen dentro de ciertos grados de tolerancia. Esto es importante para las imágenes que no están completamente rectas, ya que a veces un documento inclinado puede provocar una lectura errónea.

Nota: Este método devuelve un booleano que es verdadero si el filtro se aplicó, y falso si falló al no poder detectar la orientación de la imagen. Esto fallará si la página no tiene contenidos en los que basar la orientación.

Ejemplo de caso práctico

Este es un ejemplo de llamada a Deskew para corregir una imagen sesgada:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-4.cs
using IronOcr;
using System;

var image = @"paragraph_skewed.png";
var ocr = new IronTesseract();
using var input = new OcrInput();
//  Cargar al menos una imagen
input.LoadImage(image);

//  Aplique el desbarbado con un chasquido de 15 grados
bool didDeskew = input.Deskew(15);
if (didDeskew)
{
    //  Leer imagen en variable: resultado
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
}
else
{
    Console.WriteLine("Deskew not applied because Image Orientation could not be determined.");
}
Imports IronOcr
Imports System

Private image = "paragraph_skewed.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
'  Cargar al menos una imagen
input.LoadImage(image)

'  Aplique el desbarbado con un chasquido de 15 grados
Dim didDeskew As Boolean = input.Deskew(15)
If didDeskew Then
	'  Leer imagen en variable: resultado
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
Else
	Console.WriteLine("Deskew not applied because Image Orientation could not be determined.")
End If
VB   C#

Antes de Deskew() Después de Deskew()


Escala

Referencia API

Explicación del filtro

Escala es un útil filtro de manipulación de imágenes que le ayudará a redimensionar una imagen con los píxeles que ya tiene. Se puede utilizar cuando no se escanea un código de barras porque la imagen sólo tiene decenas de píxeles de ancho y cada barra es un píxel, o si el texto es demasiado pequeño sin antialiasing.

*Nota: Hay un punto dulce para los tamaños de código de barras de 1000px x 1000px que los códigos de barras se pueden leer bien en lo que debe ser considerado si su código de barras no se encuentra.

Ejemplo de caso práctico

Este es un ejemplo de llamada a Escala para agrandar los espacios entre barras en un Código de Barras para su escaneo:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-5.cs
using IronOcr;
using System;

var image = @"small_barcode.png";
var ocr = new IronTesseract();

//  Opcional: Este ejemplo utiliza un código de barras
ocr.Configuration.ReadBarCodes = true;

using var input = new OcrInput();
//  Cargar al menos una imagen
input.LoadImage(image);

//  Aplicar escala
input.Scale(400); //  400% es 4 veces mayor

//  Leer imagen en variable: resultado
var result = ocr.Read(input);

//  Ejemplo de impresión en consola
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "small_barcode.png"
Private ocr = New IronTesseract()

'  Opcional: Este ejemplo utiliza un código de barras
ocr.Configuration.ReadBarCodes = True

Dim input = New OcrInput()
'  Cargar al menos una imagen
input.LoadImage(image)

'  Aplicar escala
input.Scale(400) '  400% es 4 veces mayor

'  Leer imagen en variable: resultado
Dim result = ocr.Read(input)

'  Ejemplo de impresión en consola
Console.WriteLine(result.Text)
VB   C#

Antes de Escala() Después de Scale()


Binarizar

Referencia API

Explicación del filtro

El filtro Binarizar clasifica todos los píxeles de una imagen como blancos o negros en función de un algoritmo adaptativo que evalúa la imagen y los colores que considera de fondo. Cuando tienes una imagen con muchos colores pero el texto puede destacar, un filtro de binarización eliminará todos los colores y separará el fondo en un blanco plano, y todo lo que reconozca como texto se coloreará de un negro total para facilitar la lectura.

Ejemplo de caso práctico

Este es un ejemplo de llamada a Binarizar para alinear texto coloreado y eliminar colores de fondo y ruido:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-6.cs
using IronOcr;
using System;

var image = @"no-binarize.jpg";
var ocr = new IronTesseract();

using var input = new OcrInput();
//  Cargar al menos una imagen
input.LoadImage(image);

//  Aplicar Binarizar
input.Binarize();

//  Leer imagen en variable: resultado
var result = ocr.Read(input);

//  Ejemplo de impresión en consola
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "no-binarize.jpg"
Private ocr = New IronTesseract()

Private input = New OcrInput()
'  Cargar al menos una imagen
input.LoadImage(image)

'  Aplicar Binarizar
input.Binarize()

'  Leer imagen en variable: resultado
Dim result = ocr.Read(input)

'  Ejemplo de impresión en consola
Console.WriteLine(result.Text)
VB   C#

Antes de Binarizar() Después de Binarizar()


Invertir

Referencia API

Explicación del filtro

IronOCR se lee mejor cuando la imagen leída es texto negro sobre fondo blanco. Al aplicar una serie de filtros, es importante intentar conseguir este resultado antes de una lectura. Invertir es un filtro sencillo que invierte todos los colores de una imagen. El blanco se convierte en negro, el negro en blanco, y todo lo que hay en medio da la vuelta.

Ejemplo de caso práctico

Este es un ejemplo de llamada a Invertir para convertir blanco sobre negro en negro sobre blanco:

:path=/static-assets/ocr/content-code-examples/tutorials/c-sharp-ocr-image-filters-7.cs
using IronOcr;
using System;

var image = @"before-invert.png";
var ocr = new IronTesseract();

using var input = new OcrInput();
//  Cargar al menos una imagen
input.LoadImage(image);

//  Aplicar Invertir
input.Invert(true);

//  Leer imagen en variable: resultado
var result = ocr.Read(input);

//  Ejemplo de impresión en consola
Console.WriteLine(result.Text);
Imports IronOcr
Imports System

Private image = "before-invert.png"
Private ocr = New IronTesseract()

Private input = New OcrInput()
'  Cargar al menos una imagen
input.LoadImage(image)

'  Aplicar Invertir
input.Invert(True)

'  Leer imagen en variable: resultado
Dim result = ocr.Read(input)

'  Ejemplo de impresión en consola
Console.WriteLine(result.Text)
VB   C#

Antes After