在python中从web处理图像的最快方法?

时间:2012-02-27 00:47:47

标签: python performance image image-processing python-imaging-library

我正在使用urllib2,cstringIO和PIL。我需要真正调整它并使它非常快(至少是当前速度的一半)

我使用下面的方式访问和加载图像。

imageurl = "http://bit.ly/wOqVTE"

@log_performance
def get_image(imageurl):
    img_file = urllib.urlopen(imageurl)
    data = StringIO(img_file.read())
    im = Image.open(data)
    size = 128, 128
    im.thumbnail(size, Image.ANTIALIAS)
    return im

然后使用:

处理图像
@log_performance
def process_image(image, sample_limit=10000, top=10):
    colors = image.getcolors(sample_limit)
    sc = sorted(colors, key=lambda x: x[0], reverse=True)
    return sc[:top]

获取图像平均需要0.6秒,处理时间约为0.006秒。

如何加快获取和加载过程?

可以在这里找到完整的要点。 https://gist.github.com/1920167

>>>>Function: get_image, Executed:20, Avg Time:0.558275926113
>>>>Function: process_image, Executed:20, Avg Time:0.00609920024872

我会为有一半时间的人增加50美元的赏金。

2 个答案:

答案 0 :(得分:2)

由于它获取的图像占用时间最长,为什么不使用线程(或Gevent)同时获取这些图像,将结果抛出到任务队列中,并在它们准备就绪时进行处理。

为具有相同网址的图片添加缓存...

答案 1 :(得分:0)

由于图像提取取决于网络I / O速度,因此您应该使用异步I / O来提高整体性能。

参考:http://sourceforge.net/projects/asynchttp/