在循环中使用scipy.misc.imread时出错

时间:2017-11-22 13:39:45

标签: python opencv python-imaging-library scikit-image imread

我的案例类似于this question

在训练深度学习模型和阅读循环内的图像时面对它。

scipy.misc.imread(rawImagePath).astype(numpy.float32)

上面的代码在绝大多数情况下完美运行,但有时我会收到错误:

batch 90, loading batch data...
x path: /path_to_dataset/train/9.png
2017-10-31 20:23:34.531221: W tensorflow/core/kernels/queue_base.cc:294] _0_input_producer: Skipping cancelled enqueue attempt with queue not closed
Traceback (most recent call last):
  File "train.py", line 452, in <module>
    batch_X = load_data(batch_X_paths)
  File "/path_to_my_script/utilities.py", line 85, in load_data
    x = misc.imread(batch_X_paths[i]).astype(np.float32)
TypeError: float() argument must be a string or a number

区别在于:我有一组固定的文件,我不会在目录中写新文件。

我做了一点研究,发现错误不是来自

numpy.astype()

但来自

PIL.Image.open()

scipy.misc 使用 PIL

此外,我设法在 Jupyter Notebook 中重现了这个错误。我在里面用 reading / astype 代码做了一个循环。几秒钟后(我的测试.png大小约为10MB)我中断了单元的执行,瞧!

error reproduced in Jupyter Notebook

scipy.misc 内部,有一个代码如下:

def imread(name, flatten=False, mode=None):
    im = Image.open(name)
    return fromimage(im, flatten=flatten, mode=mode)

图片 这是 PIL 对象。并且 Image.open() 在中断单元格时为我们提供了0维列表。

我已经尝试了Evert的建议并使用 尝试/除 进行了循环,但有时甚至在5次尝试后仍然失败。

此外,我尝试了 OpenCV imread() 方法,而不是 scipy.misc ,有时它也会失败。错误文字:

libpng error: incorrect data check

所以......我的想法用完了。

0 个答案:

没有答案