Verwendung von Async und Multithreading

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

von Chipego Kalinda

In der sich ständig weiterentwickelnden Landschaft der Softwareentwicklung bleibt die effiziente Verarbeitung großer Mengen von Textdaten eine zentrale Herausforderung. In diesem Artikel untersuchen wir die dynamische Synergie von Async-Unterstützung und Multithreading im Kontext von IronOCR und Tesseract. Die asynchrone Programmierung führt ein nicht blockierendes Paradigma ein, das sicherstellt, dass unsere Anwendungen während der Ausführung von OCR-Aufgaben flink und reaktionsschnell bleiben. Gleichzeitig tauchen wir in den Bereich des Multithreading ein und entdecken das Potenzial der Parallelität, um die Leistung von Texterkennungsvorgängen erheblich zu steigern. Begleiten Sie uns, wenn wir die Integration dieser Techniken entmystifizieren und Entwicklern die Möglichkeit geben, die Effizienz und Reaktionsfähigkeit ihrer OCR-gestützten Anwendungen zu verbessern.

Legen Sie los mit IronOCR

Beginnen Sie noch heute mit der Verwendung von IronOCR in Ihrem Projekt mit einer kostenlosen Testversion.

Erster Schritt:
green arrow pointer



Verstehen von Multithreading

In IronOCR wird die Effizienz der Bildverarbeitung und des OCR-Lesens durch nahtloses Multithreading verbessert, so dass Entwickler keine spezielle API mehr verwenden müssen. IronTesseract nutzt automatisch alle verfügbaren Threads auf mehreren Kernen und optimiert so die Systemressourcen für eine schnelle und reaktionsschnelle OCR-Ausführung. Dieses inhärente Multithreading vereinfacht nicht nur die Entwicklung, sondern steigert auch die Leistung erheblich und stellt eine ausgeklügelte Integration der Parallelität in den OCR-Workflow dar.

Ein Multithreading-Lesevorgang würde also ganz einfach so aussehen:

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

Verständnis der Async-Unterstützung

Im Bereich der optischen Zeichenerkennung(OCR)bei der Optimierung der Leistung spielt die asynchrone Programmierung, kurz "async", eine entscheidende Rolle. Die asynchrone Unterstützung ermöglicht es Entwicklern, OCR-Aufgaben auszuführen, ohne den Haupt-Thread zu blockieren, damit die Anwendung reaktionsfähig bleibt. Stellen Sie sich die Verarbeitung großer Dokumente oder Bilder für die Texterkennung vor - dank der asynchronen Unterstützung kann das System während der OCR-Vorgänge weiterhin andere Aufgaben bearbeiten.

In diesem Abschnitt befassen wir uns mit der mühelosen Integration der Async-Unterstützung in IronOCR und zeigen verschiedene Möglichkeiten auf, wie Sie Ihre OCR-Dienste non-blocking machen können.

Ein OcrReadTask-Objekt verwenden

Bei der Arbeit mit IronOCR erweist sich die Verwendung von OcrReadTask'-Objekten als wertvolles Hilfsmittel zur Verbesserung der Kontrolle und Flexibilität innerhalb Ihrer OCR-Prozesse. Diese Objekte kapseln OCR-Operationen und ermöglichen es Entwicklern, Texterkennungsaufgaben effizient zu verwalten. In diesem Abschnitt finden Sie Beispiele für die Verwendung von "OcrReadTask"-Objekten in Ihrem IronOCR-Workflow, die zeigen, wie sie zur Initiierung und Optimierung von OCR-Aufgaben eingesetzt werden können. Ganz gleich, ob Sie eine komplexe Dokumentenverarbeitung orchestrieren oder die Reaktionsfähigkeit Ihrer OCR-gestützten Anwendung feinabstimmen wollen, der effektive Einsatz vonOcrReadTask`-Objekten hilft, die Möglichkeiten von IronOCR zu maximieren.

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

Async-Methoden verwenden

`ReadAsync()bietet einen einfachen und intuitiven Mechanismus, um OCR-Vorgänge asynchron zu initiieren. Ohne kompliziertes Threading oder komplexe Aufgabenverwaltung können Entwickler asynchrone OCR mühelos in ihre Anwendungen integrieren. Diese Methode befreit den Haupt-Thread von der Belastung durch blockierende OCR-Aufgaben und stellt sicher, dass die Anwendung reaktionsschnell und agil bleibt.

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

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass die Nutzung von Multithreading in IronOCR einen entscheidenden Vorteil bei der Optimierung von OCR-Aufgaben darstellt. Die IronOCR innewohnenden Multithreading-Fähigkeiten, kombiniert mit benutzerfreundlichen Methoden wie ReadAsync()vereinfachen den Umgang mit großen Mengen von Textdaten. Diese Synergie sorgt dafür, dass Ihre Anwendungen reaktionsschnell und effizient bleiben, und macht IronOCR zu einem hervorragenden Werkzeug für die Entwicklung leistungsstarker Softwarelösungen mit optimierten Texterkennungsfunktionen.

Chipego related to Schlussfolgerung

Chipego

Software-Ingenieur

Chipego hat eine natürliche Fähigkeit zum Zuhören, die ihm hilft, Kundenprobleme zu verstehen und intelligente Lösungen anzubieten. Er trat dem Iron Software-Team 2023 bei, nachdem er einen Bachelor of Science in Informationstechnologie erworben hatte. IronPDF und IronOCR sind die beiden Produkte, auf die sich Chipego konzentriert hat, aber sein Wissen über alle Produkte wächst täglich, da er neue Wege findet, Kunden zu unterstützen. Er genießt die Zusammenarbeit bei Iron Software, da Teammitglieder aus dem gesamten Unternehmen ihre unterschiedlichen Erfahrungen einbringen und so zu effektiven, innovativen Lösungen beitragen. Wenn Chipego nicht an seinem Schreibtisch sitzt, kann man ihn oft bei einem guten Buch oder beim Fußballspielen antreffen.