행궁동 데이터 엔지니어

반응형

사진 파일을 열어보면 아래와 같이 사진의 세부정보를 설명하는 데이터를 볼 수 있습니다.

  • 밑의 정보처럼 다른 데이터를 설명하기 위해 만들어진 데이터를 메타데이터(Metadata)라고 이야기합니다.

이번 포스팅은 사진 파일에서 Python을 이용해 메타데이터를 추출하는 방법에 대해 다루려고 합니다.

 

이미지 정보 1
이미지 정보 2
이미지 정보 3

 


개요

사진에서 위치정보, 노출시간, 조리개 정보, 촬영시각 등 메타정보(메타데이터)를 추출하기 위해 Python의 PIL(Python Image Library)을 활용합니다.

 

메타데이터의 추출은 디지털카메라, 휴대폰 카메라의 사진들이 EXIF(Exchangeable Image File Format) 메타데이터 포맷에 맞춰 정보들을 담고 있기에 가능합니다.

  • EXIF 메타데이터 포맷은 표준은 아니지만 오늘날 대부분의 카메라들이 사진 촬영 시 EXIF 포맷으로 정보를 저장하기에 사실상 표준으로 봐도 무방합니다.

EXIF 메타데이터는 다음과 같은 정보(출처: 나무 위키)를 포함합니다.

  • 날짜와 시간 정보
  • 카메라 정보(카메라 제조사, 모델명), 스마트폰이라면 스마트폰 제조사, 모델명
  • 카메라 설정 정보(초점 거리, 플래시 여부, ISO 감도, 조리개, 셔터 속도, 회전 방향, 색 공간 등)
  • 위치 정보 (고도, 위도, 경도)
  • 이외 EXIF 메타데이터가 담고 있는 정보 참고자료 : https://exiftool.org/TagNames/EXIF.html

 

추출 방법

1. Python image library 설치

pip install image

 

2. 이미지 불러오기

import PIL.Image
from pprint import pprint

# 이미지 불러오기 (YourPath 부분 수정 해주세요)
img = PIL.Image.open("YourPath/능소화.jpeg")

# 메타데이터 불러오기
meta_data = img._getexif()
# 정보 출력
pprint(meta_data)

출력 예시

뭔가 복잡한 메타 정보들

3. 필요한 메타데이터 추출하기

  • 저는 촬영기기의 제조사, 모델명 그리고 촬영 시각, GPS 정보를 추출해 봤습니다. (이미지에서 좌표 정보 추출, 고도 정보 추출하는 것이 주목적이었습니다)
- 271: 제조사
- 272: 모델명
- 36868: 촬영 시각
- 36881: 촬영 시각 offset 정보
- 34853: 좌표 정보 2: 경도, 4: 위도, 6: 고도
 

EXIF Tags

Tag IDTag Name WritableGroupValues / Notes 0x0001 InteropIndex string! InteropIFD 'R03' = R03 - DCF option file (Adobe RGB) 'R98' = R98 - DCF basic file (sRGB) 'THM' = THM - DCF thumbnail file 0x0002 InteropVersion undef!: InteropIFD   0x000b ProcessingS

exiftool.org

 

  • 위의 링크에 들어가시면 코드들이 16진수로 나와 있기에 Python의 int함수를 이용해 10진수로 변환하시면 확인하기 편합니다.
  • int("16진수 코드값", 16)

EXIP GPSinfo의 16진수 코드는 0x8825
0x8825를 10진수로 변환하기

  • 최종적으로 위에서 언급한 5개 정보를 이미지에서 추출한 결과는 아래와 같습니다.
# 메타데이터 정보 저장
company = meta_data[271]
model = meta_data[272]
timestamp = meta_data[36868]
timestamp_offset = meta_data[36881]
gps_info = meta_data[34853]

# 메타데이터 정보 출력
print(company)
print(model)
print(timestamp)
print(timestamp_offset)
print(gps_info)

메타데이터 추출 결과

 

 

이미지 정보 추출시 예제로 활용하시라고 메타데이터를 담고있는 사진 1장도 함께 첨부합니다.

능소화.jpeg
3.55MB

 

기타  궁금하신 사항은 편하게 댓글 남겨주세요.

 

감사합니다.

 

전체코드 (이미지 경로는 수정해주세요)

 

 

참고자료

1. https://rudalson.tistory.com/entry/python%EC%9C%BC%EB%A1%9C-image-%EC%B2%98%EB%A6%AC%EB%A5%BC-%EC%9C%84%ED%95%9C-exif-%EC%A0%95%EB%B3%B4-%EB%8B%A4%EB%A3%A8%EA%B8%B0
2. https://namu.wiki/w/EXIF 
3. https://pillow.readthedocs.io/en/stable/index.html

 

반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band