반응형
<질문>
전이 학습에 사용할 데이터 세트의 이미지에서 EXIF 데이터를 제거하려고 합니다. 그러나 작동하지 않는 것 같습니다. 아래는 내 코드입니다.
import os
from PIL import Image
import piexif
import imghdr
from tqdm import tqdm
import warnings
Folder = 'drive/My Drive/PetImages'
labels =['Dog', 'Cat']
for label in labels:
imageFolder = os.path.join(Folder, label)
listImages = os.listdir(imageFolder)
for img in tqdm(listImages):
imgPath = os.path.join(imageFolder,img)
try:
img = Image.open(imgPath)
data = list(img.getdata())
image_without_exif = Image.new(img.mode, img.size)
image_without_exif.putdata(data)
image_without_exif.save(img)
print("done")
except:
print("except")
PIL을 사용하여 이미지 저장을 시도했습니다(이전에 질문한 대로:Python: Remove Exif info from images) 그러나 출력은 순전히 "제외"로 구성됩니다.
아래와 같이 piexif 모듈을 사용하여 다시 시도했습니다.
# Same imports as above
Folder = 'drive/My Drive/PetImages'
labels =['Dog', 'Cat']
for label in labels:
imageFolder = os.path.join(Folder, label)
listImages = os.listdir(imageFolder)
for img in tqdm(listImages):
imgPath = os.path.join(imageFolder,img)
try:
ImageType = img.format
# warnings.filterwarnings("error")
if ImageType in ["JPEG", "TIF", "WAV"]:
exif_data = img._getexif()
print(exif_data)
piexif.remove(img)
print("done")
except:
print("except")
위의 코드에서 먼저 이미지 유형을 확인하여 _getexif() 메서드가 실제로 존재하는지 확인한 다음 exif_data 변수에 저장한 후 데이터를 제거합니다. 출력은 "제외"와 간헐적인 exif 데이터(사전 형식) 또는 존재하지 않는 경우 "없음"으로 구성되지만 "완료"라는 단어는 없습니다. 왜 그 부분에 도달하지 않습니까?
<답변1>
Google을 통해 이것에 걸려 넘어지는 사람에게는 PIL을 사용하는 간단한 솔루션이 있습니다.
from PIL import Image
im = Image.open('some-image.jpg')
# this clears all exif data
im.getexif().clear()
im.save('some-image-without-exif.jpg')
나는 그렇게 생각했다getexif()
이름에서 알 수 있듯이 읽기 액세스만 허용하지만 그렇지 않은 것으로 밝혀졌습니다.
편집: 내 경우에는 파일을 로드하고 저장하는 것만으로도 효과가 있었습니다.im.getexif().clear()
. 하지만 그것이 얼마나 신뢰할 수 있는지는 모르겠습니다. 하지만 이 명령은 확실히 이미지 객체에서 exif 데이터를 제거합니다. 이것은 Python 셸에서 간단하게 테스트할 수 있습니다.
>>> from PIL import Image
>>> im = Image.open('some-image.jpg')
>>> print(im.getexif())
{296: 2, 282: 72.0, 283: 72.0 ..... }
>>> im.getexif().clear()
>>> print(im.getexif())
{}
반응형
'개발 > Python' 카테고리의 다른 글
[파이썬] 리스트 항목을 문자열로 연결(조인)하는 방법 (0) | 2022.12.13 |
---|---|
[파이썬] 사전에서 키를 제거하는 방법 (0) | 2022.12.13 |
[파이썬] 표준 라이브러리에서 docstring trim (PEP 257) (1) | 2022.12.08 |
[파이썬] 문자열의 마지막 3개 문자 제거 (0) | 2022.12.07 |