Преобразование ответа Python get request (jpg content) в Numpy Array - PullRequest
3 голосов
/ 14 марта 2019

Рабочий процесс моей функции следующий:

  • получить JPG через Python запрос на получение
  • сохранить изображение в формате png (даже если оно загружено в формате jpg) на диск
  • использовать imageio для чтения с образа диска и преобразования его в массив numpy
  • работа с массивом

Это то, что я делаю, чтобы сохранить:

response = requests.get(urlstring, params=params)
      if response.status_code == 200:
            with open('PATH%d.png' % imagenumber, 'wb') as output:
                output.write(response.content)

Это то, что я делаю, чтобы загрузить и преобразовать png в np.array

imagearray = im.imread('PATH%d.png' % imagenumber)

Поскольку мне не нужно постоянно сохранять то, что я загружаю, я попытался изменить свою функцию, чтобы напрямую преобразовать response.content в массив Numpy. К сожалению, каждая подобная imageio библиотека работает одинаково, считывая uri с диска и преобразуя его в массив np.array.

Я попробовал это, но, очевидно, это не сработало, поскольку для ввода требуется URI

response = requests.get(urlstring, params=params)
imagearray = im.imread(response.content))

Есть ли способ преодолеть эту проблему? Как я могу преобразовать свой response.content в массив np.array?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

imageio.imread может читать по URL:

import imageio

url = "https://example_url.com/image.jpg"

# image is going to be type <class 'imageio.core.util.Image'>
# that's just an extension of np.ndarray with a meta attribute

image = imageio.imread(url)

Более подробную информацию вы можете найти в документации, у них также есть примеры: https://imageio.readthedocs.io/en/stable/examples.html

0 голосов
/ 14 марта 2019

Вы можете использовать BytesIO как файл, чтобы пропустить запись в реальный файл.

bites = BytesIO(base64.b64decode(response.content))

Теперь у вас есть как BytesIO, так что вы можете использовать его как файл:

img = Image.open(bites)
img_np = np.array(im)
...