如何使用异步和多线程

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

奇佩戈-卡琳达

在不断发展的软件开发领域,如何高效处理大量文本数据仍然是一项关键挑战。在本文中,我们将探讨异步支持和多线程在 IronOCR 和 Tesseract 中的动态协同作用。异步编程引入了非阻塞范式,确保我们的应用程序在执行 OCR 任务时保持灵活和快速响应。同时,我们还将深入探讨多线程领域,揭示并行化的潜力,从而显著提高文本识别操作的性能。请加入我们的行列,我们将为您揭开这些技术集成的神秘面纱,帮助开发人员提高 OCR 应用程序的效率和响应能力。


适用于OCR的C# NuGet库

安装使用 NuGet

Install-Package IronOcr
Java PDF JAR

下载 DLL

下载DLL

手动安装到你的项目中

适用于OCR的C# NuGet库

安装使用 NuGet

Install-Package IronOcr
Java PDF JAR

下载 DLL

下载DLL

手动安装到你的项目中

开始在您的项目中使用IronPDF,并立即获取免费试用。

第一步:
green arrow pointer

查看 IronOCRNuget 用于快速安装和部署。它有超过800万次下载,正在使用C#改变OCR。

适用于OCR的C# NuGet库 nuget.org/packages/IronOcr/
Install-Package IronOcr

考虑安装 IronOCR DLL 直接。下载并手动安装到您的项目或GAC表单中: IronOcr.zip

手动安装到你的项目中

下载DLL

了解多线程

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

了解异步支持

在光学字符识别领域 (光学字符识别)异步编程(或称 "async")在优化性能方面发挥着举足轻重的作用。异步支持允许开发人员在不阻塞主线程的情况下执行 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#

使用异步方法

读取同步()为异步启动 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,可以简化对大量文本数据的处理。这种协同作用可确保您的应用程序保持快速响应和高效率,使 IronOCR 成为制作具有精简文本识别功能的高性能软件解决方案的强大工具。

Chipego

软件工程师

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