如何使用异步和多线程

This article was translated from English: Does it need improvement?
Translated
View the article in English

奇佩戈-卡琳达

在不断发展的软件开发领域中,高效处理大量文本数据仍然是一个关键挑战。 在本文中,我们探讨了在IronOCR和Tesseract环境中,异步支持与多线程的动态协同作用。 异步编程引入了非阻塞范式,确保在执行OCR任务期间,我们的应用程序保持灵活和响应。 同时,我们深入研究多线程领域,揭示了并行处理在显著提升文本识别操作性能方面的潜力。 加入我们,一起探索这些技术的集成,使开发者能够提高他们的OCR驱动应用程序的效率和响应速度。

开始使用IronOCR

立即在您的项目中开始使用IronOCR,并享受免费试用。

第一步:
green arrow pointer



理解多线程

在IronOCR中,通过无缝多线程技术,可以提升图像处理和OCR阅读的效率,开发者无需使用专门的API。 IronTesseract自动利用多个核心上的所有可用线程,优化系统资源以实现快速且响应灵敏的OCR执行。 这种内在的多线程不仅简化了开发,而且显著提高了性能,展示了并行性在OCR工作流中的复杂集成。

因此,多线程读取看起来会像这样简单:

: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#

了解异步支持

在光学字符识别领域(光学字符识别)异步编程或“异步”在优化性能中起着关键作用。 异步支持允许开发人员在不阻塞主线程的情况下执行OCR任务,确保应用程序保持响应。想象一下处理大型文档或图像以进行文本识别 - 异步支持允许系统在OCR操作进行时继续处理其他任务。

在本节中,我们将深入探讨在IronOCR中无缝集成异步支持,展示使您的OCR服务非阻塞的不同方法。

使用 OcrReadTask 对象

在使用IronOCR时,OcrReadTask对象的运用在增强您的OCR过程中的控制性和灵活性方面证明是一种宝贵的资产。 这些对象封装了OCR操作,使开发人员能够有效管理文本识别任务。 本节提供了在您的IronOCR工作流程中使用OcrReadTask对象的示例,演示了如何利用它们来启动和优化OCR任务。 无论您是在协调复杂的文档处理,还是在调优您的OCR驱动应用程序的响应性,有效利用OcrReadTask对象有助于最大化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);
// Start the OCR task asynchronously
readTask.Start();

// Continue with other tasks while OCR is in progress
DoOtherTasks();

// Wait for the OCR task to complete and retrieve the result
OcrResult result = await Task.Run(() => readTask.Result);

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

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

static void DoOtherTasks()
{
    // Simulate other tasks being performed while OCR is in progress
    Console.WriteLine("Performing other tasks...");
    Thread.Sleep(2000); // Simulating work for 2000 milliseconds
}
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)
' Start the OCR task asynchronously
readTask.Start()

' Continue with other tasks while OCR is in progress
DoOtherTasks()

' Wait for the OCR task to complete and retrieve the result
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()
'{
'	' Simulate other tasks being performed while OCR is in progress
'	Console.WriteLine("Performing other tasks...");
'	Thread.Sleep(2000); ' Simulating work for 2000 milliseconds
'}
VB   C#

使用异步方法

ReadAsync()提供了一种直接且直观的机制,用于异步启动OCR操作。 开发人员可以轻松地将异步OCR集成到他们的应用程序中,而无需复杂的线程处理或复杂的任务管理。 此方法解放了主线程,使其不必承担阻塞OCR任务的负担,确保应用程序保持响应灵活。

: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()
{
    // Simulate other tasks being performed while OCR is in progress
    Console.WriteLine("Performing other tasks...");
    System.Threading.Thread.Sleep(2000); // Simulating work for 2000 milliseconds
}
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()
'{
'	' Simulate other tasks being performed while OCR is in progress
'	Console.WriteLine("Performing other tasks...");
'	System.Threading.Thread.Sleep(2000); ' Simulating work for 2000 milliseconds
'}
VB   C#

结论

总的来说,在IronOCR中利用多线程技术证明了它在优化OCR任务中的革命性作用。 IronOCR的天生多线程能力,结合了像ReadAsync这样的用户友好方法。()简化大量文本数据的处理。 这种协同作用确保您的应用程序保持响应迅速和高效,使IronOCR成为打造具有流畅文本识别功能的高性能软件解决方案的强大工具。

Chipego related to 结论

Chipego

软件工程师

Chipego 拥有出色的倾听技巧,这帮助他理解客户问题并提供智能解决方案。他在 2023 年加入 Iron Software 团队,此前他获得了信息技术学士学位。IronPDF 和 IronOCR 是 Chipego 主要专注的两个产品,但他对所有产品的了解每天都在增长,因为他不断找到支持客户的新方法。他喜欢 Iron Software 的合作氛围,公司各地的团队成员贡献他们丰富的经验,以提供有效的创新解决方案。当 Chipego 离开办公桌时,你经常可以发现他在看书或踢足球。