如何从数据集中移除EXIF数据?

我在尝试从数据集中的图像中移除EXIF数据(这些数据将用于迁移学习)。然而,这似乎不起作用。以下是我的代码:

我尝试使用PIL保存图像(按照之前提问的方式:Python: 从图像中移除Exif信息),但输出完全是由”except”组成。

我又尝试使用piexif模块,如下所示:

# 与上述相同的导入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变量后移除数据。输出包括”except”和偶尔的exif数据(以字典形式)或”None”(如果不存在),但从未出现过”done”字样。为什么它没有到达那部分呢?


回答:

对于通过Google找到这篇文章的任何人,这里有一个使用PIL的简单解决方案:

from PIL import Imageim = Image.open('some-image.jpg')# 这将清除所有exif数据im.getexif().clear()im.save('some-image-without-exif.jpg')

我原以为getexif()仅允许读取访问,因为名称可能暗示了这一点,但事实证明并非如此。

编辑:在我这里,仅仅加载和保存文件就有效了,不需要im.getexif().clear()。不过,我不知道这种方法有多可靠。那个命令确实从图像对象中移除了exif数据。这可以在Python shell中简单测试:

>>> 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()){}

Related Posts

多维度Top-k评分

例如,在机器学习中的自然语言处理中,通常使用波束搜索来…

R – Caret train() “错误:停止” 与 “在newdata中未找到对象中使用的所有变量名”

我正在尝试为蘑菇数据构建一个简单的朴素贝叶斯分类器。我…

创建训练和测试数据集分割,数据嵌套在多个文件夹中

我正在准备数据以训练一个图像识别模型。目前我有一个文件…

我的神经网络预测出现错误:IndexError: list index out of range

我正在进行一个简单的垃圾邮件/非垃圾邮件文本分类。我的…

python 给出数组是一维的,但索引了两个维度错误

我已经为 miniBatchGradientDesce…

TensorFlow自定义训练步骤使用不同的损失函数

背景 根据TensorFlow文档,可以使用以下方式执…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注