Python 如何从s3下载图像作为numpy阵列?

Python 如何从s3下载图像作为numpy阵列?,python,amazon-web-services,amazon-s3,boto,boto3,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(): i

我试图训练一个神经网络,在那里我传递一系列的图像。我想创建一个生成器,将每个图像作为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_数组变量永远不会工作。我能找到的关于从AmazonS3下载图像的所有信息都表明您将该文件下载到了一个文件中。我想将其下载到可以作为数组打开的图像对象。

基于,它似乎只支持传入文件名或URL。所以没有类似文件的对象。所以看起来您有两个选择:保存到临时文件,或者传入。以下是生成预签名url的示例:

import boto3

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

对于S3文件,您是否愿意使用?保存文件并从中读取的成本是否太高?您解决了这个问题吗?显然
skimage.io.imread
不接受长URL。一旦我像@Jordon Phillips那样得到了
url
,我就必须这样做:从urllib.request导入urlopen;使用urlopen(url)作为conn:image=io.imread(conn)