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
- Make sure you have installed OpenCL sdk and libtiff-dev
- 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.
- 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结果或错误而非性能提升.