PIL.Image 包中使用 Image.open(path) 报错。
报错如下,定位到 Image.open(path) 函数中,在依次读入数据集的时候突然报错中止。
1 | IOError: broken data stream when reading image file |
解决方法
在 py 文件开头加上这两句代码,允许 Image 打开受损的图像:
1 | from PIL import Image, ImageFile |
成果解决,不再报错。
分析
我将项目代码和数据集搬运到另一个服务器上跑,就出了这个问题。网上说导致报错的原因可能是:
- import tf 和 import PIL 的顺序有问题
- 图片本身受损
我的框架是 pytorch,因此先搁置第一种可能。
数据集在另一台服务器时没出问题。我将导致程序中止的那张图像删去,重跑程序,发现它又在下一张图像报错退出了。说明应该不是图像受损,而是其他奇怪的原因。
网络上提供这个方法的帖子还是挺多的,但是我一开始并没有去试,因为我的代码中没有调用到 ImageFile 这个库,我以为不是这个原因。加上后,报错消失,所以可能是 Image 默认调用了 ImageFile。