USO DE IRONOCR

Cómo crear el reconocimiento de caracteres en C#

Kannaopat Udonpant
Kannapat Udonpant
29 de abril, 2024
Compartir:

Introducción

La tecnología de Reconocimiento Óptico de Caracteres (OCR) permite la conversión de texto en formatos digitales legibles por máquinas. Cuando un documento se escanea (como una factura o recibo), se guarda en tu computadora como un archivo de imagen. Sin embargo, el texto dentro de la imagen escaneada no puede ser editado, buscado ni contabilizado usando un editor de texto habitual.

Sin embargo, el OCR puede procesar la imagen, extraer el texto y transformarlo en un formato de texto que puedan leer los ordenadores. Permite extraer texto de diversas fuentes, incluidos archivos PDF y otras imágenes escaneadas. Además, las capacidades de OCR van más allá de la simple extracción de texto e incluyen los principales formatos de imagen y documentos PDF, convirtiéndolos en datos OCR que permiten realizar búsquedas.

En C#, los desarrolladores pueden aprovechar el poder de OCR a través de varias bibliotecas, una de las cuales es la potente biblioteca IronOCR de Iron Software. En este tutorial, exploraremos los conceptos básicos de OCR y demostraremos cómo usar IronOCR para realizar el reconocimiento de caracteres de manera eficiente en C#.

Cómo crear el reconocimiento de caracteres en C#

  1. Cree un nuevo proyecto C# y nómbrelo en Visual Studio.

  2. Instale la biblioteca IronOCR .NET e inclúyala en la carpeta del proyecto.

  3. Utilice el IronOCR Tesseract para leer texto de imágenes.

  4. Utilice las funciones avanzadas de IronOCR para leer el texto en las imágenes

  5. Ajuste de rendimiento de la operación de lectura de IronOCR.

Primeros pasos con IronOCR

IronOCR, una biblioteca de C# desarrollada por Iron Software, que proporciona capacidades avanzadas de OCR. Ofrece una extracción de texto precisa a partir de imágenes, PDF y documentos escaneados. Antes de sumergirnos en el código, asegúrate de que tienes IronOCR instalado en tu proyecto.

Características clave de IronOCR de Iron Software

Motor OCR Tesseract mejorado

IronOCR eleva las capacidades del ampliamente utilizado motor Tesseract OCR al mejorar tanto la precisión como la velocidad. Es una solución robusta para extraer texto de diversas fuentes, como imágenes, PDF y otros formatos de documento.

Amplia cobertura lingüística

Gracias a su compatibilidad con más de 127 idiomas, IronOCR es capaz de gestionar requisitos multilingües, lo que lo convierte en la opción ideal para aplicaciones que exigen versatilidad lingüística.

Opciones de salida versátiles

El texto extraído puede enviarse cómodamente como texto sin formato o como datos estructurados para integrarlo sin problemas en otras cadenas de procesamiento. Además, IronOCR facilita la creación de PDF con capacidad de búsqueda directamente a partir de entradas de imágenes.

Adaptabilidad multiplataforma

Diseñado para ser compatible con C#, F# y VB.NET, IronOCR funciona sin problemas en varios entornos .NET, incluidas las versiones 8, 7, 6, Core, Standard y Framework.

Aprovechamiento de Tesseract 5

IronOCR aprovecha el poder de Tesseract 5, adaptado finamente para un rendimiento óptimo dentro del ecosistema .NET.

Capacidad de OCR por zonas

Con IronOCR, los usuarios pueden definir con precisión zonas específicas dentro de los documentos, lo que permite un procesamiento OCR específico. Esta función mejora la precisión y la eficacia al concentrar la potencia de procesamiento donde más se necesita.

Herramientas de preprocesamiento de imágenes

La biblioteca ofrece un conjunto de funciones de preprocesamiento de imágenes, como la eliminación de distorsiones y la reducción del ruido. Estas herramientas garantizan resultados superiores incluso cuando se trabaja con imágenes de origen imperfectas, mejorando en última instancia la experiencia global del OCR.

Ahora, desarrollaremos una aplicación demo que utiliza IronOCR para leer Texto de imágenes.

Requisitos previos

  1. Visual Studio: Asegúrate de haber instalado Visual Studio o cualquier otro entorno de desarrollo C#.

  2. NuGet Package Manager: Asegúrese de que NuGet esté presente para gestionar paquetes en su proyecto.

Paso 1: Crear un nuevo proyecto C# en Visual Studio

Para empezar, vamos a crear una nueva aplicación de consola utilizando Visual Studio como se muestra a continuación.

