我从另一个StackOverflow帖子中改编了这段代码。它将PDF页面转换为图像,并检查颜色的色相/饱和度值。我唯一的问题是它很慢,25页几乎需要一分钟。有谁能告诉我怎样才能让它更有效率吗?
from pdf2image import convert_from_path
import numpy as np
def main():
images = convert_from_path("example1.pdf", 500,poppler_path=r'C:Program Filespoppler-0.68.0bin')
sw=0
color=0
for image in images:
img = np.array(image.convert('HSV'))
hsv_sum = img.sum(0).sum(0)
if hsv_sum[0] == 0 and hsv_sum[1] == 0:
sw += 1
else:
color += 1
print(color)
print(sw)
如果你只是想粗略地检测(可能是大的)颜色区域,使用dpi=500
将会对你的内存产生不必要的大需求。
我会尝试dpi=72
甚至dpi=36
,看看它是否仍然足够准确。
更进一步,如果你想加快速度,那么衡量什么是慢的是很重要的——没有必要加快你处理的某些方面,而这些方面只需要1%的时间。因此,测量将所有PDF页面转换为PIL Image
所需的时间,然后测量分析每个页面的时间,以便您知道在哪里指导您的工作。
如果每个页都需要很长时间来处理,请考虑并行处理这些页。
try use this
import PyPDF2
pdf_file = open('nama_file.pdf', 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
colored_page_count = 0
for page in pdf_reader.pages:
if page.get("/ColorSpace") == "/DeviceRGB":
colored_page_count += 1
print(colored_page_count)
pdf_file.close()
免责声明我是borb
的作者,这个答案中使用的库
根据页面中具体的颜色,您可以使用borb
来完成此操作。
borb
有EventListener
的概念,它在呈现指令时得到通知(当它们从解析器出来时)。
这应该和简单地阅读PDF一样快。
编辑:根据你的评论,我加入了以下例子的链接。
- 按字体颜色过滤文本
- 从PDF中检索所有嵌入图像
这些示例可能看起来很长,但它们是完整的(从某种意义上说,它们将首先创建PDF,然后从中提取内容/信息)