Tesseract 如何使用 OpenCL?

How does Tesseract use OpenCL?

我正在从事一个项目,该项目要求我使用 Tesseract 加快文本识别过程。我遇到了一个 article,它说 Tesseract 正在与 OpenCL 一起工作,将一些计算密集型任务卸载到 CPU 或可用的 GPU 上。
关于如何 'Tesseract is making use of OpenCL to offload the compute intensive tasks on to parallel CPU cores or GPUs' 有定性的解释吗?

Tesseract 源的 link 在这里 https://code.google.com/p/tesseract-ocr/source/browse/#git%2Fopencl

Tesseract 是一种 OCR,因此它正在检测图像中的 patterns/letters。这是粗略的图像处理,其中每个像素都可以并行计算,因此非常适合 GPU (OpenCL/CUDA/etc..).

它的具体使用方式很难理解,但基本上它在 OpenCL 中处理以下内容(如分析代码所打印):

 composeRGBPixel: 0.073872 (w=1.2)
 HistogramRect: 0.121674 (w=2.4)
 ThresholdRectToPix: 0.050257 (w=4.5)
 getLineMasksMorph: 0.350409 (w=5.0)

基本上,就是在 GPU 中进行一些像素转换(非常高效),然后是直方图,最后对图像进行阈值处理。

分析代码只是测量每个 OpenCL 设备所用的时间,select选择最好的一个。其他方法也是可能的。

在它 select 最好的设备之后,设备的任务就是执行计算负载。在 GPU 的情况下,它将使用所有着色核心(计算核心)。在 CPU 的情况下,它将只是 运行 一个线程池。但是 OpenCL 不会完成 GPU-CPU 工作平衡。