【问题标题】:PIL and skimage taking too long to load 56000 URL'sPIL 和 skimage 加载 56000 个 URL 的时间太长
【发布时间】:2018-07-16 12:21:00
【问题描述】:

我的数据框data3 有 56000 行,其中一个图像缩略图 URL 作为其列值之一。我正在评估这些图像中的每一个是否都是低对比度的。我让下面的代码运行了 9 个小时!但仍然没有结果,内核仍然很忙。你能告诉我有什么问题吗?

附:我用我的数据框的子集(100 行)尝试了代码,成功运行了 3 秒。当然按照这个标准,56000 行应该需要 30 分钟。临时文件或其他东西是否发生内存溢出? 也许我需要在这里引入一个 try 块来捕获任何异常(即使没有显示错误)?我不知道该怎么做。

from PIL import Image
import urllib.request
import skimage

def f(row):

    URL=row['ThumbnailURL']

    #URL = 'http://www.moma.org/media/W1siZiIsIjU5NDA1Il0sWyJwIiwiY29udmVydCIsIi1yZXNpemUgMzAweDMwMFx1MDAzZSJdXQ.jpg?sha=137b8455b1ec6167'

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

    tutu = Image.open('temp.jpg')

    val=skimage.exposure.is_low_contrast(tutu, fraction_threshold=0.4, lower_percentile=1, upper_percentile=99, method='linear')

    return val

data3['lowcontornot'] = data3.apply(f, axis=1)

【问题讨论】:

  • 56000 行需要分析很多,除了获得更好的 cpu 或在强大的 vps 上运行之外,您无能为力
  • 但是如果 100 行需要 3 秒,56000 行应该需要 30 分钟!!

标签: python-3.x python-imaging-library scikit-image


【解决方案1】:

以下解决方案避免将临时图像保存到磁盘,从而减少开销:

def f(row):
    url = row['ThumbnailURL']
    img = Image.open(BytesIO(requests.get(url).content))
    return is_low_contrast(img, fraction_threshold=0.4, lower_percentile=1, 
                           upper_percentile=99, method='linear')

要尝试此代码,您需要包含以下导入:

import requests
from io import BytesIO
from PIL import Image
from skimage.exposure import is_low_contrast

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2020-09-19
    • 2011-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多