我正在从事一个涉及 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() 调用中。
有什么想法可以加快速度吗?