TesseractOpenCL - kana112233/tesseract GitHub Wiki

#Tesseract和OpenCL

OpenCL是一种允许便携式使用GPU计算资源的API.

它支持Linux,macOS和Windows.

现代图形卡可以非常快速地完成Tesseract所需的一些计算.

通过使用该计算能力,理想的Tesseract可以更快.

#如何使用OpenCL构建Tesseract

重要说明:Tesseract中的OpenCL支持仍被认为是实验性的. 有一些与之相关的主要错误(参见问题837). 建议不要使用OpenCL支持构建Tesseract(对于任何版本的Tesseract),除非您是开发人员并希望改进OpenCL代码.

##使用OpenCL在VS 2010上构建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)包含.    *库文件路径:转到配置属性 -->链接器 -->常规 -->其他库目录. 添加OpenCL库文件OpenCL.lib在给定计算机上的目录路径. 例如:在安装了AMD APP SDK的计算机上 路径将是$(AMDAPPSDKROOT)lib \ x86.    *库参考:转到配置属性 -->链接器 -->输入 -->附加依赖项. 将OpenCL.lib添加到依赖库列表中.    *预处理器定义:转到配置属性 --> C/C ++ -->预处理器 -->预处理器定义. 将USE \ _OPENCL添加到预处理程序定义列表列表中.

4.重复与上面第3点相同的步骤,为“libtesseract”项目设置OpenCL路径

5.构建并运行解决方案.

Building Tesseract on Linux with OpenCL

  1. Make sure you have installed OpenCL sdk and libtiff-dev
  2. The OpenCL header and library paths are currently defined by the variables OPENCL_HDR_PATH and OPENCL_LIB in configure.ac. These have to be set to the appropriate paths depending on the OpenCL installation.
  3. To build on Linux use
./configure --enable-opencl

or if you want to specified opencl include (/opt/AMDAPP/include/) and library (/opt/AMDAPP/lib/x86_64/) paths:

export LIBRARY_PATH=/opt/AMDAPP/lib/x86_64/:$LIBRARY_PATH
CPPFLAGS+=-I/opt/AMDAPP/include/ ./configure --enable-opencl 

#将Tesseract与OpenCL一起使用

通常,Tesseract可与* OpenCL Installable Client Drivers *(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 - 英特尔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)

*英特尔(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

苹果系统

Windows

  • pthread-Intel(R)Core(TM)i5 CPU 650 @ 3.20GHz

##性能

只有OCR进程的某些部分由OpenCL处理,因此使用OpenCL不一定会导致更快的OCR. 必须进行更精确的测量.

##已知问题

OpenCL仍处于试验阶段,因此预计可能发生崩溃,错误的OCR结果或错误而非性能提升.