Не можете прочитать файлы PNG из S3 в Python 3? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть ведро на S3. Я хочу иметь возможность подключиться к нему и читать фотографии / PDF-файлы в память моего компьютера EC2, выполнять распознавание и получать необходимые поля.

Вот что я сделал до сих пор, но, к сожалению, это не работает.

import cv2
import boto3
import matplotlib
import pytesseract
from PIL import Image


boto3.setup_default_session(profile_name='default-mfasession')
s3_client = boto3.client('s3')
s3_resource = boto3.resource('s3')
bucket_name = "my_bucket"
key = "my-files/._Screenshot 2020-04-20 at 14.21.20.png"

bucket = s3_resource.Bucket(bucket_name)
object = bucket.Object(key)
response = object.get()
file_stream = response['Body']
im = Image.open(file_stream)
np.array(im)

Возвращает мне ошибку:

UnidentifiedImageError: невозможно идентифицировать файл изображения <_io.BytesIO объект на 0x7fae33dce110>

Я перепробовал все ответы, связанные с этим вопросом, в SO ничего не помогли. В том числе: matplotlib: ValueError: неверный заголовок PNG и PIL не может идентифицировать файл изображения для объекта io.BytesIO

Посоветуйте, пожалуйста, как его решить?

1 Ответ

1 голос
/ 26 апреля 2020

Это то, что я обычно использую. Может быть, это будет работать и для вас:

def image_from_s3(bucket, key):

    bucket = s3_resource.Bucket(bucket)
    image = bucket.Object(key)
    img_data = image.get().get('Body').read()

    return Image.open(io.BytesIO(img_data))

И в вашем обработчике вы выполняете это:

    img = image_from_s3(image_bucket, image_key)

img должен быть образом Подушки, если он успешно выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...