Saltar al pie de página
COMPARAR CON OTROS COMPONENTES

Una comparación entre IronOCR y Dynamsoft OCR

El reconocimiento óptico de caracteres, o OCR, es un proceso de entrada de datos que implica el reconocimiento y digitalización de texto, tanto escrito como impreso. Es un tipo de tecnología informática que emplea el análisis de imágenes para convertir fotografías digitales de texto impreso en letras y números que pueden ser utilizados por otros programas como procesadores de texto. El texto se convierte en códigos de caracteres para que pueda ser buscado y modificado en una computadora.

Aunque el pasado era un mundo en el que todos los documentos eran físicos, y el futuro puede ser una sociedad en la que todos los documentos sean digitales, el presente está en flujo. Los documentos físicos y digitales coexisten en este estado de transición, por lo tanto, tecnologías como OCR son críticas para la conversión de ida y vuelta.

Recuperación de documentos, entrada de datos, y accesibilidad son solo algunas de las aplicaciones para OCR. La mayoría de las aplicaciones de OCR provienen de documentos escaneados, aunque las fotografías también se emplean ocasionalmente. El OCR es un valioso ahorrador de tiempo porque reescribir el material es a menudo la única otra opción. Los siguientes son algunos ejemplos de cómo se puede utilizar OCR:

  • Se pueden recuperar archivos de texto editables de documentos escaneados, incluidos faxes.
  • Uso de escaneos de libros para crear e-books editables y buscables.
  • Uso de fotos de capturas de pantalla para buscar y cambiar texto.
  • La tecnología de texto a voz se utiliza para leer libros a personas con discapacidad visual.

Aunque estas son solo algunas de las aplicaciones para OCR, demuestran la versatilidad de la tecnología en una amplia gama de industrias. Casi todos los empleados en todas las empresas dependen sustancialmente de los documentos a diario, por lo tanto, el uso empresarial es una consideración clave en el desarrollo de sistemas OCR.

En este artículo, compararemos los dos lectores OCR más potentes:

  • IronOCR
  • Dynamsoft OCR

IronOCR y Dynamsoft OCR son dos librerías OCR .NET que admiten la conversión de imágenes escaneadas y el procesamiento OCR de documentos PDF. Puedes transformar imágenes en texto buscable con solo unas pocas líneas de código. También puedes recuperar palabras, letras y párrafos individuales.

IronOCR: las características destacadas

IronOCR ofrece la capacidad única de detectar, leer e interpretar texto de imágenes y documentos PDF que no han sido escaneados con precisión. IronOCR ofrece el enfoque más sencillo para extraer texto de documentos y fotos, incluso si no siempre es el más rápido, porque afila y corrige automáticamente escaneos de baja calidad, reduciendo inclinaciones, distorsiones, ruido de fondo y problemas de perspectiva, mientras también mejora la resolución y el contraste.

IronOCR permite a los desarrolladores enviarle imágenes escaneadas de una o varias páginas, y devolverá todo el texto, códigos de barras e información QR. Un conjunto de clases en la librería OCR añade capacidad OCR a aplicaciones basadas en web, de escritorio o de consola. Tesseract OCR C#, así como aplicaciones netas JPG, PNG, TIFF, PDF, GIF, y BMP son solo algunos de los formatos que se pueden usar como entrada.

El motor de reconocimiento óptico de caracteres (OCR) de IronOCR puede leer texto preparado usando muchas fuentes comunes, cursivas, pesos y subrayados. Las clases de recorte hacen posible que el OCR funcione rápida y precisamente. Al trabajar con documentos de varias páginas, el motor de múltiples hilos de IronOCR acelera el OCR.

Funciones de IronOCR

Para la gestión de Tesseract, utilizamos IronOCR porque es único de las siguientes maneras:

  • Funciona directamente al sacarlo de la caja en .NET puro
  • No requiere que Tesseract esté instalado en tu máquina
  • Ejecuta los motores más recientes: Tesseract 5 (así como Tesseract 4 y 3)
  • Está disponible para cualquier proyecto .NET: .NET Framework 4.5 +, .NET Standard 2 + y .NET Core 2, 3 y .NET 5
  • Tiene mejor precisión y velocidad que el Tesseract tradicional
  • Soporta Xamarin, Mono, Azure y Docker
  • Gestiona el sistema de diccionario complejo de Tesseract usando paquetes NuGet
  • Soporta PDFS, Tiffs de múltiples fotogramas y todos los grandes formatos de imagen sin configuración
  • Puede corregir escaneos de baja calidad y sesgados para obtener los mejores resultados de Tesseract.

Características del OCR de Dynamsoft

