HERRAMIENTAS OCR

Windows OCR Engine vs Tesseract (Comparación de funciones OCR)

Actualizado 3 de abril, 2024
Compartir:

En la era digital actual, el reconocimiento óptico de caracteres (OCR) se ha convertido en parte integrante de diversas industrias, ya que permite convertir imágenes y documentos escaneados en texto editable y con capacidad de búsqueda.

Entre los muchos programas de OCR disponibles, como Google Cloud Vision (API de Cloud Vision), Adobe Acrobat Pro DC, ABBYY Finereader y muchos más, Windows OCR Engine vs Tesseract, y IronOCR destacan como competidores destacados, cada uno de los cuales ofrece funciones y capacidades únicas para ayudar al análisis de documentos.

Este artículo pretende ofrecer un análisis comparativo exhaustivo de estos tres motores de OCR, evaluando su precisión, rendimiento y facilidad de integración.

1. Introducción a los motores OCR

Los motores OCR son herramientas de software diseñadas para reconocer y extraer texto sin formato de imágenes, PDF y otros documentos escaneados. Emplean sofisticados algoritmos y técnicas de aprendizaje automático para identificar con precisión los caracteres y convertirlos en un archivo de texto legible por máquina. Windows OCR Engine, Tesseract e IronOCR representan tres soluciones de OCR muy utilizadas, cada una con sus puntos fuertes y aplicaciones.

2. Motor OCR de Windows

En **Motor OCR para Windows integrado en el sistema operativo Windows, ofrece una solución cómoda y fácil de usar para extraer texto de imágenes de entrada y documentos escaneados. Aprovechando técnicas avanzadas de procesamiento de imágenes, puede reconocer con precisión texto en varios idiomas y estilos de fuente. Se puede acceder al motor de OCR de Windows a través de la API de tiempo de ejecución de Windows, lo que permite una integración perfecta en las aplicaciones de Windows con las capacidades de una herramienta de línea de comandos.

2.1 Características principales del motor OCR de Windows

  • Soporte de idiomas: El motor de OCR de Windows admite muchos idiomas, por lo que es adecuado para documentos multilingües.
  • Procesamiento de imágenes: Emplea sofisticados algoritmos de procesamiento de imágenes para mejorar la precisión del reconocimiento de texto impreso, incluso en imágenes de baja calidad.
  • Integración con aplicaciones Windows: El motor de OCR de Windows se integra a la perfección con las aplicaciones de Windows, lo que permite a los desarrolladores incorporar plenamente las funciones de OCR en su software.

