Ich habe folgenden Code
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
import numpy as np
import boto3
s3 = boto3.resource('s3', region_name='us-east-2')
bucket = s3.Bucket('sentinel-s2-l1c')
object = bucket.Object('tiles/10/S/DG/2015/12/7/0/B01.jp2')
object.download_file('B01.jp2')
img=mpimg.imread('B01.jp2')
imgplot = plt.imshow(img)
plt.show(imgplot)
und es funktioniert. Aber das Problem, es lädt die Datei zuerst in das aktuelle Verzeichnis herunter. Ist es möglich, Dateien zu lesen und direkt im RAM als Bild zu dekodieren?
Lösung des Problems
Ich sehe hier viele gute Antworten. Hier ist mein Code-Snippet mit AWS Config, wenn Sie die Lösung schnell testen. Bitte beachten Sie, dass es nicht empfohlen wird, Ihre AWS-Anmeldeinformationen in den Codetext einzufügen, sondern aus der.env-Datei oder aus dem AWS Keystore stammen sollten.
import os
import boto3
from PIL import Image
import io
AWS_ACCESS_KEY_ID = 'your-aws-access-key'
AWS_SECRET_ACCESS_KEY = 'your-aws-secret'
s3 = boto3.resource('s3',
aws_access_key_id=AWS_ACCESS_KEY_ID,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY)
def image_from_s3(bucket, key):
bucket = s3.Bucket(bucket)
image = bucket.Object(key)
img_data = image.get().get('Body').read()
return Image.open(io.BytesIO(img_data))
# call the function
image_from_s3("your-aws-bucket-name", "file-path")
# example
image_from_s3("my-images", "profile/2022/123.png")
Keine Kommentare:
Kommentar veröffentlichen