La librería Dynamsoft.NET OCR es un componente .NET que proporciona reconocimiento óptico de caracteres rápido y confiable. Se utiliza para crear aplicaciones de escritorio .NET en C# o VB.NET. Puedes crear código fácilmente para convertir el texto inútil en PDF o fotos a texto digital para editar, buscar, archivar y más usando las API OCR básicas.

Las imágenes de escáneres y otros dispositivos compatibles con TWAIN se pueden adquirir de las siguientes maneras:

  • Se admiten todos los mecanismos de transferencia de imágenes de memoria nativa, almacenada y de archivo de disco.
  • Con el alimentador automático de documentos, se puede escanear por lotes (ADF).
  • Se pueden usar atributos TWAIN para modificar características comunes de dispositivos.
  • Se pueden cambiar IfAutoFeed, IfAutoScan, Resolución, Profundidad de bits, Brillo, Contraste, Unidad, Dúplex y otras características.
  • Se soporta la detección de páginas en blanco.
  • Te permite cambiar y guardar perfiles de escáner.

Capturar imágenes de cámaras web que cumplen con UVC y WIA:

  • Mostrar una transmisión de video en vivo mientras se capturan fotos de una cámara web escogida.
  • Personalizar la configuración de la cámara: Brillo, Contraste, Tono, Saturación, Nitidez, Gama, Balance de blancos, Compensación de contraluz, Ganancia, Habilitar color, Zoom, Enfoque, Exposición, Iris, Paneo, Inclinación, Rotar.

Carga/Vista de Imágenes Robusta

  • Se pueden cargar imágenes en formatos BMP, JPEG, PNG, TIFF y TIFF de múltiples páginas.
  • Se admite hacer zoom dentro y fuera de las fotos.
  • Las imágenes se pueden recuperar de un disco local, un servidor FTP, un servidor HTTP, o una base de datos.
  • Decodificación de imágenes para BMP, JPEG, PNG y TIFF usando uno de los conjuntos más completos de componentes de imagen .NET

Guardar y Subir/Descargar

  • Te permite leer y escribir fotos a través de un flujo de archivo.
  • Se admite guardar fotos capturadas como BMP, JPEG, PNG, TIFF o TIFF de múltiples páginas a una unidad local, un servidor web o una base de datos.
  • Se soportan las compresiones RLE, G3/G4, LZW, PackBits y TIFF.
  • Se soportan las subidas y descargas HTTPS.
  • Uno de los conjuntos más extensos de componentes de imagen .NET disponibles soporta codificación de imagen BMP, JPEG, PNG y TIFF.
  • Te permite adjuntar fotos adquiridas recientemente a archivos TIFF existentes.

Leer texto de archivos PDF escaneados u otras imágenes en ASP.NET (reconocimiento óptico de caracteres)

Los clientes quieren que el trabajo se complete rápidamente en el mundo acelerado de hoy. Clientes con proyectos urgentes nos contactan con frecuencia. Nuestra tecnología puede reconocer simplemente el contenido de una imagen y convertirlo en texto si el proyecto implica escanear documentos que contienen imágenes. El reconocimiento óptico de caracteres (OCR) ahorra tiempo y dinero a tu empresa mientras también reduce los errores de entrada de datos.

Uso de IronOCR

IronOCR hace uso de la clase IronOcr.IronTesseract para realizar sus conversiones OCR.

Usamos la clase IronOcr.IronTesseract para leer texto de una imagen y devolver automáticamente su resultado como una cadena en este ejemplo básico.

// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
// PM> Install-Package IronOcr
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create a new instance of the IronTesseract class
        var ironOcr = new IronTesseract();

        // Read the text from the image
        var result = ironOcr.Read(@"img\Screenshot.png");

        // Output the text to the console
        Console.WriteLine(result.Text);
    }
}
' PM> Install-Package IronOcr
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a new instance of the IronTesseract class
		Dim ironOcr = New IronTesseract()

		' Read the text from the image
		Dim result = ironOcr.Read("img\Screenshot.png")

		' Output the text to the console
		Console.WriteLine(result.Text)
	End Sub
End Class
$vbLabelText   $csharpLabel

Como resultado, el siguiente párrafo es 100 por ciento preciso:

Ejemplo Simple de IronOCR

En este ejemplo simple probaremos la precisión de nuestra librería OCR en C# para leer texto de una
Imagen PNG. Esta es una prueba muy básica, pero las cosas se complicarán a medida que el tutorial continúe.

El rápido zorro marrón salta sobre el perro perezoso

Aunque puede parecer simple en la superficie, hay un comportamiento sofisticado ocurriendo detrás de la superficie: escanear la imagen para alinear, calidad y resolución, examinar sus atributos, optimizar el motor OCR y finalmente leer el texto como podría hacerlo un ser humano.

