【问题标题】:How to Make Tesseract Faster [closed]如何使 Tesseract 更快[关闭]
【发布时间】:2017-01-11 01:30:48
【问题描述】:

这是一个很长的镜头,但我不得不问。我需要任何可能使 Tesseract OCR 引擎更快的想法。我正在处理由大约 2000 万页文本组成的 200 万份 PDF,我需要尽可能地发挥性能。目前的估计是,如果我什么都不做,这将需要大约一年的时间。

我已经调整了输入图像以获得一些提升,但我需要考虑其他方法。我认为目前对图像的改进不会让我有所收获。

例如:

  • 可以使用优化标志或类似的东西重新编译 Tesseract 吗?
  • 是否可以使用共享 CPU 内存或 GPU?
  • 我能否以某种方式告诉 Tesseract 使用更多内存(我有很多)?
  • 还有其他方法可以让 CPU 密集型 C++ 程序更快吗?

目前,Tesseract 由我们的任务运行器 Celery 运行,它使用多处理来完成其工作。这样,我可以让服务器看起来像这样:

我(显然?)不知道我在说什么,因为我是一名 Python 开发人员,而 Tesseract 是用 C++ 编写的,但如果有任何方法可以在这里得到提升,我会喜欢想法。

【问题讨论】:

    标签: python c++ performance tesseract


    【解决方案1】:

    我也有巨大的 OCR 需求,而 Tesseract 的速度非常慢。我最终选择了custom feedforward net similar to this one。不过,您不必自己构建它;您可以使用像Nervana neon 这样的高性能库,它恰好易于使用。

    那么问题有两部分:

    1) 将字符与非字符分开。
    2) 向网络提供角色。

    假设您分批输入大小为1000 的字符,您将每个字符的大小调整为8 x 8(64 像素),并且您想识别26 个字母(小写和大写)和10 个数字和10 个特殊字符字符(总共 72 个字形)。然后解析所有 1000 个字符最终成为两个(非关联!)矩阵产品:

    (AB)点C

    A 将是一个1000 x 64 矩阵,B 将是一个64 x 256 矩阵,C 将是一个256 x 72 矩阵。

    对我来说,这比 Tesseract 快几个数量级。只需对您的计算机执行这些矩阵乘积的速度进行基准测试(元素是浮点数)。

    矩阵乘积是非关联的,因为在第一个乘积之后您必须应用一个称为 ReLU 的(廉价)函数。

    我花了几个月的时间才让整个墨西哥卷饼从头开始工作,但 OCR 是我项目的主要部分。

    此外,分割字符也很重要。根据您的 PDF,它可以是任何东西,从简单的计算机视觉练习到开放的人工智能研究问题。

    我并不是说这是最简单或最有效的方法...这就是我所做的!

    【讨论】:

    • 感谢您的回复。这听起来像是一个非常令人印象深刻的设置。不幸的是,我们没有资源来做类似的事情。
    猜你喜欢
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2010-11-30
    • 2021-05-01
    • 1970-01-01
    相关资源
    最近更新 更多