Tesseract(一种OCR引擎)是否可重入?

7
我正在使用四核处理器进行Tesseract OCR。为了更快的速度,我想一次读取4个单词,使用4个线程。同时从多个线程调用Tesseract安全吗?
注意:每个线程将在不同的非共享图像上工作。
注意:由于速度问题,使用锁进行保护是不可行的。

1
代码可以是线程安全的,而不需要是可重入的。听起来你想要的是线程安全,而不一定是可重入性。 - Marcelo Cantos
可以使用锁使其线程安全,但由于速度的原因,我需要它是可重入的。代码应该并行执行。 - Hristo Hristov
2个回答

7
发布说明中可以得知,自2011年10月21日起,Tesseract在3.01版本中(在您需要的程度上)基本实现了线程安全。
引入了线程安全!将所有关键全局变量和静态变量移动到适当类的成员中。现在,Tesseract是线程安全的,多个实例可以并行在多个线程中使用。但部分控制参数仍为全局变量,并影响所有线程。
我已经成功地在多个核心上使用它进行工作,如开发分支所述。

3
我认为Tesseract目前不支持并行处理(请参见此线程),尽管v3.0的主要目标之一是使其更加线程安全
但是,您可以通过运行n个并发的Tesseract进程来实现并行化。如果您想并行化单个图像的OCR处理,则需要将其拆分并将每个部分馈送给这些n个进程中的每一个(基本上是mapreduce)。

使用进程进行并行化将会更加困难...我有一个可以同时生成许多不同图像的进程。将这些图像提供给tesseract进程是可行的,也能解决问题,但我需要一种方法来与进程通信,并分配和收集输入/输出。 - Hristo Hristov
@Hristo:我之前也遇到了GeckoFX的同样问题,但是通过TPL +代理解决了它:http://bugsquash.blogspot.com/2010/03/proxying-and-parallelizing-processes.html - Mauricio Scheffer

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