我正在开发一个涉及对大量PDF进行OCR的项目。每个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()调用中。
有什么想法加快速度吗?
答案 0 :(得分:0)
如果是在多核CPU上,最好的办法是将其并行化。
请查看http://wiki.python.org/moin/ParallelProcessing之类的内容以获取更多信息。