TesseractとOpenCL
OpenCLは、GPUコンピューティングリソースをポータブルに使用できるAPIです。Linux、macOS、Windowsでサポートされています。
最新のグラフィックカードは、Tesseractに必要な計算の一部を非常に高速に実行できます。その計算能力を利用することで、Tesseractを理想的に高速化できます。
OpenCLを使用したTesseractのビルド方法
重要な注意点:TesseractにおけるOpenCLのサポートはまだ実験段階とみなされています。いくつかの重大なバグが関連付けられています(issue 837を参照)。OpenCLサポート付きでTesseractをビルドすることは、(Tesseractのどのバージョンでも)推奨されません。あなたが開発者であり、OpenCLコードを改善したい場合を除きます。
VS 2010でOpenCLを使ってTesseractをビルドする
-
\tesseract-ocr\vs2010\tesseract.slnにあるTesseract Visual Studio 2010ソリューションファイルを開きます。
-
必要なビルド構成(LIB_DEBUG / LIB_RELEASE / DLL_DEBUG / DLL_RELEASE)を選択します。
- 「tesseract」プロジェクトでOpenCLパスを設定します。
- 「tesseract」プロジェクトを右クリックし、「プロパティ」を選択します。
- ヘッダーファイルのパス:構成プロパティ -> C/C++ -> 全般 -> 追加のインクルードディレクトリに進みます。OpenCLヘッダーファイルが配置されているディレクトリパスを、指定されたマシンに追加します。例:AMD APP SDKがインストールされたマシンでは、このパスは
$(AMDAPPSDKROOT)include
になります。 - ライブラリファイルのパス:構成プロパティ -> リンカー -> 全般 -> 追加のライブラリディレクトリに進みます。OpenCLライブラリファイル
OpenCL.lib
が配置されているディレクトリパスを、指定されたマシンに追加します。例:AMD APP SDKがインストールされたマシンでは、このパスは$(AMDAPPSDKROOT)lib\x86
になります。 - ライブラリ参照:構成プロパティ -> リンカー -> 入力 -> 追加の依存ファイルに進みます。依存ライブラリのリストにOpenCL.libを追加します。
- プリプロセッサ定義:構成プロパティ -> C/C++ -> プリプロセッサ -> プリプロセッサの定義に進みます。プリプロセッサ定義のリストにUSE_OPENCLを追加します。
-
上記のポイント3と同じ手順を繰り返して、「libtesseract」プロジェクトのOpenCLパスを設定します。
- ソリューションをビルドして実行します。
LinuxでOpenCLを使ってTesseractをビルドする
- OpenCL sdkとlibtiff-devがインストールされていることを確認してください。
- OpenCLヘッダーとライブラリのパスは、現在、configure.acの変数OPENCL_HDR_PATHとOPENCL_LIBで定義されています。これらは、OpenCLのインストールに応じて適切なパスに設定する必要があります。
- Linuxでビルドするには、以下を使用します。
./configure --enable-opencl
または、openclインクルード(
/opt/AMDAPP/include/
)とライブラリ(/opt/AMDAPP/lib/x86_64/
)パスを指定したい場合は、以下を使用します。export LIBRARY_PATH=/opt/AMDAPP/lib/x86_64/:$LIBRARY_PATH CPPFLAGS+=-I/opt/AMDAPP/include/ ./configure --enable-opencl
OpenCLを使用したTesseractの使用
通常、TesseractはOpenCL Installable Client Drivers(ICD)と連携して動作します。実行時に利用可能なOpenCLドライバーをテストするため、Tesseractバイナリは異なるコンピューター上の異なるGPUハードウェアで動作できます。必要なのは、GPUハードウェア用のOpenCLドライバーをインストールすることだけです。また、GPUの代わりにCPUを使用する汎用OpenCLドライバーも存在します。複数のOpenCLドライバーをコンピューターシステムで有効にすることができます。
OpenCLサポート付きのTesseractを最初に起動すると、利用可能なOpenCLドライバーを探し、それぞれについてベンチマークを実行します。さらに、ネイティブCPU(OpenCLなし)を使用して同じベンチマークが実行されます。ベンチマーク結果は、将来の実行のために現在のディレクトリのファイルtesseract_opencl_profile_devices.dat
に保存されます。Tesseractは、すべてのベンチマーク結果から加重パフォーマンスインデックスを計算し、計算に最適な方法を選択します。強制的に再構築するには、ファイルを削除します。各OpenCLドライバー用に生成されたGPUコードも、個別のファイルにkernel-
とドライバー名と.bin
が付いた名前で保存されます。たとえば、kernel-Intel(R)_HD_Graphics_IvyBridge_M_GT2.bin
です。OpenCLソフトウェアを更新した後は、再構築を強制するためにこれらのファイルを削除してください。
環境変数TESSERACT_OPENCL_DEVICE
を設定することにより、自動選択を上書きすることが可能です。たとえば、TESSERACT_OPENCL_DEVICE=1
は、最初のOpenCLデバイスを選択します。Tesseractでは、ネイティブCPUにもデバイス番号(常に最大の番号)があるため、その番号を設定することでOpenCLの使用を無効にできます。
OpenCL用Installable Client Drivers(ICD)
これらのDebianパッケージは、そのようなドライバーを提供します。
- amd-opencl-icd – AMD Radeon GPU
- beignet-opencl-icd – Intel GPU
- mesa-opencl-icd – AMD GPU
- nvidia-egl-icd – NVIDIA GPU
- nvidia-legacy-304xx-opencl-icd – NVIDIA GPU
- nvidia-legacy-340xx-opencl-icd – NVIDIA GPU
- nvidia-opencl-icd – NVIDIA GPU
- pocl-opencl-icd – ネイティブCPU
環境変数を設定することにより、一部のドライバーのデバッグメッセージを有効にすることができます(例)。
OpenCLデバイス(例)
Linux(x86)
- Intel(R) HD Graphics IvyBridge M GT2
- pthread-Intel(R) Core(TM) i7-3520M CPU @ 2.90GHz
- pthread-Intel(R) Xeon(R) CPU E5620 @ 2.40GHz
macOS
Windows
- pthread-Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz
パフォーマンス
OCRプロセスの一部のみがOpenCLによって処理されるため、OpenCLを使用しても必ずしもOCRが大幅に高速化されるわけではありません。より正確な測定を行う必要があります。
既知の問題
OpenCLはまだ実験段階であるため、クラッシュ、OCR結果の誤り、改善ではなくパフォーマンスの低下が発生する可能性があります。