gpt4 book ai didi

python - 从 url 读取图像的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:50 25 4
gpt4 key购买 nike

我想制作一个生成器,从 url 生成批量图像以训练 keras 模型。我有另一个生成器可以为我提供图像 url。

我目前所做的是将图像下载到磁盘,然后从磁盘加载图像。

def loadImage(URL):
with urllib.request.urlopen(URL) as url:
with open('temp.jpg', 'wb') as f:
f.write(url.read())

img_path = 'temp.jpg'
img = image.load_img(img_path, target_size=(125, 125))
os.remove(img_path)
x = image.img_to_array(img)
return x

def imageGenerator(batch_size):
i = 0
batch = []
for URL in imageUrlGenerator():
if i>batch_size:
yield batch
batch = []
i=0
batch.append(loadImage(URL))
i+=1

这行得通,但我想知道是否有更快的方式从网络加载图像而无需在磁盘中写入和读取。

最佳答案

假设您实际上正在使用 keras 并且这个 image.load_img是你调用的方法,它会是call a function最终应该是 PIL.Image.open .在 PIL.image.open 的文档中,第一个参数 fp 可以是一个字符串文件名(这是您当前传递的内容),或者是一个类似流的对象实现了readseektell。虽然 urllib.request.urlopen 返回的对象确实提供了所有三种方法,但它根本没有实现 seek,因此不能直接使用。然而,整个缓冲区可以读入一个BytesIO 对象,它确实实现了seek,所以它应该是可用的。将它们放在一起,您的 loadImage 函数可能会简化为如下所示:

from io import BytesIO

def loadImage(URL):
with urllib.request.urlopen(URL) as url:
img = image.load_img(BytesIO(url.read()), target_size=(125, 125))

return image.img_to_array(img)

这会使下载的图像完全保存在内存中。

关于python - 从 url 读取图像的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com