El OCR es una tarea difícil para una máquina y las velocidades de lectura pueden ser comparables a las de un ser humano. En otras palabras, el OCR no es un procedimiento rápido. En este caso, sin embargo, es absolutamente correcto.

Precisión de los resultados de la aplicación OCR de C#

En la mayoría de los escenarios del mundo real, los desarrolladores querrán que sus proyectos funcionen tan rápido como sea posible. En este escenario, proponemos que en su lugar utilices las clases OcrInput e IronTesseract del espacio de nombres de complementos de IronOCR.

Puedes configurar las características exactas de un trabajo OCR con OcrInput, tales como:

  • JPEG, TIFF, GIF, BMP y PNG son solo algunos de los formatos de imagen que se pueden utilizar
  • Importar documentos PDF en su totalidad o en partes
  • Mejorar el contraste, la resolución y el tamaño de la imagen
  • Rotación, ruido de escaneo, ruido digital, inclinación y corrección de imagen negativa

IronTesseract

Elija entre cientos de idiomas y dialectos preempaquetados

  • Utilizar los motores OCR Tesseract 5, 4 o 3 inmediatamente
  • Si estamos mirando una captura de pantalla, un fragmento o el documento completo, especificar el tipo de documento
  • Reconocer códigos de barras
  • PDFs buscables, Hocr HTML, un DOM y Cadenas son todas opciones para los resultados OCR
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from an image file
        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		' Use the OcrInput class to read from an image file
		Using input = New OcrInput("img\Potter.tiff")
			' Perform the OCR operation
			Dim result = ocr.Read(input)

			' Output the recognized text to the console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Podemos usar esto incluso en un escaneo de calidad media con un 100% de precisión.

Ejemplo de escaneo OCR en C# desde TIFF

Como puedes ver, leer texto (y, si se desea, códigos de barras) de una imagen escaneada, como un TIFF, fue bastante fácil. La precisión de este trabajo de OCR es del 100 por ciento.

A continuación, probaremos un escaneo de mucho menor calidad de la misma página, a un DPI bajo y con mucha distorsión y ruido digital, así como daño al papel original.

Escaneo de baja resolución con OCR en C# y ruido digital

Aquí es donde IronOCR realmente brilla en comparación con otras librerías OCR como Tesseract, y veremos que otros proyectos OCR evitan discutir el uso del OCR en imágenes escaneadas del mundo real en lugar de casos de prueba 'perfectos' creados digitalmente para lograr una precisión de OCR del 100 por ciento.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        // Use the OcrInput class to read from a low-quality image file
        using (var input = new OcrInput(@"img\Potter.LowQuality.tiff"))
        {
            // Deskew the image to improve accuracy
            input.Deskew();

            // Perform the OCR operation
            var result = ocr.Read(input);

            // Output the recognized text to the console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		' Use the OcrInput class to read from a low-quality image file
		Using input = New OcrInput("img\Potter.LowQuality.tiff")
			' Deskew the image to improve accuracy
			input.Deskew()

			' Perform the OCR operation
			Dim result = ocr.Read(input)

			' Output the recognized text to the console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Sin agregar Input.Deskew() para enderezar la imagen obtenemos un 52.5% de precisión. Esto no es lo suficientemente bueno.

Agregar Input.Deskew() nos lleva a una precisión del 99.8% que es casi tan precisa como el OCR de un escaneado de alta calidad.

Uso de Dynamsoft OCR

Presentaremos algunos fragmentos de código para usar Dynamic Web TWAIN para hacer escaneo TWAIN y OCR en el lado del cliente en JavaScript.

Escanear Imágenes

Puedes cambiar las configuraciones de escaneo y adquirir fotos de escáneres TWAIN usando las simples APIs de Dynamic Web TWAIN.

function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
function acquireImage() {
    // Select an available TWAIN scanner
    DWObject.SelectSourceByIndex(document.getElementById("source").selectedIndex);

    // Set scanning settings like pixel type, resolution, ADF, etc.
    DWObject.IfShowUI = false; // Do not show the user interface of the scanner
    DWObject.PixelType = 1; // Scan in grayscale
    DWObject.Resolution = 300;
    DWObject.IfFeederEnabled = true; // Scan from auto feeder
    DWObject.IfDuplexEnabled = false;
    DWObject.IfDisableSourceAfterAcquire = true;

    // Acquire images from scanners
    DWObject.AcquireImage();
}
JAVASCRIPT

Descargar el Módulo Profesional de OCR

Para usar el módulo profesional de OCR para OCR en el lado del cliente, necesitarás incluir ocrpro.js en el head y también descargar el DLL de OCR Pro.

<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
<script type="text/javascript" src="Resources/addon/dynamsoft.webtwain.addon.ocrpro.js"></script>
HTML

Haz ediciones al archivo .js:

// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
// Define base path
var CurrentPathName = unescape(location.pathname);
var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);

