Python декодирует байтовую строку изображения в np.ndarray с правильными размерами - PullRequest
0 голосов
/ 22 января 2019

Я не уверен, что то, что я хочу сделать, возможно, но я начинаю с изображения в виде строки байтов. Я декодирую так:

image = base64.b64decode(img_str)

Затем я конвертирую в numpy.ndarray так:

image = np.frombuffer(image, dtype=np.float32)

Однако форма image затем заканчивается как (2398,) вместо (h,w,3).

Есть ли какая-либо информация, которая позволила бы мне преобразовать ndarray обратно в исходные размеры изображения?

Редактировать: Может быть, я должен объяснить, что я пытаюсь сделать более четко. У меня есть конечная точка HTTP, которая требует, чтобы я отправил полезную нагрузку, подобную этой, чтобы правильно получить ответ:

import json
import numpy as np
from PIL import Image
img_path = './img.jpg'
image = np.asarray(Image.open(img_path)).astype(np.float32)
image = np.expand_dims(image, axis=0)
image = np.ndarray(image)
data = {'instances': image}
data = json.dumps({k: _ndarray_to_list(v) for k, v in six.iteritems(data)})
request_args = {}
request_args['Body'] = data
request_args['EndpointName'] = 'my-endpoint'
request_args['ContentType'] = 'application/json'
request_args['Accept'] = 'application/json'
response = sagemaker_session.sagemaker_runtime_client.invoke_endpoint(**request_args

Однако я пытаюсь перенести как можно больше этой предварительной обработки в AWS Chalice. В настоящее время я могу отправить JPEG в чашу, как это:

export PIC='img.jpg'
(echo -n '{"data": "'; base64 $PIC; echo '"}') | curl -H "Content-Type: application/json" -d @- $URL

Поэтому мне интересно, получит ли из байтовой строки Chalice, смогу ли я продолжить предварительную обработку, которую мне нужно сделать.

...