如何从s3下载图像为numpy数组?

时间:2016-06-20 23:34:40

标签: python amazon-web-services amazon-s3 boto boto3

我正在尝试训练一个神经网络,我传递了一系列图像。我想创建一个生成器,将每个图像作为一个numpy数组传递

from skimage import io
image_array = io.imread(url)

我想要这样的事情:

s3 = boto3.resource('s3')
my_bucket = s3.Bucket('some-bucket')
def my_generator():
    for object in my_bucket.objects.all():
        image_array = io.imread(object)    # this will not work. object is of type s3.ObjectSummary(bucket_name='manga-learn-data', key=u'one-piece-colored-5340113_06_05.png') whereas io.imread is expecting a url or uri. 
        yield image_array

但是image_array变量永远不会起作用。我可以找到关于从亚马逊s3下载图像的所有内容,表示您将文件下载到文件中。我想将它下载到一个我可以作为数组打开的图像对象。

1 个答案:

答案 0 :(得分:2)

基于docs for imread,它似乎只支持传递文件名或URL。所以没有类似文件的对象。所以看起来你有两个选择:保存到临时文件,或generate a presigned url传入。这是生成预签名网址的一个例子:

import boto3

s3 = boto3.client('s3')
params = {'Bucket': 'foo', 'Key': 'img.jpg'}
url = s3.generate_presigned_url(ClientMethod='get_object', Params=params)