// Download the OCR Pro add-on
DWObject.Addon.OCRPro.Download(CurrentPath + "Resources/addon/OCRPro.zip", OnSuccess, OnFailure);
JAVASCRIPT

Reconocer texto usando OCR

Usar la API de reconocimiento OCR en JS para extraer texto de imágenes escaneadas es tan simple como insertar el siguiente código.

// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
// Recognize text from the image at index 0
DWObject.Addon.OCRPro.Recognize(0, GetOCRProInfo, GetErrorInfo); // 0 is the index of the image
JAVASCRIPT

Lectura de regiones recortadas de imágenes

Ambos conjuntos de software ofrecen soluciones para recortar imágenes para OCR.

Lectura de regiones recortadas con IronOCR

La rama de Tesseract OCR de Iron es experta en leer regiones específicas de las imágenes, como se muestra en el siguiente ejemplo de código.

Usamos System.Drawing.Rectangle para describir la región exacta de una imagen que se debe leer en píxeles.

Cuando trabajamos con un formulario estandarizado que se llena, y solo una porción del contenido cambia de caso en caso, esto puede ser realmente útil.

Escanear una Sección de una Página: Usamos System.Drawing.Rectangle para designar una región para leer de un documento, mejorando la velocidad y precisión.

Ejemplo de escaneo OCR en C# desde TIFF
Ejemplo de escaneo OCR en C# desde TIFF
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;
using System.Drawing;

class Program
{
    static void Main(string[] args)
    {
        // Create an instance of IronTesseract
        var ocr = new IronTesseract();

        using (var input = new OcrInput())
        {
            // Define content area of interest
            var contentArea = new Rectangle() { X = 215, Y = 1250, Height = 280, Width = 1335 };

            // Add the specific region to the input
            input.AddImage("img/ComSci.png", contentArea);

            // Perform OCR operation
            var result = ocr.Read(input);

            // Output recognized text to console
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr
Imports System.Drawing

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create an instance of IronTesseract
		Dim ocr = New IronTesseract()

		Using input = New OcrInput()
			' Define content area of interest
			Dim contentArea = New Rectangle() With {
				.X = 215,
				.Y = 1250,
				.Height = 280,
				.Width = 1335
			}

			' Add the specific region to the input
			input.AddImage("img/ComSci.png", contentArea)

			' Perform OCR operation
			Dim result = ocr.Read(input)

			' Output recognized text to console
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Esto resulta en un aumento del 41 por ciento en velocidad, mientras también nos permite ser más específicos. Esto es extremadamente valioso para aplicaciones OCR .NET que involucran documentos que son comparables y consistentes, incluidos facturas, recibos, cheques, formularios, reclamaciones de gastos, y así sucesivamente.

Al leer PDFs, también se soporta ContentAreas (recorte de OCR).

Lectura de regiones recortadas con Dynamsoft OCR

Para empezar, lanza Visual Studio y construye una nueva Aplicación Windows Forms en C#, o abre una existente. Necesitaremos incluir DynamicDotNetTWAIN.dll, DynamicOCR.dll, y el paquete de idioma apropiado.

  1. Navegar a Herramientas -> Elegir Elementos de la Caja de Herramientas, luego a la pestaña Componentes del .NET Framework, hacer clic en el botón Examinar, y localizar DynamicDotNetTWAIN.dll.

  2. Hacer clic derecho en el archivo del proyecto en el Explorador de Soluciones y seleccionar Agregar-> Elemento Existente... luego agregar los elementos necesarios desde el directorio de recursos OCR.

Este es el código para hacer clic en el botón LoadImage:

private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
private void button1_Click(object sender, EventArgs e) 
{
    OpenFileDialog filedlg = new OpenFileDialog(); 
    if (filedlg.ShowDialog() == DialogResult.OK) 
    { 
        dynamicDotNetTwain1.LoadImage(filedlg.FileName);
        // Choose an image from your local disk and load it into Dynamic .NET TWAIN
    } 
}

private void dynamicDotNetTwain1_OnImageAreaSelected(short sImageIndex, int left, int top, int right, int bottom) 
{
    dynamicDotNetTwain1.OCRTessDataPath = "../../"; 
    dynamicDotNetTwain1.OCRLanguage = "eng";
    OcrResultFormat ocrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text;

    byte [] sbytes = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom);
    // OCR the selected area of the image

    if (sbytes != null) 
    { 
        SaveFileDialog filedlg = new SaveFileDialog(); 
        filedlg.Filter = "Text File(*.txt)| *.txt"; 
        if (filedlg.ShowDialog() == DialogResult.OK) 
        {
            FileStream fs = File.OpenWrite(filedlg.FileName); 
            fs.Write(sbytes, 0, sbytes.Length);
            // Save the OCR result as a text file
            fs.Close(); 
        }
        MessageBox.Show("OCR successful");
    } 
    else 
    {
        MessageBox.Show(dynamicDotNetTwain1.ErrorString); 
    }
}
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs)
	Dim filedlg As New OpenFileDialog()
	If filedlg.ShowDialog() = DialogResult.OK Then
		dynamicDotNetTwain1.LoadImage(filedlg.FileName)
		' Choose an image from your local disk and load it into Dynamic .NET TWAIN
	End If
End Sub

Private Sub dynamicDotNetTwain1_OnImageAreaSelected(ByVal sImageIndex As Short, ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer)
	dynamicDotNetTwain1.OCRTessDataPath = "../../"
	dynamicDotNetTwain1.OCRLanguage = "eng"
	Dim ocrResultFormat As OcrResultFormat = Dynamsoft.DotNet.TWAIN.OCR.ResultFormat.Text

