сохранение изображения Python PIL из облачной лаборатории данных Google в облачное хранилище Google

Я пытаюсь сохранить изображение PIL в облачном хранилище Google из Datalab.

from PIL import Image
out_image = Image.open( StringIO( gs_buck_obj.read_stream() ) )

# run through cloud vision api and do some stuff
....

my_file = StringIO()
out_image.save(my_file , "PNG")
**This is where I am not sure what to do but have tried next line
gs_buck_obj_out.write_stream(my_file.getvalue(), 'text/plain')



Ответы (1)


Этот вопрос о переполнении стека поднимает вопрос о оболочка python open для всех путей gs://. Очень чистое решение заключается в использовании модуля file_io в tensorflow.

Пример:

from tensorflow.python.lib.io.file_io import FileIO

with FileIO('gs://my-bucket/20180101/my-file.txt', 'r') as f:
   print(f.readlines()) # works

with FileIO('gs://my-bucket/20180101/my-file.txt', 'w') as f:
   f.write('I love roti prata.') # works

with FileIO('my-file.txt', 'w') as f:
   f.write('I love palak paneer.') 
   # also works with local files in reading and writing

Как указано в этом post, Cloud Datalab поддерживает tensorflow. И FileIO поддерживает режим 'wb' (запись байта). Таким образом, решение вашей проблемы будет

with FileIO('out_image.png', 'wb') as f:
    out_image.save(f, "PNG")
person syltruong    schedule 24.05.2018
comment
Примечание об этом решении: оно кажется полезным только для гибкой среды App Engine, поскольку tensorflow использует библиотеки C, которые нельзя установить в стандартной среде. Я что-то упускаю? - person hamx0r; 15.08.2018