如何使 Tesseract 更快

mli*_*ner 3 c++ python performance tesseract

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

我已经调整了输入图像以在那里获得一些提升,但我需要考虑其他方法。我认为对图像的改进不会让我在这一点上有所作为。

例如:

  • Tesseract 可以用优化标志或类似的东西重新编译吗?
  • 共享 CPU 内存或 GPU 可以付诸行动吗?
  • 我能以某种方式告诉 Tesseract 使用更多内存吗(我有很多)?
  • 有没有其他方法可以使受 CPU 限制的 C++ 程序更快?

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

在此处输入图片说明

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

éta*_*ogy 5

我也有巨大的 OCR 需求,而 Tesseract 太慢了。我最终选择了一个类似于这个自定义前馈网络。不过,您不必自己构建它;您可以使用像Nervana neon这样的高性能库,它恰好易于使用。

那么问题有两个部分:

1) 将字符与非字符分开。
2) 将字符馈送到网络。

假设您按 size 批量输入字符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,它可以是任何东西,从简单的计算机视觉练习到人工智能中的开放研究问题。

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