Cómo crear reconocimiento de caracteres en C#: Figura 1 - Creando un nuevo proyecto de C# en Visual Studio

Indique a continuación el nombre y la ubicación del proyecto.

Cómo crear Reconocimiento de Caracteres en C#: Figura 2 - Proporcione un nombre de proyecto y la ubicación donde desea guardarlo

Seleccione la versión .NET necesaria para el proyecto.

Cómo crear reconocimiento de caracteres en C#: Figura 3 - Seleccione la versión .NET apropiada para el proyecto

Haga clic en el botón Crear para crear el nuevo proyecto.

Paso 2: Instale la biblioteca IronOCR e intégrela en su proyecto.

IronOCR se puede encontrar en la consola del administrador de paquetes NuGet como se muestra a continuación. Utilice el comando proporcionado para instalar el paquete.

Cómo crear reconocimiento de caracteres en C#: Figura 4 - Página de descarga del Administrador de paquetes NuGet de IronOCR

Mediante el gestor de paquetes NuGet de Visual Studio, busque IronOCR e instálelo en la carpeta del proyecto.

Cómo crear un Reconocimiento de Caracteres en C#: Figura 5 - Buscando IronOCR a través de la pestaña de navegación usando NuGet Package Manager

Una vez instalada, la aplicación está lista para utilizar IronOCR para leer texto de imágenes.

Paso 3: Utilice el IronOCR Tesseract para leer texto de imágenes.

IronOCR destaca por ser la biblioteca .NET exclusiva que ofrece funciones de OCR de Tesseract 5. En la actualidad, ostenta la distinción de ser la biblioteca Tesseract 5 más sofisticada en todos los lenguajes de programación. IronOCR integra a la perfección Tesseract 5 en varios entornos .NET, incluidos Framework, Standard, Core, Xamarin y Mono, garantizando una compatibilidad completa en todo el ecosistema.

Considere el siguiente archivo de imagen como entrada. Veamos ahora cómo leer el texto de este archivo de imagen

Cómo crear reconocimiento de caracteres en C#: Figura 6 - Ejemplo de entrada

