Cómo utilizar Async y Multithreading

por Chipego Kalinda

En el panorama en constante evolución del desarrollo de software, el tratamiento eficaz de grandes volúmenes de datos textuales sigue siendo un reto fundamental. En este artículo, exploramos la sinergia dinámica de Async Support y Multithreading en el contexto de IronOCR y Tesseract. La programación asíncrona introduce un paradigma de no bloqueo, lo que garantiza que nuestras aplicaciones sigan siendo ágiles y reactivas durante la ejecución de las tareas de OCR. Al mismo tiempo, nos adentramos en el reino del multihilo, desentrañando el potencial del paralelismo para aumentar significativamente el rendimiento de las operaciones de reconocimiento de texto. Únase a nosotros para desmitificar la integración de estas técnicas y permitir a los desarrolladores aumentar la eficacia y la capacidad de respuesta de sus aplicaciones basadas en OCR.


Biblioteca NuGet C# para OCR

Instalar con NuGet

Install-Package IronOcr
o
Java PDF JAR

Descargar DLL

Descargar DLL

Instalar manualmente en su proyecto

Comprender el multihilo

En IronOCR, la eficacia del procesamiento de imágenes y la lectura OCR se ve reforzada por el multithreading sin fisuras, lo que elimina la necesidad de que los desarrolladores empleen una API especializada. IronTesseract aprovecha automáticamente todos los subprocesos disponibles en varios núcleos, optimizando los recursos del sistema para una ejecución rápida y ágil del OCR. Este multithreading intrínseco no sólo simplifica el desarrollo, sino que también aumenta significativamente el rendimiento, mostrando una sofisticada integración del paralelismo en el flujo de trabajo de OCR.

Así que una lectura multihilo sería tan simple como esto:

:path=/static-assets/ocr/content-code-examples/how-to/async-simple-multithreading.cs
using IronOcr;
using System;

var ocr = new IronTesseract();

using (var input = new OcrPdfInput(@"example.pdf"))
{
    var result = ocr.Read(input);
    Console.WriteLine(result.Text);
};
Imports IronOcr
Imports System

Private ocr = New IronTesseract()

Using input = New OcrPdfInput("example.pdf")
	Dim result = ocr.Read(input)
	Console.WriteLine(result.Text)
End Using
VB   C#

Comprender la compatibilidad con Async

En el ámbito del reconocimiento óptico de caracteres (OCR)La programación asíncrona, o "async", desempeña un papel fundamental en la optimización del rendimiento. La compatibilidad asíncrona permite a los desarrolladores ejecutar tareas de OCR sin bloquear el subproceso principal, lo que garantiza la capacidad de respuesta de la aplicación. Imagina el procesamiento de documentos o imágenes de gran tamaño para el reconocimiento de texto: la compatibilidad asíncrona permite al sistema seguir gestionando otras tareas mientras se llevan a cabo las operaciones de OCR.

En esta sección, profundizaremos en la integración sin esfuerzo de Async Support en IronOCR, mostrando diferentes formas de hacer que sus servicios OCR no se bloqueen.

Uso de un objeto OcrReadTask

Cuando se trabaja con IronOCR, la utilización de objetos OcrReadTask demuestra ser un activo valioso para mejorar el control y la flexibilidad dentro de sus procesos de OCR. Estos objetos encapsulan las operaciones de OCR, lo que permite a los desarrolladores gestionar eficazmente las tareas de reconocimiento de texto. Esta sección proporciona ejemplos del empleo de objetos OcrReadTask en su flujo de trabajo IronOCR, demostrando cómo pueden ser aprovechados para iniciar y optimizar tareas OCR. Ya sea que esté orquestando el procesamiento de documentos complejos o ajustando la capacidad de respuesta de su aplicación potenciada por OCR, la utilización eficaz de los objetos OcrReadTask ayuda a maximizar las capacidades de IronOCR.

:path=/static-assets/ocr/content-code-examples/how-to/async-ocrtask.cs
using IronOcr;

IronTesseract ocr = new IronTesseract();

OcrPdfInput largePdf = new OcrPdfInput("chapter1.pdf");

Func<OcrResult> reader = () =>
{
    return ocr.Read(largePdf);
};

OcrReadTask readTask = new OcrReadTask(reader.Invoke);
//  Iniciar la tarea OCR de forma asíncrona
readTask.Start();

//  Continúe con otras tareas mientras se realiza el OCR
DoOtherTasks();

//  Esperar a que finalice la tarea de OCR y recuperar el resultado
OcrResult result = await Task.Run(() => readTask.Result);

Console.Write($"##### OCR RESULTS ###### \n {result.Text}");