	Dim sbytes() As Byte = dynamicDotNetTwain1.OCR(dynamicDotNetTwain1.CurrentImageIndexInBuffer, left, top, right, bottom)
	' OCR the selected area of the image

	If sbytes IsNot Nothing Then
		Dim filedlg As New SaveFileDialog()
		filedlg.Filter = "Text File(*.txt)| *.txt"
		If filedlg.ShowDialog() = DialogResult.OK Then
			Dim fs As FileStream = File.OpenWrite(filedlg.FileName)
			fs.Write(sbytes, 0, sbytes.Length)
			' Save the OCR result as a text file
			fs.Close()
		End If
		MessageBox.Show("OCR successful")
	Else
		MessageBox.Show(dynamicDotNetTwain1.ErrorString)
	End If
End Sub
$vbLabelText   $csharpLabel

Así es como se ve la aplicación:

Aplicación de demostración de Zone OCR con SDK de OCR dinámico .NET TWAIN

Ajuste del rendimiento de la imagen

La calidad de la imagen de entrada es el factor más crucial en la velocidad de una tarea OCR. Cuanto menor sea el ruido de fondo y mayor el dpi, con un valor objetivo excelente de alrededor de 200 dpi, más rápido y preciso será el resultado del OCR.

Técnicas de procesamiento de imágenes para Dynamsoft OCR

Necesitamos usar OCR en una variedad de situaciones, como escanear un número de tarjeta de crédito con nuestro teléfono o extraer texto de documentos en papel. Las capacidades OCR están incluidas en Dynamsoft Label Recognition (DLR) y Dynamic Web TWAIN (DWT).

Aunque pueden hacer un excelente trabajo en general, podemos mejorar los resultados usando varias técnicas de procesamiento de imágenes.

Aclarar/eliminar sombras

Una iluminación deficiente puede afectar el resultado del OCR. Para mejorar el resultado, podemos blanquear fotos o eliminar sombras de las imágenes.

Invert

Debido a que el motor OCR a menudo está entrenado en texto en colores oscuros, el texto en colores claros puede ser más difícil de descubrir y reconocer.

Texto claro

Será más fácil de reconocer si invertimos su color

Texto claro invertido

Para realizar la inversión, podemos usar el parámetro GrayscaleTransformationModes en DLR.

Aquí están los ajustes JSON:

"GrayscaleTransformationModes": [
    {
        "Mode": "DLR_GTM_INVERTED"
    }
]

DLR .net's reading result:

Resultado de texto claro

Rescale

Si la altura de la letra es demasiado baja, el motor OCR puede no producir un buen resultado. En general, la imagen debe tener un DPI de al menos 300.

Hay un parámetro ScaleUpModes en DLR 1.1 que te permite ampliar letras. Por supuesto, podemos escalar la imagen nosotros mismos.

Leer la imagen directamente arroja el resultado incorrecto:

1x imagen

Después de escalar la imagen x2, el resultado es correcto:

imagen 2x

Deskew

Está bien si el texto está un poco distorsionado. Sin embargo, si está demasiado inclinado, el resultado se verá adversamente alterado. Para mejorar el resultado, necesitamos recortar la imagen.

Para lograr esto, podemos usar la Transformada de Hough en OpenCV y Python.

Aquí está el código para desinclinar la imagen anterior:

import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Imagen PNG.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
import cv2
import numpy as np
import math
from PIL import Image

def deskew():
    src = cv2.imread("neg.jpg", cv2.IMREAD_COLOR)
    gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
    kernel = np.ones((5,5), np.uint8)
    erode_img = cv2.erode(gray, kernel)
    eroDil = cv2.dilate(erode_img, kernel)
    show_and_wait_key("eroDil", eroDil)

