일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Astrous Convolution
- ipykernel
- orientation
- Visual Studio Code
- os path isdir
- os path join
- Convolution
- 파이썬 디렉토리
- Deep Learning
- rotate
- 파이썬
- 이미지 회전
- os path isfile
- exif orientation
- ipynb
- VS Code
- virtualenv
- Semantic segmentation
- comprehension
- 개발환경
- exif
- Python
- os listdir
- deeplab
- os 모듈
- ASPP
- 이미지 반전
- xception
- Jupyter Notebook
- 디렉토리
Archives
- Today
- Total
어쩌다 딥러닝 연구원
exif를 참조하여 반전/회전된 이미지 돌려놓기 본문
필자의 최근 업무는 스마트폰에서 찍어 서버로 전송된 데이터를 똑바로 회전시켜 주어 신경망에 줄 훈련 데이터를 정제하는 것이다.
맨 처음에는 일괄적으로 270도 회전을 시키는 것으로 생각했으나, 책임연구원님께서 Exif라는 포맷에 대해 알려주었는데, 이미지에 저장된 각종 정보들이다. 그 중 orientation이라는 정보가 포함되어 있는데, 아래의 이미지를 보면 이해할 수 있을 것이다.
값에 따라 F라는 글자가
Exif가 무엇인지는 구체적인 정보를 원한다면 아래의 글을 참조해 보도록 하자.
다음은 작성한 코드이다.
rotate함수의 input은 파일의 절대경로이다.
이미지를 읽어들여 exif 메타데이터를 참조하여 orientation 값을 얻어낸 후 값에 따른 조치를 취하는 코드이다.
exif 메타데이터가 존재하지 않거나, orientation 값이 존재하지 않을 수 있다.
필자의 경우는 얼굴 사진들이기 때문에 이러한 경우 어쩔 수 없이 나중에 opencv를 이용한 face align을 찾아서 회전시키는 방식을 적용할 계획이다.
import os
from PIL import Image
from matplotlib import pyplot as plt
import numpy as np
from PIL import ExifTags
import piexif
not_orient=[]
not_exif=[]
def rotate(filename):
img = Image.open(filename)
if "exif" in img.info:
exif_dict = piexif.load(img.info["exif"])
#print(exif_dict)
if piexif.ImageIFD.Orientation in exif_dict["0th"]:
orientation = exif_dict["0th"].pop(piexif.ImageIFD.Orientation)
exif_bytes = piexif.dump(exif_dict)
#print('{} orientation value is {}'.format(filename,str(orientation)))
if orientation == 2:
img = img.transpose(Image.FLIP_LEFT_RIGHT)
elif orientation == 3:
img = img.rotate(180)
elif orientation == 4:
img = img.rotate(180).transpose(Image.FLIP_LEFT_RIGHT)
elif orientation == 5:
img = img.rotate(-90, expand=True).transpose(Image.FLIP_LEFT_RIGHT)
elif orientation == 6:
img = img.rotate(-90, expand=True)
elif orientation == 7:
img = img.rotate(90, expand=True).transpose(Image.FLIP_LEFT_RIGHT)
elif orientation == 8:
img = img.rotate(90, expand=True)
img.save(filename, exif=exif_bytes)
else:
#print('{} doesn\'t have exif orient info.'.format(filename))
not_orient.append(filename)
else:
not_exif.append(filename)
#print('{} doesn\'t have exif info.'.format(filename))
이러한 함수를 관리하는 디렉토리 하의 모든 이미지에 적용시키고 싶을 땐 어떻게 하는게 좋을까?
오늘도 topdown이다.
os 모듈의 활용 방법을 실무 코드로 작성해 놓은 글이니 참고 바란다.
글이 유용했다면, 하트를 눌러주면 감사하겠다.
반쯤 반말체라 기분이 나쁘셨다면 죄송합니다. 아무튼 하트를 눌러주시면 감사하겠습니다.
그럼 제가 기분이 조크등요
'개발' 카테고리의 다른 글
how to solve pytorch inference slow problem on windows 10 (0) | 2021.01.13 |
---|---|
Python OS 모듈 : 실무 코드로 알아보는 활용 예 (0) | 2020.03.07 |
DeepLab V3 이해를 위한 이정표 (0) | 2020.02.28 |
Visual Studio code에서 Jupyter Notebook 사용하기 in Ubuntu (3) | 2020.02.27 |
Comments