GOOGLE ADS

Mittwoch, 20. April 2022

Wie liest man eine Bilddatei aus dem S3-Bucket direkt in den Speicher?

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

Warum werden SCHED_FIFO-Threads derselben physischen CPU zugewiesen, obwohl CPUs im Leerlauf verfügbar sind?

Lösung des Problems Wenn ich das richtig verstehe, versuchen Sie, SCHED_FIFO mit aktiviertem Hyperthreading ("HT") zu verwenden, ...