2016-06-20 4 views
1

Ich versuche ein neurales Netzwerk zu trainieren, in dem ich eine Reihe von Bildern übergebe. Ich möchte einen Generator schaffen, die jedes Bild übergibt als numpy ArrayWie Bilder von s3 als numpy Arrays herunterladen?

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

ich so etwas wie dies wollen:

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 

Aber das image_array Variable wird nie funktionieren. Alles, was ich über das Herunterladen von Bildern von Amazon S3 finden kann, zeigt an, dass Sie die Datei in eine Datei herunterladen. Ich möchte es in ein Bildobjekt herunterladen, das ich als Array öffnen kann.

+0

Möchten Sie mit Hilfe der Tasten [integrierten HTTP bequem Endpunkt] (http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro) für Ihre S3-Dateien? Sind die Kosten für das Speichern und Lesen einer Datei zu hoch? – Jedi

Antwort

1

Basierend auf der docs for imread scheint es, dass es nur die Übergabe eines Dateinamens oder einer URL unterstützt. Also keine dateiähnlichen Objekte. So wie es aussieht haben Sie zwei Möglichkeiten:. In eine temporäre Datei speichern, oder generate a presigned url in passieren Hier ist ein Beispiel der Erzeugung der URL vorge unterzeichnet:

import boto3 

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