отправить изображение (в виде массива numpy) - PullRequest
0 голосов
/ 20 октября 2018

Я немного озадачен очень простой вещью: я использую онлайн-сервис для обработки изображений и для отправки своего изображения я использую

var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)

, где image_data должен быть закодирован как двоичный файлстрока.Например, следующий пример работает правильно:

image_data = open(image_path, "rb").read()
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)

Однако в некоторых случаях мне нужно отправить изображение, когда оно уже открыто и находится в формате numpy.array.

Как мне преобразовать свое изображение, чтобы можно было отправлять запросы?

1 Ответ

0 голосов
/ 22 октября 2018

Указано по предоставленной ссылке «Поддерживаемые форматы входного изображения включают JPEG, PNG, GIF (первый кадр), BMP».Таким образом, ваши данные должны быть в одном из этих форматов.Numpy массив не подходит.Его необходимо преобразовать, например, в изображение PNG.

Это проще всего сделать с помощью функции matplotlib.pyplot.imsave().Однако результат должен быть сохранен в буфере памяти (для отправки в API), а не в файл.Способ справиться с этим в Python - использовать объект io.BytesIO().

Взятые вместе, решение проблемы:

import io
import numpy as np
import matplotlib.pyplot as plt

buf = io.BytesIO()
plt.imsave(buf, image_np, format='png')
image_data = buf.getvalue()
var_0 = requests.post(api_url, params=params, headers=headers, data=image_data)

, где image_np - это изображение в виде numpy массив.

Обратите также внимание, что строка image_data = buf.getvalue() не обязательна.Вместо этого содержимое буфера может использоваться непосредственно в вызове API.

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