Чтение изображения из Amazon S3 и ошибка PIL требуется байтообразный объект, а не «_io.BufferedReader»

#python-3.x #amazon-web-services #python-imaging-library #amazon-sagemaker

Вопрос:

Я работаю над некоторым распознаванием в AWS Sagemaker, используя Тессеракт Googles, который я развернул в качестве контейнера для обработки Sagemaker. Все это работает очень хорошо, когда я разрешаю AWS сохранять изображения в виде файлов, ОДНАКО я хочу использовать функциональность КАНАЛА. У меня более 8 миллионов изображений в одном ведре, поэтому, очевидно, вариант копирования не очень хорош.

Вот код: ЧТЕНИЕ ИЗ ТРУБЫ

 pipe_list = os.listdir(f"{input['S3Input']['LocalPath']}/")
                print(f"List of Pipes {pipe_list}")
                for pipe in pipe_list:
                    try:
                        print(f"Pipe Name {pipe}")
                        if 'manifest' not in pipe:
                            with open(f"{input['S3Input']['LocalPath']}/{pipe}", 'rb') as pipein:
                                # data = pipein.read()                               
                                convertToText(pipein)
 

Как упоминалось в других сообщениях, я пытаюсь преобразовать в BytesIO() и убедиться, что он находится в первом байте.
d = BytesIO(data).seek(0)

ОШИБКА, при которой ПОДУШКА ВЫХОДИТ ИЗ СТРОЯ

 2021-05-27 12:34:07,557 | INFO | 120 | ocr_processor | convertToText | Guessing Type for <_io.BufferedReader name='/opt/ml/processing/input/inputbucket_1'>
File extension: jpg
File MIME type: image/jpeg
2021-05-27 12:34:07,558 | ERROR | 157 | ocr_processor | convertToText | a bytes-like object is required, not '_io.BufferedReader'
2021-05-27 12:34:07,558 | ERROR | 158 | ocr_processor | convertToText | a bytes-like object is required, not '_io.BufferedReader'
Traceback (most recent call last):
  File "/opt/program/ocr_processor/ocr_processor.py", line 130, in convertToText
    d = BytesIO(data).seek(0)
TypeError: a bytes-like object is required, not '_io.BufferedReader'
 

Кроме того, если я просто отправлю канал двоичных файлов/байтов, я получу исходную ошибку неопознанного изображения.

 exceptionPIL.UnidentifiedImageError[source]
Bases: OSError

Raised in PIL.Image.open() if an image cannot be opened and identified.
 

Как вы можете видеть, библиотека типов файлов pythons может правильно идентифицировать изображение как JPG, но подушку при открытии не так радует.

Комментарии:

1. Хорошо… Обновить… PIL работает, когда я выполняю следующее Image.open(BytesIO(data.read())) , но по какой-то причине, когда я заворачиваю эту штуку в функции…перестает работать.