Saltar al pie de página
HERRAMIENTAS OCR

Motor OCR de Windows vs Tesseract: una comparación detallada

En la era digital de hoy, la tecnología de reconocimiento óptico de caracteres (OCR) se ha vuelto integral en diversas industrias, permitiendo la conversión de imágenes y documentos escaneados en texto editable y buscable.

Entre el mucho software de OCR disponible, como Google Cloud Vision (Cloud Vision API), Adobe Acrobat Pro DC, ABBYY Finereader, Windows OCR Engine, Tesseract, e IronOCR se destacan como contendientes prominentes, cada uno ofreciendo características y capacidades únicas para ayudar en el análisis de documentos.

Este artículo tiene como objetivo proporcionar un análisis comparativo integral de estos tres motores OCR, evaluando su precisión, rendimiento y facilidad de integración.

1. Introducción a los motores de OCR

Los motores OCR son herramientas de software diseñadas para reconocer y extraer texto simple de imágenes, archivos PDF y otros documentos escaneados. Emplean algoritmos sofisticados 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 OCR ampliamente utilizadas, cada una con sus fortalezas y aplicaciones.

2. Motor de OCR de Windows

Windows OCR Engine, integrado en el sistema operativo Windows, ofrece una solución conveniente y amigable para el usuario 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 fuentes. El Windows OCR Engine es accesible a través de la API de Windows Runtime, permitiendo una integración perfecta en 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 Idioma: El Windows OCR Engine soporta muchos idiomas, lo que lo hace adecuado para documentos multilingües.
  • Procesamiento de Imágenes: Emplea algoritmos sofisticados 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 de Windows: El Windows OCR Engine se integra perfectamente con aplicaciones de Windows, permitiendo a los desarrolladores incorporar completamente las capacidades OCR en su software.

2.2 Ejemplo de código

using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;

