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.
Instalar con NuGet
Install-Package IronOcr
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)
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);
// Here we apply the filter: Deskew
input.Deskew();
// Save the input with filter(s) applied
input.SaveAsImages("my_deskewed");
// We read, then print the text to the console
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)
' Here we apply the filter: Deskew
input.Deskew()
' Save the input with filter(s) applied
input.SaveAsImages("my_deskewed")
' We read, then print the text to the console
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Filtrar casos de uso
Gire
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 a
Rotar()`.
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();
// Load at least one image
input.LoadImage(image);
// Rotate 180 degrees because image is upside-down
input.Rotate(180);
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "screenshot.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Rotate 180 degrees because image is upside-down
input.Rotate(180)
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Antes de Input.Rotate(180)
After Input.Rotate(180)
Deskew
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();
// Load at least one image
input.LoadImage(image);
// Apply deskew with 15 degree snap
bool didDeskew = input.Deskew(15);
if (didDeskew)
{
// Read image into variable: result
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()
' Load at least one image
input.LoadImage(image)
' Apply deskew with 15 degree snap
Dim didDeskew As Boolean = input.Deskew(15)
If didDeskew Then
' Read image into variable: result
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
Else
Console.WriteLine("Deskew not applied because Image Orientation could not be determined.")
End If
Antes de Deskew()
Después de Deskew()
Escala
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();
// Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = true;
using var input = new OcrInput();
// Load at least one image
input.LoadImage(image);
// Apply scale
input.Scale(400); // 400% is 4 times larger
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "small_barcode.png"
Private ocr = New IronTesseract()
' Optional: This example uses a barcode
ocr.Configuration.ReadBarCodes = True
Dim input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply scale
input.Scale(400) ' 400% is 4 times larger
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Antes de Escala()
Después de Scale()
Binarizar
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();
// Load at least one image
input.LoadImage(image);
// Apply Binarize
input.Binarize();
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "no-binarize.jpg"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply Binarize
input.Binarize()
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Antes de Binarizar()
Después de Binarizar()
Invertir
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();
// Load at least one image
input.LoadImage(image);
// Apply Invert
input.Invert(true);
// Read image into variable: result
var result = ocr.Read(input);
// Example print to console
Console.WriteLine(result.Text);
Imports IronOcr
Imports System
Private image = "before-invert.png"
Private ocr = New IronTesseract()
Private input = New OcrInput()
' Load at least one image
input.LoadImage(image)
' Apply Invert
input.Invert(True)
' Read image into variable: result
Dim result = ocr.Read(input)
' Example print to console
Console.WriteLine(result.Text)
Antes After