如何使Tesseract更快

时间:2016-09-02 21:11:20

标签: python c++ performance tesseract

这是一个很长的镜头,但我不得不问。我需要任何可能使Tesseract OCR引擎更快的想法。我正在处理包含大约20M页面文本的2M PDF文件,我需要尽可能地获得所有性能。目前的估计是,如果我什么都不做,这将需要大约一年的时间。

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

例如:

  • 可以使用优化标记或类似的东西重新编译Tesseract吗?
  • 可以共享CPU内存或GPU吗?
  • 我可以告诉Tesseract使用更多内存(我有很多内容)吗?
  • 还有其他方法可以让CPU绑定的C ++程序更快吗?

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

enter image description here

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

1 个答案:

答案 0 :(得分:4)

我也有巨大的OCR需求,Tesseract非常慢。我最终选择了custom feedforward net similar to this one。但是,你不必自己建造它;你可以使用像Nervana neon这样的高性能库,它很容易使用。

然后问题的两个部分是:

1)将字符与非字符分开。
2)将字符输入网络。

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

AB)点C

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

对我来说,这比Tesseract快几个数量级。只需测试一下您的计算机可以快速完成这些矩阵产品(元素是浮点数)。

矩阵产品是非关联的,因为在第一个产品之后你必须应用一个叫做ReLU的(廉价)函数。

我花了几个月的时间让整个辣酱玉米饼馅从头开始工作,但OCR是我项目的主要部分。

此外,细分字符并非易事。根据您的PDF,它可以是从计算机视觉中的简单练习到人工智能中的开放式研究问题。

我并没有声称这是最简单或最有效的方法......这就是我所做的!