class Program
{
    static async Task Main(string[] args)
    {
        // Provide the path to the image file
        string imagePath = "sample.png";
        try
        {
            // Call the ExtractText method to extract text from the image
            string extractedText = await ExtractText(imagePath);
            // Display the extracted text
            Console.WriteLine("Extracted Text:");
            Console.WriteLine(extractedText);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }

    public static async Task<string> ExtractText(string image)
    {
        // Initialize StringBuilder to store extracted text
        StringBuilder text = new StringBuilder();
        try
        {
            // Open the image file stream
            using (var fileStream = File.OpenRead(image))
            {
                // Create a BitmapDecoder from the image file stream
                var bmpDecoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
                // Get the software bitmap from the decoder
                var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
                // Create an OCR engine from user profile languages
                var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
                // Recognize text from the software bitmap
                var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
                // Append each line of recognized text to the StringBuilder
                foreach (var line in ocrResult.Lines)
                {
                    text.AppendLine(line.Text);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error during OCR process: " + ex.Message);
        }
        // Return the extracted text
        return text.ToString();
    }
}
using System;
using System.IO;
using System.Text;
using System.Threading.Tasks;
using Windows.Graphics.Imaging;
using Windows.Media.Ocr;

class Program
{
    static async Task Main(string[] args)
    {
        // Provide the path to the image file
        string imagePath = "sample.png";
        try
        {
            // Call the ExtractText method to extract text from the image
            string extractedText = await ExtractText(imagePath);
            // Display the extracted text
            Console.WriteLine("Extracted Text:");
            Console.WriteLine(extractedText);
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occurred: " + ex.Message);
        }
    }

    public static async Task<string> ExtractText(string image)
    {
        // Initialize StringBuilder to store extracted text
        StringBuilder text = new StringBuilder();
        try
        {
            // Open the image file stream
            using (var fileStream = File.OpenRead(image))
            {
                // Create a BitmapDecoder from the image file stream
                var bmpDecoder = await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream());
                // Get the software bitmap from the decoder
                var softwareBmp = await bmpDecoder.GetSoftwareBitmapAsync();
                // Create an OCR engine from user profile languages
                var ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages();
                // Recognize text from the software bitmap
                var ocrResult = await ocrEngine.RecognizeAsync(softwareBmp);
                // Append each line of recognized text to the StringBuilder
                foreach (var line in ocrResult.Lines)
                {
                    text.AppendLine(line.Text);
                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error during OCR process: " + ex.Message);
        }
        // Return the extracted text
        return text.ToString();
    }
}
Imports System
Imports System.IO
Imports System.Text
Imports System.Threading.Tasks
Imports Windows.Graphics.Imaging
Imports Windows.Media.Ocr

Friend Class Program
	Shared Async Function Main(ByVal args() As String) As Task
		' Provide the path to the image file
		Dim imagePath As String = "sample.png"
		Try
			' Call the ExtractText method to extract text from the image
			Dim extractedText As String = Await ExtractText(imagePath)
			' Display the extracted text
			Console.WriteLine("Extracted Text:")
			Console.WriteLine(extractedText)
		Catch ex As Exception
			Console.WriteLine("An error occurred: " & ex.Message)
		End Try
	End Function

	Public Shared Async Function ExtractText(ByVal image As String) As Task(Of String)
		' Initialize StringBuilder to store extracted text
		Dim text As New StringBuilder()
		Try
			' Open the image file stream
			Using fileStream = File.OpenRead(image)
				' Create a BitmapDecoder from the image file stream
				Dim bmpDecoder = Await BitmapDecoder.CreateAsync(fileStream.AsRandomAccessStream())
				' Get the software bitmap from the decoder
				Dim softwareBmp = Await bmpDecoder.GetSoftwareBitmapAsync()
				' Create an OCR engine from user profile languages
				Dim ocrEngine = OcrEngine.TryCreateFromUserProfileLanguages()
				' Recognize text from the software bitmap
				Dim ocrResult = Await ocrEngine.RecognizeAsync(softwareBmp)
				' Append each line of recognized text to the StringBuilder
				For Each line In ocrResult.Lines
					text.AppendLine(line.Text)
				Next line
			End Using
		Catch ex As Exception
			Console.WriteLine("Error during OCR process: " & ex.Message)
		End Try
		' Return the extracted text
		Return text.ToString()
	End Function
End Class
$vbLabelText   $csharpLabel

2.2.1 Salida

Windows OCR Engine vs Tesseract (Comparación de Características OCR): Figura 1 - Salida de consola para el código de Windows OCR Engine

3. Teseracto

Tesseract, un motor OCR de fuente abierta desarrollado por Google, ha ganado una vasta popularidad por su precisión y versatilidad. Soporta más de 100 idiomas y puede procesar varios formatos de imagen, incluyendo TIFF, JPEG y PNG. El Motor OCR Tesseract emplea algoritmos de aprendizaje profundo y redes neuronales para alcanzar altos niveles de precisión en reconocimiento de texto, siendo adecuado para una amplia gama de aplicaciones.

3.1 Características principales de Tesseract

  • Soporte de Idioma: El motor Tesseract soporta más de 100 idiomas, incluyendo guiones complejos como árabe y chino.
  • Preprocesamiento de Imágenes: Ofrece extensas capacidades de preprocesamiento de imágenes, incluyendo desalinado, binarización y reducción de ruido, para mejorar la precisión de reconocimiento de texto.
  • Opciones de Personalización: Tesseract permite a los usuarios ajustar finamente los parámetros 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;

class TesseractExample
{
    static void Main(string[] args)
    {
        // Create an OCR API instance
        using (var api = OcrApi.Create())
        {
            // Initialize the OCR engine for the English language
            api.Init(Patagames.Ocr.Enums.Languages.English);
            // Extract text from the image
            string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
            // Display the extracted text
            Console.WriteLine(plainText);
        }
    }
}
using Patagames.Ocr;

class TesseractExample
{
    static void Main(string[] args)
    {
        // Create an OCR API instance
        using (var api = OcrApi.Create())
        {
            // Initialize the OCR engine for the English language
            api.Init(Patagames.Ocr.Enums.Languages.English);
            // Extract text from the image
            string plainText = api.GetTextFromImage(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
            // Display the extracted text
            Console.WriteLine(plainText);
        }
    }
}
Imports Patagames.Ocr

Friend Class TesseractExample
	Shared Sub Main(ByVal args() As String)
		' Create an OCR API instance
		Using api = OcrApi.Create()
			' Initialize the OCR engine for the English language
			api.Init(Patagames.Ocr.Enums.Languages.English)
			' Extract text from the image
			Dim plainText As String = api.GetTextFromImage("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
			' Display the extracted text
			Console.WriteLine(plainText)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

3.2.1 Salida

Windows OCR Engine vs Tesseract (Comparación de Características OCR): Figura 2 - Salida de consola para el código de Tesseract

4. IronOCR

IronOCR, un potente motor OCR desarrollado por Iron Software, se distingue por su precisión excepcional, facilidad de uso y soporte versátil de idiomas. Ofrece funcionalidad OCR en instalaciones locales y soporta más de 125 idiomas, siendo adecuado para aplicaciones globales. IronOCR aprovecha algoritmos avanzados de aprendizaje automático y tecnología de visión en la nube para entregar resultados precisos de reconocimiento de texto, incluso en escenarios desafiantes.

4.1 Características principales de IronOCR

  • Alta Precisión: IronOCR ofrece una precisión líder en la industria en reconocimiento de texto, asegurando resultados confiables a través de diversos tipos de documentos e idiomas.
  • Soporte Versátil de Idiomas: Soporta más de 125 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 APIs intuitivas y documentación extensa para agilizar el proceso de desarrollo con preprocesamiento y postprocesamiento de imágenes originales para extraer textos.

4.2 Instalar IronOCR

Antes de pasar al ejemplo de código, veamos cómo instalar IronOCR usando el Gestor de Paquetes NuGet.

  1. En Visual Studio ve al menú Herramientas y selecciona Gestor de Paquetes NuGet.
  2. Aparecerá una nueva lista, aquí selecciona el Gestor de Paquetes NuGet para soluciones.

Windows OCR Engine vs Tesseract (Comparación de Características OCR): Figura 3 - Dónde encontrar el Gestor de Paquetes NuGet en Visual Studio

  1. Aparecerá una nueva ventana, ve a la pestaña 'Buscar' y escribe 'IronOCR' en la barra de búsqueda.
  2. Aparecerá una lista de Paquetes. Selecciona el paquete IronOCR más reciente y haz clic en instalar.

Windows OCR Engine vs Tesseract (Comparación de Características OCR): Figura 4 - Instalación del paquete IronOCR

4.3 Ejemplo de código (C#)

using IronOcr;

class IronOCRExample
{
    static void Main(string[] args)
    {
        // Create an IronTesseract instance
        var ocr = new IronTesseract();
        // Set the language for OCR recognition
        ocr.Language = OcrLanguage.English;
        // Perform OCR on the specified image
        var result = ocr.Read(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
        // Display the extracted text
        Console.WriteLine(result.Text);
    }
}
using IronOcr;

class IronOCRExample
{
    static void Main(string[] args)
    {
        // Create an IronTesseract instance
        var ocr = new IronTesseract();
        // Set the language for OCR recognition
        ocr.Language = OcrLanguage.English;
        // Perform OCR on the specified image
        var result = ocr.Read(@"C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png");
        // Display the extracted text
        Console.WriteLine(result.Text);
    }
}
Imports IronOcr

Friend Class IronOCRExample
	Shared Sub Main(ByVal args() As String)
		' Create an IronTesseract instance
		Dim ocr = New IronTesseract()
		' Set the language for OCR recognition
		ocr.Language = OcrLanguage.English
		' Perform OCR on the specified image
		Dim result = ocr.Read("C:\Users\buttw\source\repos\ironqr\ironqr\bin\Debug\net5.0\Iron.png")
		' Display the extracted text
		Console.WriteLine(result.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

4.3.1 Salida

Windows OCR Engine vs Tesseract (Comparación de Características OCR): Figura 5 - Salida de consola para el código de IronOCR

5. Evaluación comparativa

5.1 Precisión y rendimiento

  • Windows OCR Engine y Tesseract ofrecen una precisión decente pero pueden tener dificultades con diseños complejos.
  • IronOCR: Destaca en precisión, ofreciendo resultados fiables a través de diversos tipos de documentos e idiomas, incluyendo imágenes con ruido.

5.2 Facilidad de integración

  • Windows OCR Engine: Se integra sin problemas con aplicaciones de Windows pero carece de opciones de personalización.
  • Tesseract: Requiere configuración adicional y dependencias para la integración pero ofrece extensas opciones de personalización.
  • IronOCR: Proporciona una integración sencilla con aplicaciones .NET, con APIs intuitivas y documentación completa.

5.3 Soporte de idiomas

  • Windows OCR Engine soporta un número limitado de idiomas en comparación con Tesseract e IronOCR.
  • Tesseract: Ofrece soporte para más de 100 idiomas.
  • IronOCR: Proporciona soporte para más de 125 idiomas, lo que lo hace adecuado para aplicaciones globales.

6. Conclusión

En conclusión, mientras que Windows OCR Engine y Tesseract son opciones populares para el reconocimiento de texto, IronOCR emerge como el motor OCR más preciso y versátil. Su precisión líder en la industria, amplio soporte de idiomas e integración sencilla lo convierten en una solución destacada para negocios y desarrolladores que buscan funcionalidad OCR confiable. Aprovechando IronOCR, las organizaciones pueden agilizar los flujos de trabajo de procesamiento de documentos, mejorar la precisión de extracción de datos y desbloquear valiosos conocimientos a partir de documentos e imágenes escaneados.

IronOCR ofrece una prueba gratuita. Para saber más sobre IronOCR y sus funciones visita aquí.

Kannaopat Udonpant
Ingeniero de Software
Antes de convertirse en Ingeniero de Software, Kannapat completó un doctorado en Recursos Ambientales de la Universidad de Hokkaido en Japón. Mientras perseguía su grado, Kannapat también se convirtió en miembro del Laboratorio de Robótica de Vehículos, que es parte del Departamento de Ingeniería ...
Leer más