【问题标题】:Is Tesseract(an OCR engine) reentrant?Tesseract(OCR 引擎)是可重入的吗?
【发布时间】:2011-06-17 05:00:20
【问题描述】:

我正在四核处理器上使用 Tesseract 进行 OCR。 为了提高速度,我想一次阅读 4 个单词,使用 4 个线程。 从多个线程同时调用 Tesseract 是否安全?

注意:每个线程将处理不同的非共享图像。

注意:由于速度原因,用锁守卫是不行的。

【问题讨论】:

  • 代码可以是线程安全的,无需重入。听起来您想要线程安全,而不一定要重入。
  • 是的,它可以通过使用锁使其成为线程安全的,但由于速度的原因,我需要它是可重入的。代码应该并行执行。

标签: concurrency ocr tesseract reentrancy


【解决方案1】:

the release notes 开始,Tesseract 从 3.01(2011 年 10 月 21 日)开始(大部分,并且在您描述需要的程度上)是线程安全的

线程安全!将所有关键的全局变量和静态变量移至 适当的班级。 Tesseract 现在是线程安全的(多个 实例可以在多个线程中并行使用。)与次要 一些控制参数仍然是全局的并影响所有的例外 线程。

我已经成功地在多个内核上使用它很长时间(或更长时间,来自 dev 分支)。

【讨论】:

    【解决方案2】:

    我不认为 tesseract 目前是可并行化的(参见 this thread),尽管 main goals for v3.0 is to make it more thread-safe 之一。

    但是,您始终可以通过运行 tesseract 的 n 个并发 进程 来实现并行化。如果您想并行处理单个图像的 OCR,您可以将其拆分并将每个部分提供给这些 n 个进程中的每一个(基本上是一个 mapreduce)。

    【讨论】:

    • 与进程的并行化将更加困难......我有一个进程一次生成许多不同的图像。将这些图像提供给 tesseract 进程是可能的,并且可以解决问题,但我需要一种方法来与进程对话并分派和收集输入/输出。
    • @Hristo:我在使用 GeckoFX 时遇到了完全相同的问题,并使用 TPL + 代理解决了它:bugsquash.blogspot.com/2010/03/…
    猜你喜欢
    • 1970-01-01
    • 2012-04-19
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多