using IronOcr;
public class Program
{
    public static void Main(String [] args)
    {
        var ocrTesseract = new IronTesseract(); 
    using var ocrInput = new OcrInput();
    ocrInput.LoadImage(@"sample1.png");
    var ocrResult = ocrTesseract.Read(ocrInput);
    Console.WriteLine(ocrResult.Text);
    }
}
using IronOcr;
public class Program
{
    public static void Main(String [] args)
    {
        var ocrTesseract = new IronTesseract(); 
    using var ocrInput = new OcrInput();
    ocrInput.LoadImage(@"sample1.png");
    var ocrResult = ocrTesseract.Read(ocrInput);
    Console.WriteLine(ocrResult.Text);
    }
}
Imports IronOcr
Public Class Program
	Public Shared Sub Main(ByVal args() As String)
		Dim ocrTesseract = New IronTesseract()
	Dim ocrInput As New OcrInput()
	ocrInput.LoadImage("sample1.png")
	Dim ocrResult = ocrTesseract.Read(ocrInput)
	Console.WriteLine(ocrResult.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

Código Explicación

  1. Comenzamos creando IronTesseract con la configuración necesaria

  2. A continuación, cargamos la imagen de muestra mostrada en el objeto OcrInput

  3. Por último, leemos el texto de la imagen y lo mostramos en la consola

Salida

Cómo crear reconocimiento de caracteres en C#: Figura 7 - Texto extraído usando IronOCR

Paso 4: Utilice las funciones avanzadas de IronOCR para leer el texto en las imágenes

El objeto IronTesseract.Configuration ofrece a los usuarios avanzados acceso a la API subyacente de Tesseract dentro de C#/.NET, lo que permite una configuración detallada para el ajuste y la optimización. A continuación se indican algunas de las configuraciones avanzadas posibles

Selección de idioma

Puede especificar el idioma para el OCR mediante la propiedad Idioma. Por ejemplo, para establecer el idioma en inglés, utilice:

IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
IronTesseract ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
Dim ocr As New IronTesseract()
ocr.Language = OcrLanguage.English
$vbLabelText   $csharpLabel

Modo de Segmentación de Página

El PageSegmentationMode determina cómo Tesseract segmenta la imagen de entrada. Las opciones incluyen AutoOsd, SingleBlock, SingleLine y más. Por ejemplo:

ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;
ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd
$vbLabelText   $csharpLabel

Variables Tesseract personalizadas

Puedes ajustar Tesseract mediante variables específicas. Por ejemplo, para desactivar la paralelización:

ocr.Configuration.TesseractVariables ["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables ["tessedit_parallelize"] = false;
ocr.Configuration.TesseractVariables ("tessedit_parallelize") = False
$vbLabelText   $csharpLabel

Listado blanco y listado negro de caracteres

Utilice WhiteListCharacters y BlackListCharacters para controlar qué caracteres reconoce Tesseract. Por ejemplo:

ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë
^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
ocr.Configuration.BlackListCharacters = "`ë
^";
ocr.Configuration.WhiteListCharacters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ocr.Configuration.BlackListCharacters = "`ë ^"
$vbLabelText   $csharpLabel

Variables de Configuración Adicionales

Explora otras variables de configuración de Tesseract para personalizar el comportamiento según tus necesidades. Por ejemplo:

ocr.Configuration.TesseractVariables ["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables ["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables ["classify_num_cp_levels"] = 3;
ocr.Configuration.TesseractVariables ["textord_debug_tabfind"] = 0;
// ... (more variables)
ocr.Configuration.TesseractVariables ("classify_num_cp_levels") = 3
ocr.Configuration.TesseractVariables ("textord_debug_tabfind") = 0
' ... (more variables)
$vbLabelText   $csharpLabel

Intentemos ahora descodificar la misma imagen utilizando la configuración avanzada

using IronOcr;
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Decoding using advanced features");
        var ocrTesseract = new IronTesseract() // create instance
        {
            Language = OcrLanguage.EnglishBest, // configure best english language
            Configuration = new TesseractConfiguration()
            {
                ReadBarCodes = false, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable used
            },
            MultiThreaded = false,
        };
        using var ocrInput = new OcrInput(); // create a disposible ocr input object
        ocrInput.AddImage(@"sample1.png"); // load the sample image 
        var ocrResult = ocrTesseract.Read(ocrInput); // read the text from the image
        Console.WriteLine(ocrResult.Text);// output the image
    }
}
using IronOcr;
public class Program
{
    public static void Main()
    {
        Console.WriteLine("Decoding using advanced features");
        var ocrTesseract = new IronTesseract() // create instance
        {
            Language = OcrLanguage.EnglishBest, // configure best english language
            Configuration = new TesseractConfiguration()
            {
                ReadBarCodes = false, // read bar codes false
                BlackListCharacters = "`ë
^", // black listed characters
                WhiteListCharacters = null, // no white list, allow all
                PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd,
                TesseractVariables = null, // no custom variable used
            },
            MultiThreaded = false,
        };
        using var ocrInput = new OcrInput(); // create a disposible ocr input object
        ocrInput.AddImage(@"sample1.png"); // load the sample image 
        var ocrResult = ocrTesseract.Read(ocrInput); // read the text from the image
        Console.WriteLine(ocrResult.Text);// output the image
    }
}
IRON VB CONVERTER ERROR developers@ironsoftware.com
$vbLabelText   $csharpLabel

Código Explicación

  1. Configuración de IronOCR: Se crea una instancia de IronTesseract (la clase principal de IronOCR) y se asigna a la variable ocrTesseract.

    Los ajustes de configuración se aplican a ocrTesseract:

    1. Idioma: Especifica el idioma para OCR (en este caso, inglés).

    2. Configuración: Un objeto TesseractConfiguration que permite una mayor personalización:

    3. LeerCódigosDeBarra: Desactiva la lectura de códigos de barras.

    4. BlackListCharacters: Especifica caracteres para incluir en la lista negra (caracteres que no deben reconocerse).

    5. ListaBlancaCaracteres: No se ha especificado ninguna lista blanca, se permiten todos los caracteres.

    6. PageSegmentationMode: Establece el modo de segmentación de página en "AutoOsd".

    7. TesseractVariables: No se han utilizado variables personalizadas.
    1. Multihilo: Desactiva el multihilo.
  1. Entrada OCR y Carga de Imágenes: Un bloque using crea un objeto ocrInput desechable del tipo OcrInput. El archivo de imagen "sample1.png" se añade a ocrInput.

  2. Extracción de Texto: Se llama al método Read en ocrTesseract, pasando ocrInput.

  3. El resultado se almacena en la variable ocrResult.

  4. Salida: El texto extraído se imprime en la consola usando Console.WriteLine(ocrResult.Text).

Salida

Cómo crear reconocimiento de caracteres en C#: Figura 8 - Texto extraído usando IronOCR

Paso 5: Optimización del rendimiento de la operación de lectura de IronOCR.

Cuando trabajas con IronOCR, tienes acceso a varios filtros de imagen que pueden ayudar a preprocesar imágenes antes de realizar OCR. Estos filtros optimizan la calidad de la imagen, mejoran la visibilidad y reducen el ruido o los artefactos. Ayudan a mejorar el rendimiento de la operación de OCR.

  1. Girar:

    El filtro Girar permite rotar las imágenes un número determinado de grados en el sentido de las agujas del reloj. Para girar en sentido contrario a las agujas del reloj, utilice números negativos.

  2. Deskew: Enderezar

    El filtro Deskew corrige la inclinación de la imagen, garantizando que el texto esté en posición vertical y ortogonal. Esto resulta especialmente útil para el OCR, ya que Tesseract funciona mejor con escaneados correctamente orientados.

  3. Escala:

    El filtro Escala escala proporcionalmente las páginas de entrada del OCR.

  4. Binarizar:

    El filtro Binarizar convierte cada píxel en blanco o negro, sin término medio. Puede mejorar el rendimiento del OCR en casos de muy bajo contraste entre el texto y el fondo.

  5. ToGrayScale:

    El filtro ToGrayScale convierte cada píxel en un tono de escala de grises. Aunque es poco probable que mejore significativamente la precisión del OCR, puede aumentar la velocidad.

  6. Invertir:

    El filtro Invertir invierte los colores: el blanco se convierte en negro y el negro en blanco.

  7. ReplaceColor:

    El filtro ReemplazarColor reemplaza un color específico dentro de una imagen por otro color, considerando un determinado umbral.

  8. Contraste:

    El filtro Contraste aumenta automáticamente el contraste. Suele mejorar la velocidad y precisión del OCR en escaneos con poco contraste.

  9. Dilatar y Erosionar:

    Estos filtros morfológicos avanzados manipulan los límites de los objetos en una imagen.

    1. Dilatar añade píxeles a los límites del objeto.
    1. Erode elimina los píxeles de los límites del objeto.

    2. Agudizar:

      El filtro Enfocar hace más nítidos los documentos OCR borrosos y aplana los canales alfa a blanco.

    3. DeNoise:

      El filtro DeNoise elimina el ruido digital. Utilízalo donde se espere ruido.

    4. DeepCleanBackgroundNoise:

      Este filtro de eliminación de ruido de fondo pesado sólo debe utilizarse cuando se conoce el ruido de fondo extremo del documento. Puede reducir la precisión del OCR en documentos limpios y consume mucha CPU.

    5. EnhanceResolution:

      El filtro MejorarResolución mejora la resolución de las imágenes de baja calidad. No suele ser necesario debido a la gestión automática de la resolución.

    He aquí un ejemplo de cómo aplicar filtros utilizando IronOCR en C#:

var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
var ocr = new IronTesseract();
var input = new OcrInput();
input.LoadImage("sample.png");
input.Deskew();
var result = ocr.Read(input);
Console.WriteLine(result.Text);
Dim ocr = New IronTesseract()
Dim input = New OcrInput()
input.LoadImage("sample.png")
input.Deskew()
Dim result = ocr.Read(input)
Console.WriteLine(result.Text)
$vbLabelText   $csharpLabel

Aplicaciones comunes del OCR

  1. Digitalización de documentos: OCR se utiliza ampliamente para convertir documentos en papel escaneados, como facturas, recibos, formularios y contratos, en formatos digitales. Este proceso de digitalización agiliza el almacenamiento, la recuperación y la gestión de documentos, reduciendo el desorden de papel y mejorando la eficiencia.

  2. Extracción de datos: El OCR permite la extracción de texto y datos de documentos escaneados, imágenes y PDFs. Estos datos extraídos pueden utilizarse para la introducción automatizada de datos, el análisis de contenidos, la indexación y la integración en bases de datos o sistemas empresariales.

  3. Reconocimiento de Texto en Imágenes: La tecnología OCR permite extraer texto de documentos impresos e imágenes para fines de indexación y búsqueda. Esta capacidad se utiliza en diversas aplicaciones, como la realidad aumentada, los motores de búsqueda basados en imágenes y los servicios de traducción.

  4. Reconocimiento Automático de Matrículas (ALPR): Los sistemas ALPR utilizan OCR para leer los números de matrícula de imágenes o secuencias de video capturadas por cámaras instaladas en aplicaciones de vigilancia de tráfico, gestión de estacionamientos, cobro de peajes y cumplimiento de la ley.

  5. Soluciones de Accesibilidad: La tecnología OCR desempeña un papel crucial en la creación de contenido accesible para personas con discapacidades visuales. Al convertir el texto de imágenes o documentos en voz alta o braille, el OCR ayuda a que la información sea accesible para las personas con discapacidad.

  6. Verificación de Identidad: La tecnología OCR se emplea en los procesos de verificación de identidad, como escanear y procesar documentos de identidad como pasaportes, licencias de conducir e identificaciones. Ayuda a verificar la autenticidad de los documentos y a extraer información pertinente para verificar la identidad.

  7. Banca y Finanzas: OCR se utiliza en banca y finanzas para tareas como leer cheques, procesar facturas, convertir un documento PDF existente, extraer datos de estados financieros y automatizar flujos de trabajo basados en documentos para mejorar la precisión y eficiencia en las operaciones financieras.

  8. Traducción automatizada: La tecnología OCR está integrada en herramientas de traducción y aplicaciones de aprendizaje de idiomas para convertir texto impreso de un idioma a otro. Los usuarios pueden capturar texto con sus dispositivos y el OCR les ayuda a traducirlo al idioma deseado en tiempo real.

  9. Preservación de Documentos Históricos y de Archivos: Se utiliza OCR para digitalizar materiales de archivo y documentos históricos, preservándolos en formatos digitales para su acceso futuro, investigación y análisis, asegurando al mismo tiempo la conservación de valioso patrimonio cultural.

Requisitos de licencia

IronOCR. Indique los siguientes datos para recibir la clave en su dirección de correo electrónico

Cómo crear el reconocimiento de caracteres en C#: Figura 9 - Página de licencia de prueba de IronPDF

Una vez obtenida la clave, ya sea mediante compra o prueba gratuita, siga los siguientes pasos para utilizarla

Configuración de su clave de licencia: Establezca su clave de licencia de IronOCR utilizando el código. Agregue la siguiente línea al inicio de su aplicación (antes de usar IronOCR):

IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01";
IronOcr.License.LicenseKey = "IRONOCR-MYLICENSE-KEY-1EF01"
$vbLabelText   $csharpLabel

Clave de aplicación global (Web.Config o App.Config): Para aplicar una clave de forma global en su aplicación, utilice el archivo de configuración (Web.Config o App.Config). Añade la siguiente clave a tu appSettings:

<configuration>
    <!-- Other settings -->
    <appSettings>
        <add key="IronOcr.LicenseKey" value="IRONOCR-MYLICENSE-KEY-1EF01"/>
    </appSettings>
</configuration>
XML

Uso de .NET Core appsettings.json: Para aplicaciones .NET Core, cree un archivo appsettings.json en el directorio raíz de su proyecto. Sustituya la clave "IronOcr.LicenseKey" por el valor de su licencia:

{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
{
    "IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
}
If True Then
	"IronOcr.LicenseKey": "IRONOCR-MYLICENSE-KEY-1EF01"
End If
$vbLabelText   $csharpLabel

Prueba de tu clave de licencia: Verifica que tu clave se haya instalado correctamente probándola:

bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
bool result = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01");
Dim result As Boolean = IronOcr.License.IsValidLicense("IRONOCR-MYLICENSE-KEY-1EF01")
$vbLabelText   $csharpLabel

Conclusión

En conclusión, IronOCR, que comienza en $749. Adopta el poder del OCR con IronOCR y desbloquea un mundo de posibilidades en tus proyectos de C#.

Kannaopat Udonpant
Ingeniero de software
Antes de convertirse en ingeniero de software, Kannapat realizó un doctorado en Recursos Medioambientales en la Universidad de Hokkaido (Japón). Mientras cursaba su licenciatura, Kannapat también se convirtió en miembro del Laboratorio de Robótica Vehicular, que forma parte del Departamento de Ingeniería de Bioproducción. En 2022, aprovechó sus conocimientos de C# para unirse al equipo de ingeniería de Iron Software, donde se centra en IronPDF. Kannapat valora su trabajo porque aprende directamente del desarrollador que escribe la mayor parte del código utilizado en IronPDF. Además del aprendizaje entre iguales, Kannapat disfruta del aspecto social de trabajar en Iron Software. Cuando no está escribiendo código o documentación, Kannapat suele jugar con su PS5 o volver a ver The Last of Us.
< ANTERIOR
Cómo realizar el OCR del registro de vehículos en C#
SIGUIENTE >
Cómo leer documentos de identidad mediante OCR en C#