    canny = cv2.Canny(eroDil, 50, 150)
    show_and_wait_key("canny", canny)

    lines = cv2.HoughLinesP(canny, 0.8, np.pi / 180, 90, minLineLength=100, maxLineGap=10)
    drawing = np.zeros(src.shape[:], dtype=np.uint8)

    maxY = 0
    degree_of_bottomline = 0
    index = 0
    for line in lines:
        x1, y1, x2, y2 = line[0]
        cv2.line(drawing, (x1, y1), (x2, y2), (0, 255, 0), 1, lineType=cv2.LINE_AA)
        k = float(y1-y2)/(x1-x2)
        degree = np.degrees(math.atan(k))
        if index == 0:
            maxY = y1
            degree_of_bottomline = degree
        else:        
            if y1 > maxY:
                maxY = y1
                degree_of_bottomline = degree
        index += 1
    show_and_wait_key("houghP", drawing)

    img = Imagen PNG.fromarray(src)
    rotate_img = img.rotate(degree_of_bottomline)
    rotate_img_cv = np.array(rotate_img)
    cv2.imshow("rotateImg", rotate_img_cv)
    cv2.imwrite("deskewed.jpg", rotate_img_cv)
    cv2.waitKey()

def show_and_wait_key(win_name, img):
    cv2.imshow(win_name, img)
    cv2.waitKey()

if __name__ == "__main__":
    deskew()
PYTHON

Líneas detectadas:

Líneas detectadas

Desinclinado:

Imagen torcida

Técnicas de procesamiento de imágenes para IronOCR

La calidad de la imagen de entrada no es importante aquí porque IronOCR destaca en reparar documentos defectuosos (aunque esto es laborioso y hará que tus trabajos de OCR usen más ciclos de CPU).

Elegir formatos de imágenes de entrada con menos ruido digital, como TIFF o PNG, también puede resultar en resultados más rápidos que formatos de imagen con pérdida, como JPEG.

Los filtros de imagen que se enumeran a continuación pueden mejorar significativamente el rendimiento:

  • OcrInput.Rotate(double degrees) — Rota imágenes en el sentido de las agujas del reloj por un número específico de grados. Se utilizan enteros negativos para la rotación en sentido antihorario.
  • OcrInput.Binarize() — Este filtro de imagen hace que cada píxel sea negro o blanco, sin intermedios. Puede mejorar el rendimiento del OCR en circunstancias en las que el contraste texto-fondo es muy bajo.
  • OcrInput.ToGrayScale() — Este filtro de imagen convierte cada píxel a un tono de escala de grises. Es poco probable que mejore la precisión del OCR, pero puede aumentar la velocidad.
  • OcrInput.Contrast() — Aumenta automáticamente el contraste. En escaneos de bajo contraste, este filtro frecuentemente mejora la velocidad y precisión del OCR.
  • OcrInput.DeNoise() — Este filtro solo debe usarse cuando se espera ruido.
  • OcrInput.Invert() — Invierte todos los colores. Por ejemplo, blanco se convierte en negro: negro se convierte en blanco.
  • OcrInput.Dilate() — Morfología avanzada. La dilatación es el proceso de añadir píxeles a los bordes de los objetos en una imagen. (Inverse of Erode)
  • OcrInput.Erode() — Una función de morfología avanzada. La erosión es el proceso de eliminar píxeles de los bordes de los objetos. (Inverse of Dilate)
  • OcrInput.Deskew() — Rota una imagen para que sea ortogonal y esté hacia arriba. Debido a que la tolerancia de Tesseract para escaneos inclinados puede ser tan baja como 5 grados, esto es bastante útil para el OCR.
  • DeepCleanBackgroundNoise() — Elimina mucho ruido de fondo. Solo utiliza este filtro si sabes que hay mucho ruido de fondo en el documento porque puede reducir la precisión del OCR en documentos claros y es bastante intensivo en uso de CPU.
  • OcrInput.EnhanceResolution — Mejora la resolución de fotos de baja resolución. Gracias a OcrInput, este filtro se usa raramente. OcrInput detectará y resolverá automáticamente la baja resolución.

Puede que queramos usar IronTesseract para acelerar el OCR en escaneos de mayor calidad. Si estamos buscando velocidad, podríamos empezar aquí y posteriormente volver a activar características hasta que se logre el equilibrio adecuado.

using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
using IronOcr;

class Program
{
    static void Main(string[] args)
    {
        var ocr = new IronTesseract();

// Configuration for speed tuning
        ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
        ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto;
        ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5;
        ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly;
        ocr.Language = OcrLanguage.EnglishFast;

        using (var input = new OcrInput(@"img\Potter.tiff"))
        {
            var result = ocr.Read(input);
            Console.WriteLine(result.Text);
        }
    }
}
Imports IronOcr

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim ocr = New IronTesseract()

' Configuration for speed tuning
		ocr.Configuration.BlackListCharacters = "~`$#^*_}{][|\"
		ocr.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.Auto
		ocr.Configuration.TesseractVersion = TesseractVersion.Tesseract5
		ocr.Configuration.EngineMode = TesseractEngineMode.LstmOnly
		ocr.Language = OcrLanguage.EnglishFast

