Python编程:利用ImageMagick转换PDF为图片并识别提取图表

简介: Python编程:利用ImageMagick转换PDF为图片并识别提取图表

思路是这样的:


pdf -> image -> 识别其中的图表 -> 通过PIL截取图片

1

整个过程尝试了很多方式,最终效果不是很完美,还需要继续探索


包括以下开源库


Tabula

前端截图提取表格数据,效果还可以,使用简单

使用步骤:


下载 https://tabula.technology/

启动 Tabula

打开 http://localhost:8080

如果是安装python的第三方模块,使用命令:


pip install tabula-py

1

ImageMagick

可以进行图片格式转换,pdf转图片


1、安装ImageMagick

mac


brew install ImageMagick

1

Linux


yum install ImageMagick  # 安装


yum remove ImageMagick  # 卸载

1

2

3

或者:

官网下载对应平台的压缩包:https://www.imagemagick.org/script/download.php


2、安装ghostscript:

brew install ghostscript


配置ImageMagick环境变量vim ~/.bash_profile


export MAGICK_HOME=/Users/qmp/Applications/ImageMagick-7.0.8

export PATH="$MAGICK_HOME/bin:$PATH"

export DYLD_LIBRARY_PATH="$MAGICK_HOME/lib/"

1

2

3

source ~/.bash_profile


命令行测试


convert -version


convert a.jpg a.png


convert -limit thread 1 names.pdf -background white -alpha remove -colorspace RGB  -colorspace sRGB out.jpg

1

2

3

4

5

提高图片质量


$ convert -density 300 -quality 100 test.pdf 1.png

1

参数解析:


-density 300

图像每英寸面积内的像素点数,数值越高图片质量越高


-quality 100

这个为转换png时的压缩率,100表示不压缩


参数设置:

https://www.imagemagick.org/www/script/convert.php


python库wand

支持ImageMagick接口,只支持6版本,而ImageMagick最新为7版本,Mac上尝试安装不成功

http://docs.wand-py.org/


网络资源

pdf转图片:

http://app.xunjiepdf.com/pdf2jpg

http://pdftoword.55.la/pdf-to-jpg/


百度ai通用图像分析:

https://ai.baidu.com/tech/imagerecognition/general


完整过程

先使用ImageMagick将pdf文件转为png图片格式

import os
pdfname = "names.pdf"
os.makedirs("out", exist_ok=True)
cmd = (
    "source ~/.bash_profile; "
    "convert "
    "-limit thread 1 {} "
    "-background white "
    "-alpha remove "
    "-colorspace RGB  "
    "-colorspace sRGB "
    "out/out.jpg"
).format(pdfname)
result = os.popen(cmd)
print(result.read())


  1. 通过百度AI接口将图片中的主物体识别出来,获取坐标
from aip import AipImageClassify
""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'
filename = "name.png"
client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)
with open(filename, "rb") as f:
    image = f.read()
result = client.objectDetect(image)
print(result)
data = result.get("result")
  1. 通过百度识别出来的坐标,使用PIL将需要的图片截取出来
width = data.get("width")
height = data.get("height")
top = data.get("top")
left = data.get("left")
from PIL import Image
im = Image.open(filename)
box = (left, top, left + width, top + height)
region = im.crop(box)
region.save("cutting.jpg")

参考:

  1. Mac下使用Python进行pdf到image的转换
  2. Python 将pdf转成图片
  3. 利用ImageMagick把pdf批量转换为高质量图片
相关文章
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
275 102
|
2月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
299 104
|
2月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
251 103
|
2月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
191 82
|
1月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
171 3
|
1月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
390 3
|
1月前
|
并行计算 安全 计算机视觉
Python多进程编程:用multiprocessing突破GIL限制
Python中GIL限制多线程性能,尤其在CPU密集型任务中。`multiprocessing`模块通过创建独立进程,绕过GIL,实现真正的并行计算。它支持进程池、队列、管道、共享内存和同步机制,适用于科学计算、图像处理等场景。相比多线程,多进程更适合利用多核优势,虽有较高内存开销,但能显著提升性能。合理使用进程池与通信机制,可最大化效率。
250 3
|
1月前
|
Java 调度 数据库
Python threading模块:多线程编程的实战指南
本文深入讲解Python多线程编程,涵盖threading模块的核心用法:线程创建、生命周期、同步机制(锁、信号量、条件变量)、线程通信(队列)、守护线程与线程池应用。结合实战案例,如多线程下载器,帮助开发者提升程序并发性能,适用于I/O密集型任务处理。
226 0
|
2月前
|
机器学习/深度学习 文字识别 Java
Python实现PDF图片OCR识别:从原理到实战的全流程解析
本文详解2025年Python实现扫描PDF文本提取的四大OCR方案(Tesseract、EasyOCR、PaddleOCR、OCRmyPDF),涵盖环境配置、图像预处理、核心识别与性能优化,结合财务票据、古籍数字化等实战场景,助力高效构建自动化文档处理系统。
663 0
|
2月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的多面手
Python:现代编程的多面手
78 0

推荐镜像

更多
下一篇
oss云网关配置