如何让Tesseract更快

5
这可能有点难度,但我还是要问一下。我需要任何可能使Tesseract OCR引擎更快的想法。我正在处理200万个PDF文件,包含约2000万页文本,并且需要尽可能地提高性能。如果什么都不做,目前的估计是需要一年时间才能完成。
我已经调整了输入图像,以获得一些增强效果,但我需要考虑其他方法。我认为在这一点上改进图像并不能让我有所突破。
例如:
  • 是否可以使用优化标志或类似的方式重新编译Tesseract?
  • 是否可以利用共享CPU内存或GPU?
  • 我是否可以告诉Tesseract使用更多内存(我有很多)?
  • 还有其他方法可以使基于CPU的C ++程序更快吗?
目前,Tesseract由我们的任务运行器Celery运行,它使用多处理来完成工作。这样,我可以让服务器看起来像这样:

enter image description here

我显然不知道自己在说什么,因为我是一名Python开发人员,而Tesseract是用C++编写的,但如果有任何方法可以提高性能,我很乐意听取建议。

1个回答

6
我有大量OCR需求,但Tesseract运行速度太慢了。最终我选择了类似于这个的自定义前馈神经网络。不过你不必亲自构建,可以使用高性能库,如Nervana neon,而且很容易使用。
然后问题分为两部分:
1)将字符与非字符分离。
2)将字符输入神经网络中。
假设你以大小为1000的批次输入字符,将每个字符调整为尺寸为8 x 8(64像素),并希望识别26个字母(小写和大写)以及10个数字和10个特殊字符(共72个字符)。那么解析所有1000个字符最终变成两个(非关联的!)矩阵乘积:
(A点乘B)点乘C
其中A是一个1000 x 64矩阵,B是一个64 x 256矩阵,C是一个256 x 72矩阵。
对于我来说,这比Tesseract快了几个数量级。只需基准测试计算机可以完成这些矩阵乘积的速度(元素为浮点数)。
这些矩阵乘积是非关联的,因为在第一个乘积之后,必须应用一种称为ReLU的(便宜的)函数。
从零开始使整个OCR工作需要我几个月时间,但OCR是我的项目的重要部分。
此外,字符分割并不容易。根据你的PDF文件,它可能是计算机视觉中的简单练习,也可能是人工智能中的开放性研究问题。
我并不声称这是最简单或最有效的方法...这只是我所做的!

1
谢谢回复。听起来你有一个非常令人印象深刻的设置。不幸的是,我们没有资源去做类似的事情。 - mlissner

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