PIL IOError: cannot identify image file './temp.jpg'

用pytorch训练神经网络的时候,用PIL保存图片之后立即读出,出现问题。主要是想用PIL包进行图像压缩的图像处理
源码:

            name = './temp.jpg'
            pil.save(name, "JPEG", quality=ratio)
            img = Image.open(name)
            pil = img

报错
IOError: Traceback (most recent call last):
File “/home/chenjun/anaconda2/envs/mypytorch/lib/python2.7/site-packages/torch/utils/data/dataloader.py”, line 106, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
File “/media/chenjun/ed/31_ocr_own/Calligraphy_crnn/mech_demo2/src/dataset.py”, line 115, in getitem
img = self.transform(img)
File “/media/chenjun/ed/31_ocr_own/Calligraphy_crnn/mech_demo2/src/utils.py”, line 323, in call
img = t(img)
File “/media/chenjun/ed/31_ocr_own/Calligraphy_crnn/mech_demo2/src/utils.py”, line 307, in call
img = Image.open(name)
File “/home/chenjun/anaconda2/envs/mypytorch/lib/python2.7/site-packages/PIL/Image.py”, line 2657, in open
% (filename if filename else fp))
IOError: cannot identify image file ‘./002.jpeg’

解决方案:
采用opencv读取的方式读入图片
temp = cv2.imread(name)
pil = Image.fromarray(temp[:,:,::-1])

AttributeError: ‘NoneType’ object has no attribute ‘shape’
发现是图片本身的问题

具体原因:
pytorch的dataloader是多线程的,减少num_worker就好了。

train_loader = torch.utils.data.DataLoader(  # 训练数据集
    train_dataset, batch_size=opt.batchSize,
    shuffle=False, sampler=sampler,
    num_workers=int(opt.workers),
    collate_fn=dataset.OwnalignCollate(imgH=opt.imgH, keep_ratio=opt.keep_ratio))

参考

  1. https://zhidao.baidu.com/question/1862277844188704627.html
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值