在 Numpy Array 中转换 Python 获取请求(jpg 内容)的响应

Posted

技术标签:

【中文标题】在 Numpy Array 中转换 Python 获取请求(jpg 内容)的响应【英文标题】:Converting the response of Python get request(jpg content) in Numpy Array 【发布时间】:2019-03-13 22:19:48 【问题描述】:

我的函数的工作流程如下:

通过 python 获取请求检索 jpg 在磁盘上将图像保存为 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))

有什么办法可以解决这个问题吗?如何在 np.array 中转换我的 response.content?

【问题讨论】:

将其保存为 .png 不会使其成为 PNG 文件... @Benjamin 我知道,但实际上这不是问题。我只是按照我用来下载图像的 API 的说明进行操作;他们使用 png 格式下载,即使他们为我特别需要的图像发送 jpg。 【参考方案1】:

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

【讨论】:

它应该可以工作,但实际上它没有,我也在他们的网页上尝试了这个例子:im = imageio.imread('upload.wikimedia.org/wikipedia/commons/d/de/…) 它显示了一个错误,寻找回溯是相关的有ssl证书;我尝试了两个公式“http”和“https”,错误结果相同。 这个例子对我有用。您可能应该检查您的环境配置和 Internet 连接,看看问题出在哪里。 我发现了这个问题,在 macOS X 上的 Python 3.6+ 中,需要从 Python 安装程序中给出的包中安装 ssl 证书。一旦我这样做了,一切都很好。我只需要在调用中添加这部分即可使其工作: imagearray = im.imread(im.core.urlopen(url).read(), '.jpg') 也许你可以将它添加到你的帖子中,以防万一任何人都需要相同的解决方案。【参考方案2】:

您可以使用BytesIO 作为文件来跳过写入实际文件。

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

现在您拥有BytesIO,因此您可以像使用文件一样使用它:

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

【讨论】:

打开函数出错:OSError: cannot identify image file <_io.bytesio object at> 你有什么想法吗?

以上是关于在 Numpy Array 中转换 Python 获取请求(jpg 内容)的响应的主要内容,如果未能解决你的问题,请参考以下文章

PIL中的Image和numpy中的数组array相互转换

python中PIL.Image,OpenCV,Numpy图像格式相互转换

将 Python 序列转换为 NumPy 数组,填充缺失值

将浮点 numpy 数组转换为字符串数组 Python

Python(15):Numpy之array结构

python 中各类型介绍及相互转换 - list, array, tensor, dict, tuple, DataFrame