largePdf.Dispose();
readTask.Dispose();

static void DoOtherTasks()
{
    //  Simular otras tareas mientras se realiza el OCR
    Console.WriteLine("Performing other tasks...");
    Thread.Sleep(2000); //  Simulación de trabajo durante 2000 milisegundos
}
Imports Microsoft.VisualBasic
Imports IronOcr

Private ocr As New IronTesseract()

Private largePdf As New OcrPdfInput("chapter1.pdf")

Private reader As Func(Of OcrResult) = Function()
	Return ocr.Read(largePdf)
End Function

Private readTask As New OcrReadTask(AddressOf reader.Invoke)
'  Iniciar la tarea OCR de forma asíncrona
readTask.Start()

'  Continúe con otras tareas mientras se realiza el OCR
DoOtherTasks()

'  Esperar a que finalice la tarea de OCR y recuperar el resultado
Dim result As OcrResult = Await Task.Run(Function() readTask.Result)

Console.Write($"##### OCR RESULTS ###### " & vbLf & " {result.Text}")

largePdf.Dispose()
readTask.Dispose()

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static void DoOtherTasks()
'{
'	'  Simular otras tareas mientras se realiza el OCR
'	Console.WriteLine("Performing other tasks...");
'	Thread.Sleep(2000); '  Simulación de trabajo durante 2000 milisegundos
'}
VB   C#

Utilizar métodos asíncronos

ReadAsync() proporciona un mecanismo sencillo e intuitivo para iniciar operaciones de OCR de forma asíncrona. Sin necesidad de hilos intrincados ni de una compleja gestión de tareas, los desarrolladores pueden integrar sin esfuerzo el OCR asíncrono en sus aplicaciones. Este método libera al subproceso principal de la carga que supone el bloqueo de las tareas de OCR, lo que garantiza la capacidad de respuesta y la agilidad de la aplicación.

:path=/static-assets/ocr/content-code-examples/how-to/async-read-async.cs
using IronOcr;
using System;
using System.Threading.Tasks;

IronTesseract ocr = new IronTesseract();

using (OcrPdfInput largePdf = new OcrPdfInput("PDFs/example.pdf"))
{
    var result = await ocr.ReadAsync(largePdf);
    DoOtherTasks();
    Console.Write($"##### OCR RESULTS ###### " +
                $"\n {result.Text}");
}

static void DoOtherTasks()
{
    //  Simular otras tareas mientras se realiza el OCR
    Console.WriteLine("Performing other tasks...");
    System.Threading.Thread.Sleep(2000); //  Simulación de trabajo durante 2000 milisegundos
}
Imports Microsoft.VisualBasic
Imports IronOcr
Imports System
Imports System.Threading.Tasks

Private ocr As New IronTesseract()

Using largePdf As New OcrPdfInput("PDFs/example.pdf")
	Dim result = Await ocr.ReadAsync(largePdf)
	DoOtherTasks()
	Console.Write($"##### OCR RESULTS ###### " & $vbLf & " {result.Text}")
End Using

'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'static void DoOtherTasks()
'{
'	'  Simular otras tareas mientras se realiza el OCR
'	Console.WriteLine("Performing other tasks...");
'	System.Threading.Thread.Sleep(2000); '  Simulación de trabajo durante 2000 milisegundos
'}
VB   C#

Conclusión

En resumen, el aprovechamiento del multithreading en IronOCR ha demostrado ser un gran cambio en la optimización de las tareas de OCR. Las capacidades multithreading innatas de IronOCR, combinadas con métodos fáciles de usar como ReadAsync()simplifican el tratamiento de grandes volúmenes de datos de texto. Esta sinergia garantiza la capacidad de respuesta y la eficacia de sus aplicaciones, lo que convierte a IronOCR en una herramienta formidable para crear soluciones de software de alto rendimiento con funciones de reconocimiento de texto optimizadas.

Chipego

Ingeniero de software

Chipego tiene una habilidad natural para escuchar que le ayuda a comprender los problemas de los clientes y a ofrecer soluciones inteligentes. Se unió al equipo de Iron Software en 2023, después de estudiar una licenciatura en Tecnología de la Información. IronPDF e IronOCR son los dos productos en los que Chipego se ha centrado, pero su conocimiento de todos los productos crece día a día, a medida que encuentra nuevas formas de ayudar a los clientes. Disfruta de lo colaborativa que es la vida en Iron Software, con miembros del equipo de toda la empresa que aportan su variada experiencia para contribuir a soluciones eficaces e innovadoras. Cuando Chipego está lejos de su escritorio, a menudo se le puede encontrar disfrutando de un buen libro o jugando al fútbol.