OSError image file is truncated (XX bytes not processed) 报错解决指南

OSError: image file is truncated (XX bytes not processed) 报错解决指南

一、前言

我在训练深度神经网络时遇到了如下报错

  ······此处省略一万字
  File "/root/anaconda3/envs/FEHR/lib/python3.9/site-packages/PIL/Image.py", line 995, in convert
    self.load()
  File "/root/anaconda3/envs/FEHR/lib/python3.9/site-packages/PIL/ImageFile.py", line 290, in load
    raise OSError(msg)
OSError: image file is truncated (61 bytes not processed)

关于这个报错,我在网络上找到了解决方案。首先我要感谢他们的无私奉献,为我的科研工作节省了不少时间。美中不足的是大部分文章都是知其然而不知其所以然,写了两行代码草草了事。

这是非常不严谨的,对于很多小白来说,直接会懵掉:代码啥意思?该写在哪里?

下面我来尝试解决这些问题,希望对大家有帮助。

二、可能的原因

这个错误其含义是:由于图像文件在读取过程中被截断,以下是一些可能的原因:

  1. 文件读取不完整:文件是不完整的,读取过程中可能会出现问题,导致文件未完全加载。
  2. PIL库的限制PIL(Python Imaging Library)有一个默认的最大块大小(MAXBLOCK),如果图像文件超过这个大小,可能会导致截断错误。
  3. 文件传输或存储问题:在文件传输或存储过程中,可能会出现数据损坏或丢失,导致读取时出现错误。

当然,一般遇到这个问题是由于第2个原因。不过我还是提供 原因1原因2 为根源的问题解决方案,但第2个优先(出现频率高);如果问题由第3个原因引起,还请读者自查。

三、解决方法

3.1 PIL库限制 解决方案

我们需要设置 ImageFile.LOAD_TRUNCATED_IMAGES = True 来允许PIL忽略截断错误并继续加载图像。

那我代码开头添加以下两行:

from PIL import ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True

完犊子了,加在哪?为了回答这个问题,我把我控制台的反馈再写完整一点:

OSError: Caught OSError in DataLoader worker process 0.
Original Traceback (most recent call last):
  File "/root/anaconda3/envs/FEHR/lib/python3.9/site-packages/torch/utils/data/_utils/worker.py", line 287, in _worker_loop
    data = fetcher.fetch(index)
  File "/root/anaconda3/envs/FEHR/lib/python3.9/site-packages/torch/utils/data/_utils/fetch.py", line 32, in fetch
    data.append(next(self.dataset_iter))
  File "/liushuai2/PCP/FeatEnHancer-main/detectron2/detectron2/data/common.py", line 296, in __iter__
    yield self.dataset[idx]
  File "/liushuai2/PCP/FeatEnHancer-main/detectron2/detectron2/data/common.py", line 125, in __getitem__
    data = self._map_func(self._dataset[cur_idx])
  File "/liushuai2/PCP/FeatEnHancer-main/detectron2/detectron2/utils/serialize.py", line 26, in __call__
    return self._obj(*args, **kwargs)
  File "/liushuai2/PCP/FeatEnHancer-main/Featurized-QueryRCNN/queryrcnn/dataset_mapper.py", line 82, in __call__
    image = utils.read_image(dataset_dict["file_name"], format=self.img_format)
  File "/liushuai2/PCP/FeatEnHancer-main/detectron2/detectron2/data/detection_utils.py", line 187, in read_image
    return convert_PIL_to_numpy(image, format)
  File "/liushuai2/PCP/FeatEnHancer-main/detectron2/detectron2/data/detection_utils.py
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值