将PDF转换为图像的省时方法

问题描述

上下文:

我有正在处理的 PDF 文件。 我正在使用 ocr 从这些文档中提取文本,为了能够做到这一点,我必须将我的 pdf 文件转换为图像。 我目前使用 convert_from_path 模块的 pdf2image 函数,但时间效率非常低(9 页 pdf 需要 9 分钟)。

问题:

我正在寻找一种方法来加速此过程或另一种将我的 PDF 文件转换为图像的方法

附加信息:

我知道函数中有一个 thread_count 参数,但经过多次尝试后,它似乎没有任何区别。

这是我正在使用的整个函数

def pdftoimg(fic,output_folder):
# Store all the pages of the PDF in a variable 
pages = convert_from_path(fic,dpi=500,output_folder=output_folder,thread_count=9,poppler_path=r'C:\Users\vincent\Documents\PDF\poppler-21.02.0\Library\bin') 

image_counter = 0

# Iterate through all the pages stored above 
for page in pages: 
    filename = "page_"+str(image_counter)+".jpg"
    page.save(output_folder+filename,'JPEG') 
    image_counter = image_counter + 1
    
for i in os.listdir(output_folder):
    if i.endswith('.ppm'):
        os.remove(output_folder+i)

Link 到 convert_from_path 引用。

解决方法

我使用另一个名为 fitz 的模块找到了该问题的答案,该模块是对 MuPDF 的 Python 绑定。

首先安装 PyMuPDF:

文档可以在 here 中找到,但对于 Windows 用户来说相当简单:

pip install PyMuPDF

然后导入 fitz 模块:

import fitz
print(fitz.__doc__)

>>>PyMuPDF 1.18.13: Python bindings for the MuPDF 1.18.0 library.
>>>Version date: 2021-05-05 06:32:22.
>>>Built for Python 3.7 on win32 (64-bit).

打开您的文件并将每个页面保存为图像:

get_pixmap() 方法接受允许您控制图像(变化、分辨率、颜色...)的不同参数,因此我建议您将文档 here 标记为红色。

def convert_pdf_to_image(fic):
    #open your file
    doc = fitz.open(fic)
    #iterate through the pages of the document and create a RGB image of the page
    for page in doc:
        pix = page.get_pixmap()
        pix.save("page-%i.png" % page.number)

希望这对其他人有帮助。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...