1. 程式人生 > >Python程式設計:利用ImageMagick轉換PDF為圖片並識別提取圖表

Python程式設計:利用ImageMagick轉換PDF為圖片並識別提取圖表

思路是這樣的:

pdf -> image -> 識別其中的圖表 -> 通過PIL擷取圖片

整個過程嘗試了很多方式,最終效果不是很完美,還需要繼續探索

包括以下開源庫

Tabula

前端截圖提取表格資料,效果還可以,使用簡單
使用步驟:

  1. 下載 https://tabula.technology/
  2. 啟動 Tabula
  3. 開啟 http://localhost:8080

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

pip install tabula-py

ImageMagick

可以進行圖片格式轉換,pdf轉圖片
mac

brew install ImageMagick

Linux

yum install ImageMagick

或者:
官網下載對應平臺的壓縮包:https://www.imagemagick.org/script/download.php

安裝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/"

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

提高圖片質量

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

引數解析:

-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

完整過程

  1. 先使用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批量轉換為高質量圖片