2.2 Ejemplo de código

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
class Program
{
    static async Task Main(string [] args)
    {
        //  Indique la ruta del archivo de imagen
        string imagePath = "sample.png";
        try
        {
            //  Instanciar la clase de programa
            Program program = new Program();
            //  Llama al método ExtractText para extraer texto de la imagen
            string extractedText = await program.ExtractText(imagePath);
            //  Mostrar el texto extraído
            Console.WriteLine("Extracted Text:");
            Console.WriteLine(extractedText);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }
    public async Task<string> ExtractText(string image)
    {
        //  Inicializar StringBuilder para almacenar el texto extraído
        StringBuilder text = new StringBuilder();
        try
        {
            //  Abrir el flujo de archivos de imagen
            using (var fileStream = System.IO.File.OpenRead(image))
            {
                Console.WriteLine("Extracted Text:");
                //  Crear un BitmapDecoder a partir del flujo de archivos de imagen
                var bmpDecoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
                //  Obtener el mapa de bits de software del descodificador
                var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
                //  Crear un motor OCR a partir de los idiomas del perfil de usuario
                var ocrEngine = Windows.Media.Ocr.OcrEngine.TryCreateFromUserProfileLanguages();
                //  Reconocer texto a partir del mapa de bits del software
                var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
                //  Añade cada línea del texto reconocido al StringBuilder
                foreach (var line in ocrResult.Lines)
                {
                    text.AppendLine(line.Text);
                }
            }
        }
        catch (Exception ex)
        {
            throw ex; //  Propagar la excepción
        }
        //  Devuelve el texto extraído
        return text.ToString();
    }
}
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
class Program
{
    static async Task Main(string [] args)
    {
        //  Indique la ruta del archivo de imagen
        string imagePath = "sample.png";
        try
        {
            //  Instanciar la clase de programa
            Program program = new Program();
            //  Llama al método ExtractText para extraer texto de la imagen
            string extractedText = await program.ExtractText(imagePath);
            //  Mostrar el texto extraído
            Console.WriteLine("Extracted Text:");
            Console.WriteLine(extractedText);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }
    public async Task<string> ExtractText(string image)
    {
        //  Inicializar StringBuilder para almacenar el texto extraído
        StringBuilder text = new StringBuilder();
        try
        {
            //  Abrir el flujo de archivos de imagen
            using (var fileStream = System.IO.File.OpenRead(image))
            {
                Console.WriteLine("Extracted Text:");
                //  Crear un BitmapDecoder a partir del flujo de archivos de imagen
                var bmpDecoder = await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
                //  Obtener el mapa de bits de software del descodificador
                var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
                //  Crear un motor OCR a partir de los idiomas del perfil de usuario
                var ocrEngine = Windows.Media.Ocr.OcrEngine.TryCreateFromUserProfileLanguages();
                //  Reconocer texto a partir del mapa de bits del software
                var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
                //  Añade cada línea del texto reconocido al StringBuilder
                foreach (var line in ocrResult.Lines)
                {
                    text.AppendLine(line.Text);
                }
            }
        }
        catch (Exception ex)
        {
            throw ex; //  Propagar la excepción
        }
        //  Devuelve el texto extraído
        return text.ToString();
    }
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		'  Indique la ruta del archivo de imagen
		Dim imagePath As String = "sample.png"
		Try
			'  Instanciar la clase de programa
			Dim program As New Program()
			'  Llama al método ExtractText para extraer texto de la imagen
			Dim extractedText As String = Await program.ExtractText(imagePath)
			'  Mostrar el texto extraído
			Console.WriteLine("Extracted Text:")
			Console.WriteLine(extractedText)
		Catch ex As Exception
			Console.WriteLine("An error occurred: " & ex.Message)
		End Try
	End Function
	Public Async Function ExtractText(ByVal image As String) As Task(Of String)
		'  Inicializar StringBuilder para almacenar el texto extraído
		Dim text As New StringBuilder()
		Try
			'  Abrir el flujo de archivos de imagen
			Using fileStream = System.IO.File.OpenRead(image)
				Console.WriteLine("Extracted Text:")
				'  Crear un BitmapDecoder a partir del flujo de archivos de imagen
				Dim bmpDecoder = Await Windows.Graphics.Imaging.BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream())
				'  Obtener el mapa de bits de software del descodificador
				Dim softwareBmp = Await bmpDecoder.GetSoftwareBitmapAsync()
				'  Crear un motor OCR a partir de los idiomas del perfil de usuario
				Dim ocrEngine = Windows.Media.Ocr.OcrEngine.TryCreateFromUserProfileLanguages()
				'  Reconocer texto a partir del mapa de bits del software
				Dim ocrResult = Await ocrEngine.RecognizeAsync(softwareBmp)
				'  Añade cada línea del texto reconocido al StringBuilder
				For Each line In ocrResult.Lines
					text.AppendLine(line.Text)
				Next line
			End Using
		Catch ex As Exception
			Throw ex '  Propagar la excepción
		End Try
		'  Devuelve el texto extraído
		Return text.ToString()
	End Function
End Class
VB   C#

2.2.1 Salida

Motor OCR de Windows frente a Tesseract (Comparación de funciones OCR): Figura 1 - Salida de la consola para el código del motor de OCR de Windows

3. Teseracto

Tesseract un motor de OCR de código abierto desarrollado por Google, se ha hecho muy popular por su precisión y versatilidad. Es compatible con más de 100 idiomas y puede procesar varios formatos de imagen, como TIFF, JPEG y PNG. Tesseract OCR Engine emplea algoritmos de aprendizaje profundo y redes neuronales para lograr altos niveles de precisión en el reconocimiento de texto, lo que lo hace adecuado para una amplia gama de aplicaciones.

3.1 Principales características de Tesseract

