コンテンツへスキップ。

TesseractとOpenCL

OpenCLは、GPUコンピューティングリソースをポータブルに使用できるAPIです。Linux、macOS、Windowsでサポートされています。

最新のグラフィックカードは、Tesseractに必要な計算の一部を非常に高速に実行できます。その計算能力を利用することで、Tesseractを理想的に高速化できます。

OpenCLを使用したTesseractのビルド方法

重要な注意点:TesseractにおけるOpenCLのサポートはまだ実験段階とみなされています。いくつかの重大なバグが関連付けられています(issue 837を参照)。OpenCLサポート付きでTesseractをビルドすることは、(Tesseractのどのバージョンでも)推奨されません。あなたが開発者であり、OpenCLコードを改善したい場合を除きます。

VS 2010でOpenCLを使ってTesseractをビルドする

  1. \tesseract-ocr\vs2010\tesseract.slnにあるTesseract Visual Studio 2010ソリューションファイルを開きます。

  2. 必要なビルド構成(LIB_DEBUG / LIB_RELEASE / DLL_DEBUG / DLL_RELEASE)を選択します。

  3. 「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を追加します。
  4. 上記のポイント3と同じ手順を繰り返して、「libtesseract」プロジェクトのOpenCLパスを設定します。

  5. ソリューションをビルドして実行します。

LinuxでOpenCLを使ってTesseractをビルドする

  1. OpenCL sdkとlibtiff-devがインストールされていることを確認してください。
  2. OpenCLヘッダーとライブラリのパスは、現在、configure.acの変数OPENCL_HDR_PATHとOPENCL_LIBで定義されています。これらは、OpenCLのインストールに応じて適切なパスに設定する必要があります。
  3. 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パッケージは、そのようなドライバーを提供します。

環境変数を設定することにより、一部のドライバーのデバッグメッセージを有効にすることができます()。

OpenCLデバイス(例)

Linux(x86)

macOS

Windows

パフォーマンス

OCRプロセスの一部のみがOpenCLによって処理されるため、OpenCLを使用しても必ずしもOCRが大幅に高速化されるわけではありません。より正確な測定を行う必要があります。

既知の問題

OpenCLはまだ実験段階であるため、クラッシュ、OCR結果の誤り、改善ではなくパフォーマンスの低下が発生する可能性があります。