Sah*_*iya 2 python text-extraction imagemagick ghostscript pdf2image
我正在尝试将多个 pdf(10k +)转换为 jpg 图像并从中提取文本。我目前正在使用pdf2imagepython 库,但它相当慢,有没有比这更快/最快的库?
from pdf2image import convert_from_bytes
images = convert_from_bytes(open(path,"rb").read())
Run Code Online (Sandbox Code Playgroud)
注意:我使用的是 ubantu 18.04
CPU:4 核 8 线程(ryzen 3 3100)
内存:8 GB
pyvips比 pdf2image 快一点。我做了一个小基准:
#!/usr/bin/python3
import sys
from pdf2image import convert_from_bytes
images = convert_from_bytes(open(sys.argv[1], "rb").read())
for i in range(len(images)):
images[i].save(f"page-{i}.jpg")
Run Code Online (Sandbox Code Playgroud)
通过这个测试文档,我看到:
$ /usr/bin/time -f %M:%e ./pdf.py nipguide.pdf
1991624:4.80
Run Code Online (Sandbox Code Playgroud)
2GB 内存和 4.8 秒的运行时间。
你可以在 pyvips 中将其写为:
$ /usr/bin/time -f %M:%e ./pdf.py nipguide.pdf
1991624:4.80
Run Code Online (Sandbox Code Playgroud)
我懂了:
$ /usr/bin/time -f %M:%e ./vpdf.py nipguide.pdf[dpi=200]
676436:2.57
Run Code Online (Sandbox Code Playgroud)
670MB 内存和 2.6 秒运行时间。
它们都在幕后使用 poppler,但 pyvips 直接调用库而不是使用进程和临时文件,并且可以重叠加载和保存。
您可以将 pyvips 配置为使用 pdfium 而不是 poppler,尽管这需要更多工作,因为许多发行版仍未打包 pdfium。对于某些 PDF,pdfium 可能比 poppler 快 3 倍。
您可以使用多重处理来进一步提高速度。这对于 pyvips 来说效果更好,因为内存使用量较低,而且它不使用巨大的临时文件。
如果我修改 pyvips 代码以仅渲染单个页面,我可以使用gnu parallel在单独的进程中渲染每个页面:
$ time parallel ../vpdf.py us-public-health-and-welfare-code.pdf[dpi=150] ::: {1..100}
real 0m1.846s
user 0m38.200s
sys 0m6.371s
Run Code Online (Sandbox Code Playgroud)
150dpi 下的 100 页只需 1.8 秒。
| 归档时间: |
|
| 查看次数: |
5671 次 |
| 最近记录: |