如何为机器学习加载更快的图像

时间:2018-02-25 11:06:38

标签: python url keras jupyter-notebook

我有大约50k图像的数据集,我必须从URL获取这些图像,将它们转换为数组并在我的机器学习算法中使用它们。

这是我获取图片的代码。

        import requests
        from io import BytesIO
        from PIL import Image,ImageFile
        import validators
        import urllib, cStringIO,urllib2

  def get_pixel(img_path):
    ImageFile.LOAD_TRUNCATED_IMAGES = True
    if(validators.url(img_path)==True):
       img = Image.open(urllib2.urlopen(img_path))
       img= img.resize((64,64))
       x = image.img_to_array(img)
       x = preprocess_input(x)
       return x

最后调用此代码来获取我的训练集

X = Data['Link_to_the_image'].apply(lambda x:get_pixel(x))

但这种方法太慢了,已经超过1小时了,但还没有完成。有人可以建议我采取有效而有效的方式来做同样的事情。

1 个答案:

答案 0 :(得分:0)

由于您按顺序执行每个请求,因此需要很长时间。使用一些并发/并行性来加速这个过程可能会更好。

我建议开始使用异步请求(参见link to docs):

# login.py
import requests

session = requests.SESSION()
python3 login.py

为此,你必须稍微破坏你的功能(或者按块处理数据帧),这样你就可以一次解析多个图像(或者至少是请求部分,这似乎是最慢的。

如果您需要更多指导,请与我们联系。