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批量转换为高质量图片
相关文章
|
6天前
|
安全 Python
告别低效编程!Python线程与进程并发技术详解,让你的代码飞起来!
【7月更文挑战第9天】Python并发编程提升效率:**理解并发与并行,线程借助`threading`模块处理IO密集型任务,受限于GIL;进程用`multiprocessing`实现并行,绕过GIL限制。示例展示线程和进程创建及同步。选择合适模型,注意线程安全,利用多核,优化性能,实现高效并发编程。
20 3
|
8天前
|
开发者 Python
Python元类实战:打造你的专属编程魔法,让代码随心所欲变化
【7月更文挑战第7天】Python的元类是编程的变形师,用于创建类的“类”,赋予代码在构建时的变形能力。
30 1
|
6天前
|
数据采集 大数据 数据安全/隐私保护
Python编程:如何有效等待套接字的读取与关闭
Python网络编程中,套接字事件处理至关重要。利用`selectors`模块和代理IP能增强程序的稳定性和可靠性。代码示例展示了如何通过代理连接目标服务器,注册套接字的读写事件并高效处理。在代理IP配置、连接创建、事件循环及回调函数中,实现了数据收发与连接管理,有效应对网络爬虫或聊天应用的需求,同时保护了真实IP。
Python编程:如何有效等待套接字的读取与关闭
|
6天前
|
机器学习/深度学习 数据采集 算法
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
41 19
|
1天前
|
数据挖掘 开发者 Python
如何自学Python编程?
【7月更文挑战第14天】如何自学Python编程?
16 4
|
4天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
【7月更文挑战第11天】在Python编程中,图以邻接表或邻接矩阵表示,前者节省空间,后者利于查询连接。通过字典实现邻接表,二维列表构建邻接矩阵。图的遍历包括深度优先搜索(DFS)和广度优先搜索(BFS)。DFS使用递归,BFS借助队列。这些基础技巧对于解决复杂数据关系问题,如社交网络分析或迷宫求解,至关重要,能提升编程艺术。
13 5
|
6天前
|
机器学习/深度学习 数据采集 监控
Python基于BP神经网络算法实现家用热水器用户行为分析与事件识别
Python基于BP神经网络算法实现家用热水器用户行为分析与事件识别
|
6天前
|
存储 算法 Python
震撼!Python算法设计与分析,分治法、贪心、动态规划...这些经典算法如何改变你的编程世界!
【7月更文挑战第9天】在Python的算法天地,分治、贪心、动态规划三巨头揭示了解题的智慧。分治如归并排序,将大问题拆解为小部分解决;贪心算法以局部最优求全局,如Prim的最小生成树;动态规划通过存储子问题解避免重复计算,如斐波那契数列。掌握这些,将重塑你的编程思维,点亮技术之路。
14 1
|
7天前
|
算法 索引 Python
Python算法设计与分析大揭秘:分治法、贪心算法、动态规划...掌握它们,让你的编程之路更加顺畅!
【7月更文挑战第8天】探索Python中的三大算法:分治(如快速排序)、贪心(活动选择)和动态规划(0-1背包问题)。分治法将问题分解求解再合并;贪心策略逐步求局部最优;动态规划通过记忆子问题解避免重复计算。掌握这些算法,提升编程效率与解决问题能力。
15 1
|
8天前
|
开发者 Python
元类,Python中的隐藏BOSS?掌握它,让你的编程之路畅通无阻
【7月更文挑战第7天】Python的元类是创建类的类,如同编程的“大BOSS”。它们让开发者在类创建时干预过程,添加功能,如自动注册、修改属性。元类通过`__new__`方法动态创建类,如示例中MetaClass得到Meta元类附加的属性。虽然使用需谨慎,以免增加复杂性,但元类提供了超越常规类的强大力量,解锁高级编程技术。
15 2