我有大约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小时了,但还没有完成。有人可以建议我采取有效而有效的方式来做同样的事情。
答案 0 :(得分:0)
由于您按顺序执行每个请求,因此需要很长时间。使用一些并发/并行性来加速这个过程可能会更好。
我建议开始使用异步请求(参见link to docs):
# login.py
import requests
session = requests.SESSION()
python3 login.py
为此,你必须稍微破坏你的功能(或者按块处理数据帧),这样你就可以一次解析多个图像(或者至少是请求部分,这似乎是最慢的。
如果您需要更多指导,请与我们联系。