如何使用keras.preprocessing从Google云存储加载图像

如何使用keras.preprocessing从Google云存储加载图像,keras,google-cloud-storage,google-cloud-ml,Keras,Google Cloud Storage,Google Cloud Ml,我正在编写可以在本地或云中训练的机器学习代码。我正在使用keras.preprocessing加载图像,它在引擎盖下使用PIL。它适用于本地文件,但不理解谷歌云存储路径,如“gs://…”,这是可以理解的 来自keras.preprocessing导入图像 image.load\u img(“gs://myapp some bucket/123.png”) 给出此错误: ../lib/python2.7/site packages/keras/preprocessing/image.py”,第3

我正在编写可以在本地或云中训练的机器学习代码。我正在使用keras.preprocessing加载图像,它在引擎盖下使用PIL。它适用于本地文件,但不理解谷歌云存储路径,如“gs://…”,这是可以理解的

来自keras.preprocessing导入图像
image.load\u img(“gs://myapp some bucket/123.png”)

给出此错误:

../lib/python2.7/site packages/keras/preprocessing/image.py”,第320行,在load\u img img=pil\u image.open(path)文件中
…/lib/python2.7/site packages/PIL/Image.py”,第2530行,在open fp=builtins.open(filename,“rb”)IOError:[Errno 2]没有这样的文件或目录:“gs://myapp some bucket/123.png”


正确的做法是什么?我最终需要一个图像文件夹作为单个numpy阵列(图像解码和灰度)。

找到了理解GCS的keras.preprocessing.image.load\u img的替代品。我还包含了更多的代码来读取整个文件夹,并将文件夹中的每个图像转换为单个numpy数组进行训练

import os
import tensorflow as tf
from tensorflow.python.platform import gfile
filelist = gfile.ListDirectory("gs://myapp-some-bucket")
sess = tf.Session()
with sess.as_default():
   x = np.array([np.array(tf.image.decode_png(tf.read_file(os.path.join(train_files_dir, filename))).eval()) for filename in filelist])
加载图像:

image_path = 'gs://xxxxxxx.jpg'
image = tf.read_file(image_path)
image = tf.image.decode_jpeg(image)
image_array = sess.run(image)
保存图像:

job_dir = 'gs://xxxxxxxx'
image = tf.image.encode_jpeg(image_array)
file_name = 'xxx.jpg'
write_op = tf.write_file(os.path.join(job_dir, file_name), image)
sess.run(write_op)

我不熟悉凯拉斯。它可能不支持直接地面军事系统访问。如果数据集不大,可以先使用预安装的gsutil cli将数据集复制到VM。在python中,您可以调用os.system('gsutil cp YOUR_GCS_FILE'),谢谢您的回答。但是由于某种原因,“gfile.ListDirectory”找不到我的目录。我返回一个找不到目录的错误。