在OCR中滑动窗户需要花费大量时间

时间:2012-11-27 13:17:44

标签: java machine-learning artificial-intelligence neural-network ocr

我正在实施滑动窗口技术来开发照片OCR,即从图片中剪切出特定尺寸的矩形,并检查它是否包含文本。然后矩形再移动一些像素。但是这种滑动窗技术需要花费很多时间。例如,为了处理1366x768的图片,步长为2,窗口大小为20x25,需要6小时。有没有其他技术可以提供帮助或如何加快这一过程?

我在java编码。

2 个答案:

答案 0 :(得分:3)

如果不了解您的算法/代码的任何细节,很难给出具体的建议。您可以考虑以下几项潜在的性能改进:

  1. 最大限度地减少磁盘I / O和缓存未命中。你说过一个矩形是“从图片中剪下来的”。如果每个“cut”是一个单独的从磁盘读取,它的效率非常低,并且会大大有助于执行时间。当您移动窗口时(显示2个像素),新窗口中的大多数数据都是相同的,因此尽量避免重新读取该数据。
  2. 减小窗口大小或增加步长。这显然会影响您的结果,但根据您尝试OCR的字符大小,它可能是一个选项。
  3. 如果您要应用卷积滤波器进行OCR,请考虑通过图像数据的2D FFT进行fast convolution
  4. 多线程您的应用程序,如果它还没有。虽然您的问题不是embarrassingly parallel,但它可能相当容易多线程。

答案 1 :(得分:1)

滑动窗口方法是蛮力的,因此,它们的性质非常慢。也许你应该看看基于显着性的技术,它使用过滤器来优先处理图像的哪些区域。

这是一篇我有点熟悉的论文:B。Draper和A. Lionelle。 “相似变换下的选择性注意评估”,“视觉和图像理解”,100:152-171,2005

最后,您使用的ANN库是什么?确保您的ANN代码正在进行矩阵/向量运算,并且它们尽可能优化!