1

我正在从事一个涉及 OCR 处理大量 PDF 的项目。每个 PDF 都是普通办公类型文档的图像。每个 PDF 页面都存储一个单独的文件。有什么方法比我目前的方法更快(即计算时间更短)?

对于这种规模的项目,任何小的性能改进都会大大减少计算成本/时间。目前,调用 Tesseract 所需的时间比项目中所有其他处理步骤多 2-3 个数量级。

对于每个文件(page.pdf),我首先将其转换为 Tiff(image.tiff),如下所示。为了清楚起见,我从这个调用中删除了 Python。

ghostscript -o image.tiff -q -r300x300 -sCompression=none -sDEVICE=tiffgray page.pdf

然后我基本上运行以下过程。

def ocr( image ):
    import tesseract, cv2.cv as cv

    # Load Tesseract
    api = tesseract.TessBaseAPI()
    api.Init(".","eng",tesseract.OEM_DEFAULT)
    api.SetPageSegMode(tesseract.PSM_AUTO)

    # Load and OCR the image file 
    cv_image = cv.LoadImage(image, cv.CV_LOAD_IMAGE_GRAYSCALE)
    tesseract.SetCvImage(cv_image, api)

    # Return the text
    return api.GetUTF8Text()

为了清楚起见,我做了一些简化。例如,我实际上并没有为每个文件单独加载 Tesseract。我处理异常等。但是,差异并不重要,因为 99.9% 的使用时间都在 api.GetUTF8Text() 调用中。

有什么想法可以加快速度吗?

4

1 回答 1

0

如果在多核 CPU 上,您最好的选择可能是并行化它。

查看类似http://wiki.python.org/moin/ParallelProcessing的内容以获取更多信息。

于 2013-04-21T22:50:54.437 回答