使用シナリオ
- ページ数の多い複数ページ文書を変換する場合。一般的には、書籍や長いレポートなどを処理するケースです。この場合、文書のページを並列に認識し、その後メインプロセスで合成を実行して、さらに並列でエクスポートできます。また、Engine のプールを使用している場合は、複数の複数ページ文書を同時に処理することもできますが、メモリ消費量が非常に大きくなり、“out of memory” エラーが発生することもあります。
- 1ページ文書を大量に変換する場合。請求書、契約書、レターなどを処理するケースです。このような状況では、並列処理が最も容易です。1ページ文書は相互に依存せず、一度に大量のメモリを必要としないためです。
- 大量の画像を処理し、必要な情報を検索したり、認識結果を別の方法で利用したりする場合。これらの大半は編集可能な形式に変換する必要がない可能性があるため、合成やエクスポートの速度は問題になりません。複数のプロセスで実行される操作は、レイアウトブロックを順に処理し、テキストブロックの認識結果にアクセスすることです。
エクスポートで並列処理を使用する場合は、この機能がサポートされているのは PDF へのエクスポート (TextOnly モードを除く) と PPTX 形式のみであることに注意してください。
推奨事項と制限事項
-
多ページ文書の並列処理を行う場合、FRDocument の使用をおすすめします。追加のインターフェイスを実装する必要がないため、コーディングが最も簡単なマルチプロセッシング手法です。
開く、前処理、分析、認識は並列で実行されます。文書合成はメイン プロセスで順次実行され、その後、PDF および PPTX 形式へのエクスポート (TextOnly モードを除く) が並列で実行されます。 -
スキャナーなどのソースから受信される多数の 1 ページ文書を処理する場合、BatchProcessor の使用をおすすめします。
この手法の利点は、文書の数を事前に知らない場合、文書が異なる種類の場合、または到着次第すぐに処理する必要がある場合に使用できる点です。欠点は、実装に追加の労力が必要な点で、ファイル アダプターとカスタム画像ソース用のインターフェイスを実装しなければなりません。
すべての処理ステージは並列で実行されます。1 ページ文書の場合、ページごとおよび文書合成が個別に実行されるためです。
Batch Processor を使用したシナリオでは、並列エクスポートはサポートされていません。
- 多数の 1 ページ文書を並列でフル処理するには、COM を使用してアウトプロセスで読み込まれた Engine のプールを使用できます。この手法は速度面で最も効率的であり、マルチスレッド関連のすべての問題を自動的に解消します。ABBYY FineReader Engine オブジェクトのすべての操作が COM を介して直列化されるためです。ただし、いくつかの制限があります:
- COM の使用により、FREngine.dll を登録する必要があります。
- コードが C++ で記述されている場合、COM との操作は、たとえば C# に比べてより多くの煩雑なコーディングを必要とします。
- この場合、処理は別のプロセスで実行されるため、メモリから画像を開くことができず、認識結果のイテレーションに時間がかかります。各リクエストが別のプロセスに渡され、戻されるためです。
- 最後に、いくつかの Engine インスタンスを読み込むことは、より多くのメモリ消費を意味します。特に、この場合すべての処理ステージが並列で実行され、いくつかの同時合成操作が同時に進行し、さらにメモリを使用するためです。
- 並列処理中に発生したイベントをキャッチして処理するには、IParallelProcessingCallback インターフェイスを使用できます。このインターフェイスは、問題が発生した状況を管理するのに非常に役立ちます。たとえば、タイムアウト エラーが発生した場合、IParallelProcessingCallback インターフェイスは、ユーザー設定に応じて問題に対するいくつかの解決策を提供します。詳細については、IParallelProcessingCallback::OnWaitIntervalExceeded を参照してください。
ページの並列処理中に発生したイベントは、全体の文書のイベントに変換されます。
速度テストの結果
| <br /> | 1ページ文書 | 1つの複数ページ文書 | エクスポートなしでの結果検索 |
|---|---|---|---|
| 逐次処理 | 60 | 51 | 87 |
| FRDocument を使用した処理 | 41 | 117 | 57 |
| FRDocument を使用した処理 (with PageFlushingPolicy = PFP_KeepInMemory) | 55 | 141 | 82 |
| Batch Processor を使用した処理 | 99 | 115 | 294 |
| Engines のプールを使用した処理 | 165 | 10 | 102 |
FRDocument オブジェクトを使用した処理
- Engine オブジェクトの MultiProcessingParams サブオブジェクトの MultiProcessingMode プロパティの値を設定します。このプロパティが MPM_Parallel または MPM_Auto に設定されており、ドキュメントのページ数と使用可能な CPU コア数がいずれも 1 より大きい場合、並列処理が使用されます。
- RecognitionProcessesCount プロパティを使用して実行するプロセス数を調整し、必要に応じてその他のプロパティの値を指定します。
- AddImageFile、AddImageFileFromMemory、AddImageFileFromStream、AddImageFileWithPassword、AddImageFileWithPasswordCallback
- Preprocess、PreprocessPages
- Analyze、AnalyzePages
- Recognize、RecognizePages
- Process、ProcessPages
- Export、ExportPages、ExportToMemory — PDF (TextOnly モードを除く) および PPTX 形式へのエクスポートのみ対象
C# コード
C# コード
Batch Processorを使用した処理
- 画像ソースおよびその中のファイルへのアクセスを提供する IImageSource インターフェイスと IFileAdapter インターフェイスを実装します。
- [省略可能] 処理を管理するために IAsyncProcessingCallback インターフェイスを実装します。このインターフェイスのメソッドを使用すると、エラーの処理や処理のキャンセルが可能です。
- [省略可能] Engine オブジェクトの MultiProcessingParams サブオブジェクトを使用してマルチプロセッシングを設定します。Batch Processorを使用する場合はデフォルトで並列処理が使用されるため、MultiProcessingModeプロパティを設定する必要はありません。RecognitionProcessesCountプロパティで実行するプロセス数を調整し、必要に応じてその他のプロパティの値を指定します。
- Engine オブジェクトの CreateBatchProcessor メソッドを呼び出して、BatchProcessorオブジェクトを取得します。
- このオブジェクトの Start メソッドを呼び出して、プロセッサを初期化し、非同期認識プロセスを起動します。このメソッドの呼び出し時に、画像のソースを指定し、IAsyncProcessingCallbackインターフェイスおよびParameterオブジェクトへの参照を渡すことができます。
- GetNextProcessedPageメソッドをループ内で呼び出し続け、メソッドが0を返した時点で終了します。0が返された場合は、ソースに画像がなくなり、処理済みのすべての画像がユーザーに返されたことを意味します。
C# コード
C# コード
Engineのプールを使用した処理
C# コード
C# コード
- アカウントの権限は、DCOM Config ユーティリティを使用して設定できます (コマンドラインで「DCOMCNFG」と入力するか、コントロールパネル > 管理ツール > コンポーネントサービスを選択します) 。コンソールツリーで、コンポーネントサービス > コンピューター > マイコンピューター > DCOM Config フォルダーを開き、ABBYY FineReader Engine 12.5 Loader (ローカルサーバー) を右クリックして「プロパティ」をクリックします。ダイアログが開きます。「セキュリティ」タブをクリックし、「起動とアクティブ化のアクセス許可」の「カスタマイズ」をクリックしてから「編集」をクリックして、アプリケーションを起動できるアカウントを指定します。
64ビットオペレーティングシステムでは、登録されたDCOMアプリケーションは32ビットのMMCコンソールで利用可能です。このコンソールは、次のコマンドラインで起動できます。
- エンドユーザーのコンピューターにアプリケーションをインストールする際に
FREngine.dllを登録するには、regsvr32ユーティリティを使用します。64 ビット オペレーティング システムでは、既定で 64 ビット版のregsvr32が実行されます。次のコマンドラインを使用します。
- Engine をアウトプロセスサーバーとして実装する場合は、MultiProcessingParams オブジェクトの MultiProcessingMode プロパティを MPM_Sequential に設定して、ドキュメント処理のシーケンシャルモードを指定してください。