  • Soporte de idiomas: El motor Tesseract admite más de 100 idiomas, incluidos alfabetos complejos como el árabe y el chino.
  • Preprocesamiento de imágenes: Ofrece amplias funciones de preprocesamiento de imágenes, como deskewing, binarización y reducción de ruido, para mejorar la precisión del reconocimiento de texto.
  • Opciones de personalización: Tesseract permite a los usuarios ajustar con precisión los parámetros de OCR y entrenar modelos personalizados para casos de uso específicos, mejorando la precisión y el rendimiento.

3.2 Ejemplo de código

using Patagames.Ocr;
using (var api = OcrApi.Create())
{
    api.Init(Patagames.Ocr.Enums.Languages.English);
    string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
    Console.WriteLine(plainText);
}
using Patagames.Ocr;
using (var api = OcrApi.Create())
{
    api.Init(Patagames.Ocr.Enums.Languages.English);
    string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
    Console.WriteLine(plainText);
}
Imports Patagames.Ocr
Using api = OcrApi.Create()
	api.Init(Patagames.Ocr.Enums.Languages.English)
	Dim plainText As String = api.GetTextFromImage("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
	Console.WriteLine(plainText)
End Using
VB   C#

3.2.1 Salida

Motor de OCR de Windows frente a Tesseract (comparación de funciones de OCR): Figura 2 - Salida de la consola para el código Tesserat

4. IronOCR

IronOCR un potente motor de OCR desarrollado por Iron Software, se distingue por su excepcional precisión, facilidad de uso y versátil compatibilidad lingüística. Ofrece funciones de OCR in situ y es compatible con más de 127 idiomas, lo que lo hace adecuado para aplicaciones globales. IronOCR aprovecha los algoritmos avanzados de aprendizaje automático y la tecnología de visión en la nube para ofrecer resultados precisos de reconocimiento de texto, incluso en escenarios difíciles.

4.1 Principales características de IronOCR

  • Alta precisión: IronOCR ofrece una precisión líder en el sector en el reconocimiento de texto, lo que garantiza resultados fiables en diversos tipos de documentos e idiomas.
  • Soporte versátil de idiomas: Es compatible con más de 127 idiomas y proporciona paquetes de idiomas completos para un reconocimiento de texto multilingüe sin problemas.
  • Integración sencilla: IronOCR ofrece una integración directa con aplicaciones .NET, con API intuitivas y amplia documentación para agilizar el proceso de desarrollo con preprocesamiento, y postprocesamiento de imágenes originales para extraer textos.

4.2 Instalación de IronOCR

Antes de pasar a la codificación Ejemplo vamos a ver cómo instalar IronOCR utilizando el NuGet Package Manager.

  1. En Visual Studio vaya al menú Herramientas y seleccione Gestor de paquetes NuGet.

    1. Aparecerá una nueva lista, aquí seleccione el Gestor de paquetes NuGet para soluciones.

    Motor OCR de Windows frente a Tesseract (Comparación de funciones OCR): Figura 3 - Dónde encontrar el gestor de paquetes NuGet de Visual Studio

  2. Aparecerá una nueva ventana, vaya a la pestaña "Examinar" y haga clic en "IronOCR" en la barra de búsqueda.

    1. Aparecerá una lista de paquetes Seleccione el último paquete IronOCR y haga clic en instalar.

    Motor de OCR de Windows frente a Tesseract (Comparación de funciones de OCR): Figura 4 - Instalación del paquete IronOCR

4.3 Ejemplo de código (C#)

using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
var result = ocr.Read("C:\\Users\\buttw\\source\\repos\\ironqr\\ironqr\\bin\\Debug\\net5.0\\Iron.png");
Console.WriteLine(result.Text);
using IronOcr;
var ocr = new IronTesseract();
ocr.Language = OcrLanguage.English;
var result = ocr.Read("C:\\Users\\buttw\\source\\repos\\ironqr\\ironqr\\bin\\Debug\\net5.0\\Iron.png");
Console.WriteLine(result.Text);
Imports IronOcr
Private ocr = New IronTesseract()
ocr.Language = OcrLanguage.English
Dim result = ocr.Read("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
Console.WriteLine(result.Text)
VB   C#

4.3.1 Salida

Motor OCR de Windows frente a Tesseract (comparación de funciones OCR): Figura 5 - Salida de la consola para el código IronOCR

5. Evaluación comparativa

5.1 Precisión y rendimiento

  • Windows OCR Engine y Tesseract Ofrecen una precisión decente pero pueden tener problemas con diseños complejos y texto manuscrito.
  • IronOCR: destaca por su precisión y ofrece resultados fiables en diversos tipos de documentos e idiomas, incluidos texto manuscrito e imágenes con ruido.

5.2 Facilidad de integración

  • Motor de OCR de Windows: Se integra perfectamente con las aplicaciones de Windows, pero carece de opciones de personalización.
  • Tesseract: Requiere configuración y dependencias adicionales para la integración, pero ofrece amplias opciones de personalización.
  • IronOCR: Ofrece una integración sencilla con aplicaciones .NET, con API intuitivas y documentación completa.

5.3 Soporte lingüístico

  • Windows OCR Engine y Tesseract Admite un número limitado de idiomas en comparación con Tesseract e IronOCR.
  • IronOCR: es compatible con más de 127 idiomas, lo que lo hace adecuado para aplicaciones globales.

    6. Conclusión

    En conclusión, aunque Windows OCR Engine y Tesseract son opciones populares para el reconocimiento de texto, IronOCR se perfila como el motor de OCR más preciso y versátil. Su precisión líder en el sector, su amplia compatibilidad lingüística y su sencilla integración lo convierten en una solución destacada para empresas y desarrolladores que buscan una funcionalidad de OCR fiable. Al aprovechar IronOCR, las organizaciones pueden agilizar los flujos de trabajo de procesamiento de documentos, mejorar la precisión de la extracción de datos y obtener información valiosa de los documentos e imágenes escaneados.

    IronOCR ofrece un **Prueba gratuita. Para saber más sobre IronOCR y sus funciones, visite aquí.

< ANTERIOR
OCR en la nube (comparación de funciones de OCR)
SIGUIENTE >
Azure OCR vs Google OCR (Comparación de funciones OCR)

¿Listo para empezar? Versión: 2024.7 recién publicada

Descarga gratuita de NuGet Descargas totales: 2,012,139 Ver licencias >
123