C# IronOCRによる非同期とマルチスレッドのサポート — 高速テキスト抽出・文字起こし
IronOCR は、すべての CPU コア間でマルチスレッドを自動的に処理し、メインスレッドをブロックせずに OCR を実行するための ReadAsync() などの非同期メソッドを提供することで、大規模なドキュメントの文字起こしやテキスト抽出を行いながらアプリケーションの応答性を確保します。
はじめに
大量のテキストデータを効率的に処理するには、OCR操作の精度と速度の両方が必要です。 この記事ではIronOCRとTesseractの非同期サポートとマルチスレッドについて説明します。 非同期プログラミングにより、OCRのノンブロッキング実行が可能になり、テキスト認識タスク中のアプリケーションの応答性が保たれます。 マルチスレッドにより並列処理が可能になり、OCRのパフォーマンスが大幅に向上します。 これらの技術は、開発者がOCR搭載アプリケーションの効率と応答性を向上させるのに役立ちます。
クイックスタート: ReadAsync を使用して簡単に非同期 OCR を実行する
メイン スレッドをブロックせずに OCR を実行するには、IronTesseract の ReadAsync メソッドを使用します。 これは、アプリケーションに応答性の高いノンブロッキングOCRを迅速に追加します。 PDF文書を処理するときや、複数の画像ファイルを同時に処理するときに、特に効果的です。
最小限のワークフロー(5ステップ)
- 非同期とマルチスレッドでTesseractをサポートするC#ライブラリをダウンロードする
- IronOCRによって管理されるマルチスレッドを活用する
- 読み取りのためのPDF文書や画像を準備します
- `OcrReadTask`オブジェクトを使用して、非同期並行処理を利用する。
- 使いやすさのために`ReadAsync`メソッドを使用する
IronOCRでマルチスレッドはどのように動作しますか?
IronOCRはシームレスなマルチスレッドにより画像処理とOCR読み取り効率を向上させ、開発者に特別なAPIを必要としません。 IronTesseract は、複数のコア間で利用可能なすべてのスレッドを自動的に活用し、迅速な OCR 実行のためにシステム リソースを最適化します。 このビルトイン・マルチスレッディングは、OCRワークフローに直接並列処理を統合することで、開発を簡素化し、パフォーマンスを大幅に向上させます。
ライブラリのマルチスレッドTesseract実装は、以下のような重要な利点を提供します:
- CPUコアの自動利用: IronOCRは手動で設定することなく、利用可能なすべてのコアを検出し利用します。
- スレッドセーフな操作:すべてのOCR操作はデフォルトでスレッドセーフに設計されています。
- 最適化されたリソース管理:メモリと処理リソースは、スレッド間で効率的に割り当てられます。
- スケーラブルなパフォーマンス:処理時間は利用可能なコア数に比例して減少します。
以下は、C#によるマルチスレッド読み込みの例です:
: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
高速 OCR 設定を必要とする高度なシナリオでは、開発者は精度を維持しながら、特定のパフォーマンス要件に合わせてマルチスレッドの動作を微調整できます。
IronOCRで非同期サポートを使うには?
非同期プログラミングは、開発者がメインスレッドをブロックすることなくOCRタスクを実行できるようにすることで、OCRのパフォーマンスを最適化します。 これにより、テキスト認識のために大きな文書や画像を処理しながらも、アプリケーションの応答性を保つことができます。 非同期サポートにより、OCR操作がバックグラウンドで実行されている間、システムは他のタスクを処理することができます。 この能力は、OCR progress tracking をユーザーインターフェースに実装する際に非常に重要です。
このセクションでは、IronOCRの非同期サポート統合を取り上げ、OCRサービスをノンブロッキングにするさまざまな方法を示します。 IronOCRの非同期機能は、OCR操作中の応答性を必要とするデスクトップアプリケーションと、複数のOCRリクエストを同時に処理するウェブサービスの両方で最適なパフォーマンスを保証します。
いつ OcrReadTask オブジェクトを使用する必要がありますか?
OcrReadTask オブジェクトは、 IronOCRを使用した OCR プロセスの制御と柔軟性を強化します。 これらのオブジェクトは、OCR操作をカプセル化し、テキスト認識タスクの効率的な管理を可能にします。 このセクションでは、 IronOCRワークフローで OcrReadTask オブジェクトを使用する方法と、OCR タスクを開始および最適化する方法を説明します。 OcrReadTask オブジェクトは、複雑なドキュメント処理を調整したり、アプリケーションの応答性を微調整したりするときに、 IronOCR の機能を最大限に活用するのに役立ちます。
OcrReadTask オブジェクトは次の場合に最適に機能します。
- タスクの実行をきめ細かく制御する必要があります。
- キャンセル可能な操作のためのアボート・トークン機能の実装
- 優先順位の異なる複数のOCR作業を同時に管理する
- カスタムタスクスケジューラやワークフローエンジンとの統合
: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
'}
どのように ReadAsync メソッドを使用しますか?
ReadAsync() は、OCR 操作を非同期的に開始するための直接的なメカニズムを提供します。 複雑なスレッド処理やタスク管理を行うことなく、開発者は非同期OCRをアプリケーションに統合することができます。 この方法は、OCRタスク中にメインスレッドがブロックされるのを防ぎ、アプリケーションの応答性を確保します。
ReadAsync メソッドは次の場合に適しています。
- UIの応答性を維持する必要があるデスクトップアプリケーション
- 複数の同時 OCR 要求を処理するウェブアプリケーション
- 進捗管理が不可欠なバッチ処理シナリオ
- .NETアプリケーションにおける最新のasync/awaitパターンとの統合
: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
'}
なぜIronOCRで非同期とマルチスレッドを使うべきなのでしょうか?
IronOCRの非同期サポートとマルチスレッドの組み合わせは、最新のアプリケーション開発に多くの利点をもたらします:
パフォーマンスの利点:
- スループットの向上:ブロックせずに複数のドキュメントを同時に処理
- より優れたリソース利用:利用可能なすべてのコアで CPU 使用率を最大化します。
- 待ち時間の短縮: 前の処理が完了するのを待たずに、すぐに処理を開始します。
- スケーラブルなアーキテクチャ: アーキテクチャを変更することなく、作業負荷の増加に対応します。
開発のメリット:
- シンプルなコード: スレッドを手動で管理する必要はありません - IronOCRが複雑さを処理します。
- モダン・パターン:Tesseract 5 for .NET で async/await パターンをフルサポート。
- 簡単な統合:既存 for .NET非同期インフラストラクチャとシームレスに動作します。
- 保守可能なソリューション:.NETのベストプラクティスに従った明確で読みやすいコード
IronOCRのマルチスレッドはOCRタスクを大幅に最適化します。 組み込みのマルチスレッド機能と ReadAsync() などのメソッドを組み合わせることで、大量のテキスト データの処理が簡素化されます。 この組み合わせにより、アプリケーションの応答性と効率性が保たれ、IronOCRは合理化されたテキスト認識機能を持つ高性能ソフトウェアを作成するための効果的なツールとなります。 完全な機能セットを使い始めるには、NuGetパッケージインストールガイドをご覧ください。
よくある質問
C#でメインスレッドをブロックせずに非同期にOCRを実行するにはどうすればよいですか?
IronOCRはノンブロッキングOCR実行を可能にするReadAsyncメソッドを提供します。var result = await new IronOcr.IronTesseract().ReadAsync("image.png");`を使うだけで、OCRを非同期に実行することができます。
OCRは自動的に複数のCPUコアを使用してパフォーマンスを向上させますか?
はい、IronOCRは組み込みのマルチスレッディングにより、利用可能なすべてのCPUコアを自動的に活用します。IronTesseractの実装は、手動で設定することなくすべてのコアを検出し利用するため、最適化されたリソース管理とスケーラブルなパフォーマンスを提供します。
OCR処理におけるマルチスレッドの主な利点は何ですか?
IronOCRのマルチスレッド実装は、CPUコアの自動利用、デフォルトでのスレッドセーフ操作、メモリと処理の最適化されたリソース管理、利用可能なコアに比例して処理時間が減少するスケーラブルなパフォーマンスを提供します。
非同期OCRで複数のPDF文書を同時に処理できますか?
IronOCRのReadAsyncメソッドはPDFドキュメントの処理や複数の画像ファイルの同時処理に特に有効で、アプリケーションをブロックすることなく複数のドキュメントを同時に処理することができます。
OCRのマルチスレッドを有効にするには、特別なコードを書く必要がありますか?
IronOCRはマルチスレッド用に特別なAPIや手動設定を必要としません。このライブラリは並列処理をOCRワークフローに直接シームレスに統合し、最適なパフォーマンスのために複数のコアにまたがるスレッドを自動的に管理します。
OcrReadTaskオブジェクトとはどのようなもので、非同期処理にどのように役立ちますか?
IronOCRのOcrReadTaskオブジェクトは、ドキュメントを処理する際に非同期並行処理を利用することを可能にします。OCR処理を非同期で管理することができ、その間にライブラリはマルチスレッドの複雑さを処理します。
IronOCR は .NET 10 と完全に互換性がありますか?
.NET 10はIronOCRの最新リリース・バージョン2025.12でサポートされています。NuGet (Install-Package IronOcr)を使用してライブラリをインストールし、特別な設定なしに.NET 10でReadAsync()のような非同期メソッドを実行することができます。

