Tesseract 和 OpenCL
OpenCL 是一种 API,它允许便携式地使用 GPU 计算资源。它支持 Linux、macOS 和 Windows。
现代显卡可以快速完成 Tesseract 所需的某些计算。通过使用这种计算能力,Tesseract 理论上可以更快。
如何使用 OpenCL 构建 Tesseract
重要提示:Tesseract 中的 OpenCL 支持仍被认为是实验性的。它有一些主要错误(请参阅问题 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 include (
/opt/AMDAPP/include/
) 和 library (/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 软件包提供了这些驱动程序
- 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
性能
OpenCL 只处理 OCR 过程中的某些部分,因此使用 OpenCL 不一定能使 OCR 速度更快。必须进行更精确的测量。
已知问题
OpenCL 仍处于实验阶段,因此可能出现崩溃、错误的 OCR 结果或性能下降而不是提高。