Tesseract如何使用OpenCL?

5
我正在开展一个项目,需要我使用Tesseract加速文本识别的过程。我看到了一篇文章,其中提到Tesseract与OpenCL协同工作,将一些计算密集型任务分担到可用的CPU或GPU上。
是否有关于“Tesseract如何利用OpenCL将计算密集型任务分担到并行CPU核心或GPU上”的定性解释呢?

Tesseract源代码链接在这里 https://code.google.com/p/tesseract-ocr/source/browse/#git%2Fopencl

1个回答

1
Tesseract是一种OCR技术,因此它可以检测图像中的模式/字母。这大致上属于图像处理范畴,其中每个像素都可以并行计算,因此非常适合GPU(OpenCL/CUDA等)。

具体使用细节可能比较复杂难以理解,但基本上它在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设备所需的时间,并选择最佳设备。其他方法也是可行的。
在选择了最佳设备之后,设备就需要执行计算负载。在GPU的情况下,它将使用所有着色核心(计算核心)。在CPU的情况下,它将简单地运行一个线程池。但是,OpenCL不会进行GPU-CPU工作平衡。

感谢您的回复。我的目标是使用Tesseract加速文本识别过程。我将图像分成多个部分,并使用OpenCL在CPU或GPU的多个核心中处理它,而不是将整个图像发送到Tesseract。我能获得任何加速吗?或者Tesseract已经通过使用OpenCL饱和了GPU / CPU核心? - user4631489
1
OpenCL会充分利用所使用设备的核心。最多可以将处理任务分配到多个设备(CPU和GPU)上。但是,考虑到CPU在OpenCL任务中速度要慢得多(比如说10比1),我认为使用多个设备(分割、合并等)的开销不值得。 - DarkZeros
3
你有没有任何建议来提高Tesseract文字提取的速度?目前,每张图片需要大约10-15秒时间,具体时间取决于图片大小。 - Raghav
1
请告诉我是否成功了。 我一直在尝试使用带有OpenCL的Tesseract 3.03-rc1,但它会导致segfault。 尽管如此,AMD SDK中的示例程序正常运行,至少是使用单精度的那些程序。我的GPU显然不支持双精度。 - John Thompson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接