跳至內容。

Tesseract 和 OpenCL

OpenCL 是一個 API,允許可攜式地使用 GPU 計算資源。它支援 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 可安裝用戶端驅動程式 (ICD) 搭配使用。它會在執行時測試可用的 OpenCL 驅動程式,因此 Tesseract 二進位檔可以在不同的電腦上使用不同的 GPU 硬體。您只需為您的 GPU 硬體安裝 OpenCL 驅動程式即可。也有一個使用 CPU 而非 GPU 的通用 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 裝置。由於原生 CPU 在 Tesseract 中也有一個裝置號碼(永遠是最高的數字),因此可以透過設定該號碼來停用 OpenCL 的使用。

OpenCL (ICD) 的可安裝用戶端驅動程式

這些 Debian 套件提供此類驅動程式

可以透過設定環境變數 (範例) 來啟用某些驅動程式的偵錯訊息。

OpenCL 裝置(範例)

Linux (x86)

macOS

Windows

效能

只有 OCR 過程的某些部分由 OpenCL 處理,因此使用 OpenCL 不一定會導致 OCR 速度更快。必須進行更精確的測量。

已知問題

OpenCL 仍然是實驗性的,因此請預期可能會發生當機、錯誤的 OCR 結果或效能變差而不是提高的情況。