		Using input = New OcrInput("img\Potter.tiff")
			Dim result = ocr.Read(input)
			Console.WriteLine(result.Text)
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Este resultado es 99.8% preciso en comparación con la línea base de 100% — pero un 35% más rápido.

Licencias y precios

Licencias y precios de Dynamsoft

Licencia por año. Todas las tarifas incluyen un año de mantenimiento, que incluye actualizaciones gratuitas de software y soporte premium.

Dynamsoft ofrece dos tipos de licencias:

Licencia por dispositivo cliente

La "Licencia de Un Dispositivo Cliente" proporciona acceso a una misma Aplicación de origen (mismo protocolo, mismo anfitrión y mismo puerto) para utilizar las características del software desde un único dispositivo cliente. Un dispositivo cliente inactivo es aquel que no ha accedido a ninguna capacidad del software durante 90 días seguidos. Un asiento de licencia de dispositivo cliente inactivo se liberará automáticamente y estará disponible para el uso de cualquier otro dispositivo cliente activo. Cuando alcances el máximo de asientos de licencia permitidos, Dynamsoft te dará un 10% adicional de tu asignación de dispositivos cliente para uso de emergencia. Una vez que se haya agotado la asignación adicional de dispositivos clientes, ningún nuevo dispositivo cliente podrá acceder y usar el software hasta que haya asientos de licencia disponibles nuevamente. Ten en cuenta que exceder tu asignación de dispositivos cliente no afecta a ningún dispositivo cliente que ya haya sido licenciado.

Licencia por servidor

Para desplegar la aplicación en un solo servidor, se requiere una "Licencia de Un Servidor". Los servidores se refieren a servidores físicos y virtuales y incluyen, pero no se limitan a, servidores de producción, servidores de reserva, servidores de desarrollo que también se utilizan para pruebas, servidores de aseguramiento de calidad, servidores de pruebas y servidores de puesta en escena, todos los cuales requieren una licencia. No se requieren licencias adicionales para servidores de integración continua (servidores de construcción) o servidores de desarrollo local. La licencia por servidor solo es válida para instalaciones en servidores locales, y no para implementaciones en la nube.

Los precios para Dynamsoft OCR comienzan en USD 1,249/año.

Licencias y precios de IronOCR

Como desarrolladores, todos queremos completar nuestros proyectos con la menor cantidad de dinero y recursos posibles — el presupuesto es crítico. Examina la gráfica para determinar qué licencia se adapta mejor a tus necesidades y presupuesto.

IronOCR proporciona licencias con un número personalizable de desarrolladores, proyectos y ubicaciones, lo que te permite cumplir con las necesidades de tu proyecto mientras solo pagas por la cobertura que necesitas.

Las claves de licencia de IronOCR te permiten publicar tu producto sin una marca de agua.

Las licencias comienzan desde $799 e incluyen un año de soporte y actualizaciones.

También puedes usar una clave de licencia de prueba para probar IronOCR gratis.

Conclusión

Tesseract OCR en Mac, Windows, Linux, Azure OCR y Docker están disponibles con IronOCR para C#. .NET Framework 4.0 o superior es requerido, .NET Standard 2.0+, .NET Core 2.0+, .NET 5, Mono para macOS y Linux, y Xamarin para macOS son todos ejemplos de desarrollo multiplataforma. IronOCR también utiliza el último motor Tesseract 5 para leer texto, códigos de barras y códigos QR de todos los principales formatos de imagen y PDF. En minutos, esta librería agrega funcionalidad OCR a tus aplicaciones de escritorio, consola o web. ¡El OCR también puede leer PDFs y TIFFs de múltiples páginas, y puede ser guardado como un documento PDF buscable o XHTML en cualquier Escaneo OCR. La salida de datos incluye texto plano, datos de código de barras y una clase de resultados OCR que abarca párrafos, líneas, palabras y caracteres. Está disponible en 125 idiomas, incluyendo árabe, chino, inglés, finlandés, francés, alemán, hebreo, italiano, japonés, coreano, portugués, ruso y español, pero ten en cuenta que también se pueden generar paquetes de idiomas personalizados.

El complemento de OCR de Dynamic .NET TWAIN es un componente .NET rápido y confiable para el Reconocimiento Óptico de Caracteres que puedes usar en aplicaciones WinForms y WPF escritas en C# o VB .NET. Puedes escanear documentos o capturar fotos desde cámaras web usando el módulo de captura de imágenes de Dynamic .NET TWAIN, y luego realizar OCR en las imágenes para convertir el texto en las imágenes en texto, archivos PDF buscables o cadenas. Se ofrecen múltiples idiomas asiáticos, así como árabe, además de inglés.

IronOCR ofrece mejor licencia que Dynamsoft OCR; IronOcr comienza en $799 con un año gratis, mientras que Dynamsoft comienza en $1249 con una prueba gratuita. IronOCR también ofrece licencias para múltiples usuarios, mientras que con Dynamsoft, solo obtienes una licencia por usuario.

Mientras ambos conjuntos de software apuntan a ofrecer el mejor rendimiento en términos de lecturas OCR de códigos de barras, imagen a texto e imagen a texto, IronOCR destaca en que brilla su luz incluso en imágenes que están en muy mal estado. Automáticamente pone en marcha sus sofisticados métodos de ajuste para darte los mejores resultados de OCR. IronOCR también utiliza Tesseract para darte resultados óptimos con pocos o ningún error.

Iron Software también ofrece a sus clientes y usuarios la opción de obtener toda su suite de software en solo dos clics. Esto significa que por el precio de dos de los componentes en la suite de Iron Software, actualmente puedes obtener todos los cinco componentes y soporte ininterrumpido.

Por favor notaDynamsoft OCR es una marca registrada de su respectivo propietario. Este sitio no está afiliado, ni respaldado, ni patrocinado por Dynamsoft OCR. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son sólo para fines informativos y reflejan información disponible públicamente al momento de escribir.

Preguntas Frecuentes

¿Cómo puedo convertir imágenes de texto en formatos digitales utilizando C#?

Puedes utilizar IronOCR en C# para convertir imágenes de texto en formatos digitales. IronOCR proporciona métodos para afilar automáticamente y corregir escaneos de baja calidad, lo que lo hace ideal para convertir varios formatos de imagen en texto.

¿Qué ventajas ofrece IronOCR para manejar escaneos de baja calidad?

IronOCR mejora automáticamente escaneos de baja calidad al reducir el desvío, la distorsión y el ruido de fondo, al tiempo que mejora la resolución y el contraste, lo que asegura una mayor precisión en el reconocimiento de texto.

¿Qué biblioteca OCR es mejor para aplicaciones multiplataforma?

IronOCR es adecuado para aplicaciones multiplataforma, ya que es compatible con entornos como Xamarin y Azure, ofreciendo flexibilidad a los desarrolladores que trabajan con diversas plataformas.

¿Qué formatos de imagen soporta IronOCR?

IronOCR admite una amplia gama de formatos de imagen, lo que lo hace versátil para diferentes aplicaciones de OCR. Puede procesar imágenes y documentos PDF, proporcionando flexibilidad en el manejo de diversas fuentes de entrada.

¿Puede la tecnología OCR ayudar con la gestión de documentos en las empresas?

Sí, la tecnología OCR puede ayudar significativamente en la gestión de documentos al digitalizar documentos físicos, haciéndolos buscables y editables. Esto reduce la entrada de datos manual, minimiza errores y mejora la accesibilidad.

¿Cómo maneja Dynamsoft OCR la adquisición de imágenes desde dispositivos?

Dynamsoft OCR admite la adquisición de imágenes desde dispositivos compatibles con TWAIN y cámaras web, permitiendo el escaneo por lotes y la modificación de atributos del escáner para un procesamiento de imágenes eficiente.

¿Cuáles son las opciones de precios de IronOCR en comparación con otras bibliotecas?

IronOCR ofrece licencias personalizables que pueden adaptarse según el número de desarrolladores, proyectos y ubicaciones, proporcionando opciones más flexibles y rentables en comparación con algunas otras bibliotecas.

¿Cuáles son algunos problemas comunes enfrentados al usar la tecnología OCR?

Los problemas comunes con la tecnología OCR incluyen el manejo de imágenes de baja resolución, distorsión y fuentes de texto variadas. Sin embargo, bibliotecas como IronOCR tienen funciones integradas para abordar estos problemas, mejorando la precisión de OCR.

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