Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用';可能损坏EXIF数据';_Python 3.x_Tensorflow_Python Imaging Library_Keras_Exif - Fatal编程技术网

Python 3.x 如何使用';可能损坏EXIF数据';

Python 3.x 如何使用';可能损坏EXIF数据';,python-3.x,tensorflow,python-imaging-library,keras,exif,Python 3.x,Tensorflow,Python Imaging Library,Keras,Exif,我正在进行图像分类Kaggle竞赛,并从Kaggle.com下载了一些训练图像。然后,我使用ResNet50的迁移学习来处理这些图像,使用keras2.0和Tensorflow作为背景(以及python3) 然而,在总共1281个列车图像中,有258个具有“可能损坏的EXIF数据”,并且在加载到ResNet模型时被忽略,这很可能是由于错误 输出消息如下所示: /home/shi/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.p

我正在进行图像分类Kaggle竞赛,并从Kaggle.com下载了一些训练图像。然后,我使用ResNet50的迁移学习来处理这些图像,使用keras2.0和Tensorflow作为背景(以及python3)

然而,在总共1281个列车图像中,有258个具有“可能损坏的EXIF数据”,并且在加载到ResNet模型时被忽略,这很可能是由于错误

输出消息如下所示:

/home/shi/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: Possibly corrupt EXIF data.  Expecting to read 524288 bytes but only got 0. Skipping tag 3
  "Skipping tag %s" % (size, len(data), tag))
/home/shi/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: Possibly corrupt EXIF data.  Expecting to read 393216 bytes but only got 0. Skipping tag 3
  "Skipping tag %s" % (size, len(data), tag))
/home/shi/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: Possibly corrupt EXIF data.  Expecting to read 33554432 bytes but only got 0. Skipping tag 4
  "Skipping tag %s" % (size, len(data), tag))
/home/shi/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: Possibly corrupt EXIF data.  Expecting to read 25165824 bytes but only got 0. Skipping tag 4
  "Skipping tag %s" % (size, len(data), tag))
/home/shi/anaconda3/lib/python3.6/site-packages/PIL/TiffImagePlugin.py:692: UserWarning: Possibly corrupt EXIF data.  Expecting to read 131072 bytes but only got 0. Skipping tag 3
  "Skipping tag %s" % (size, len(data), tag))
(more to come ...)
根据输出消息,我只知道它们在那里,但不知道它们是哪一个


我的问题是:如何识别这258个图像,以便手动将其从数据集中删除

想到的最简单的方法是修改代码以一次处理一个图像,然后迭代每个图像并检查哪个图像生成警告。

编辑:要将警告作为可以捕获的错误提出,请查看下面的Justas注释


即使这个问题已经有一年多的历史了,我想展示我的解决方案,因为我遇到了同样的问题

我正在编辑错误消息。输出显示在系统上查找文件的位置以及行号。 例如,我更改了以下内容:

if len(data) != size:
    warnings.warn("Possibly corrupt EXIF data.  "
                  "Expecting to read %d bytes but only got %d."
                  " Skipping tag %s" % (size, len(data), tag))
    continue

我捕获ValueError的代码如下所示。该代码的优点是PIL被中断,不会显示无用的消息。您还可以捕获此文件并使用它,例如,通过“除外”部分删除相应的文件

import os
from PIL import Image

imageFolder = /Path/To/Image/Folder
listImages = os.listdir(imageFolder)

for img in listImages:
    imgPath = os.path.join(imageFolder,img)
            
    try:
        img = Image.open(imgPath)
        exif_data = img._getexif()
    except ValueError as err:
        print(err)
        print("Error on image: ", img)

我知道添加ValueError部分既快又脏,但总比面对所有无用的警告消息要好。

可能的重复对PNG文件无效,获取:
AttributeError:'PngImageFile'对象没有属性'\u getexif'
@Serġan,这是因为PNG没有此类信息。看见通常情况下,您应该只在.JPG、.TIF、.WAV格式中找到这些信息。若要捕获像异常一样的UserWarning,您可以改为使用。@谢谢,我没有意识到这种可能性。
import os
from PIL import Image

imageFolder = /Path/To/Image/Folder
listImages = os.listdir(imageFolder)

for img in listImages:
    imgPath = os.path.join(imageFolder,img)
            
    try:
        img = Image.open(imgPath)
        exif_data = img._getexif()
    except ValueError as err:
        print(err)
        print("Error on image: ", img)