본문 바로가기
AI 인사이트

[파이썬] 여러장의 PDF 문서를 이미지로 변환하기 : 이걸로 끝남 (pdf2image)

by AI 동키 2021. 5. 17.
반응형

 

오늘은 여러장으로 된 PDF 문서를

이미지 형태로 변환하는 Python 라이브러리와 코드를 알아보겠습니다.

차근차근 따라해보면 바로 써먹을 수 있을 것입니다.

 

 

작업 환경은 Colab 이며,  

사용할 라이브러리는 pdf2image 입니다.

 

pdf2image는 pdf 파일을 PIL Image 객체로 변환해주는 Wrapper입니다.

즉, 최초 변환된 형태는 PIL 이미지 객체로 PIL 명령어를 통해 추가 활용이 가능하며, 이미지 파일이 아니므로, Numpy형태나 jpg 형태로 사용하려면 후속 작업이 필요합니다.

A python (3.6+) module that wraps pdftoppm and pdftocairo to convert PDF to a PIL Image object

 

자세한 내용은 공식문서를 참고해 보세요.

https://pypi.org/project/pdf2image/

 

pdf2image

A wrapper around the pdftoppm and pdftocairo command line tools to convert PDF to a PIL Image list.

pypi.org

 


1. 필요 라이브러리 설치

먼저 작업에 필요한 라이브러리들을 설치해 줍니다. 

!pip install pdf2image
!apt-get install poppler-utils

 

2. 구글 드라이브 마운트

구글드라이브에 있는 파일을 불러오기 위해 구글 드라이브를 마운트 합니다.
그냥 따로 파일을 업로드해서 사용하고 싶으시면 업로드 버튼을 눌러 진행해도 됩니다.

from google.colab import drive
drive.mount('/content/gdrive')

위의 코드를 실행하면 링크가 생성되는데, 클릭해서 연동할 구글드라이브 계정을 선택한 후 코드를 복붙 하면 아래와 같이 왼쪽 사이드파넬의 폴더에 구글 드라이브 폴더가 연동된 것을 확인할 수 있습니다.

 

 

3. PDF to Image 변환

간단하게 아래의 코드로 PDF 파일을 불러오고, 이를 변환합니다.

pdf_path를 원하는 링크로 변환하면 되겠죠?

from pdf2image import convert_from_path, convert_from_bytes
pdf_path = '/content/gdrive/MyDrive/dev/pnidx/src/Sample_drawings.pdf'
images = convert_from_path(pdf_path)

실행하고 

images의 내용을 확인해 보면 아래와 같이 PIL object로 list형태이며 RGB 모드, 원본 크기대로 변환된 것을 볼 수 있습니다.

 

4. 변환 결과를 이미지로 확인

여기서 이미지를 바로 확인해 보고 싶다면 matplotlib을 사용하면 됩니다. colab 환경에서는 PIL show가 안먹히더라구요

import matplotlib.pyplot as plt

plt.figure(figsize=(16, 10))
plt.imshow(images[1])
plt.show()

 

colab inline에서 이미지를 볼 수 있는 다양한 대안들이 있습니다. 예를 들면 Opencv를 활용하거나, google에서 제공하는 라이브러리를 사용할 수 있죠. 아래 글을 참고해 보시면 됩니다.

Colab, Jupyter notebook에서 PIL 명령어 show로는 이미지가 안열리는 현상 해결

 

[딥러닝 첫걸음] Colab, Jupyter notebook에서 PIL 명령어 show로는 이미지가 안열리는 현상 해결

Colab에서 PIL 명령어로 show로 이미지가 안열리는 현상을 발견했다. 이 이유에 대해 알아보고 해결법을 알아보자. 먼저 PIL은 뭐고, Colab은 뭐냐? PIL (Pillow) PIL 명령어는 이미지를 열고 가공하고 저장

lapina.tistory.com

 

6. 이미지 파일로 저장하기

여기서 변환된 결과물 즉 images 리스트는 파일 형태가 아니죠. 그 말은 이대로 pillow 라이브러리를 통해 활용하거나, 다른 타입으로 변환하여 사용할 수도 있습니다.

하지만 우리는 이미지 파일로 저장을 해볼까요?

첫번째 파일을 이미지로 저장해 봅니다.

images[0].save('page_1.jpg')

이를 반복문으로 사용한다면 모든 파일을 저장할 수 있겠습니다.

 

7. 폴더 내에 모든 파일을 이미지로 저장

이번엔 특정 폴더내에 모든 pdf 파일들을 이미지파일로 변환하여 내가 원하는 폴더에 넣어주는 코드를 짜봅니다.

import os, glob
from pdf2image import convert_from_path

path = "/content/gdrive/MyDrive/dev/pnidx/src"
file = glob.glob(path + '/*.pdf')[0]

if os.access(file, os.F_OK) == True:
  imgs = convert_from_path(file, fmt='jpg', output_folder='temp')
  for image in imgs:
    print(image.filename)

path를 지정해주고, 그 폴더 내에 모든 pdf 형태의 파일을 불러온 후,

그 파일을 pdf2image의 convert_from_path 명령어로 이미지 파일로 저장해 줍니다.

결과 잘 실행 된 것을 볼 수 있습니다.

 


Python을 이용하여 PDF 파일을 이미지 파일로 변환하는 방법을 알아보았습니다.

아주 간단하게 많은 파일들을 이미지 형태로 변환할 수 있게 되었습니다.

 

저는 이를 딥러닝 객체 인식을 위한 이미지 데이터로 활용할 예정인데, 

여러분은 어디에 활용하실 예정인가요?

댓글로 공유 해주세요ㅎㅎ(궁금)

 

감사합니다

반응형

댓글