首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python从位于url的图像中计算phash。

Python从位于url的图像中计算phash。
EN

Stack Overflow用户
提问于 2021-01-20 21:55:56
回答 1查看 930关注 0票数 0

我想从大约10.000.000张图片中计算出phash,其中我只有位于.的url。

我知道如何下载一张图片,然后再计算相位差,但我总是必须首先保护图片。

是否可以不保存就下载图片并计算相图,或者甚至不可能完全不下载图片,只使用url?计算相图。

这是我下载前十张图片并计算phash的代码:

代码语言:javascript
复制
folder, pic_savefolder = 'data', 'data/pictures'
file = 'external-asset-url-clean.csv'
path = os.path.join(folder,file)
df = pd.read_csv(path, header=None, names=["URL"])
counter = 0
hashes = set()
headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36"}

for image_url in df['URL']:
    filename = image_url.split('/')[-1]
    try:
        r = requests.get(image_url, allow_redirects=False,verify=False, headers=headers)
        pathlong = os.path.join(pic_savefolder, filename)
        with open(pathlong,"wb") as f:
            f.write(r.content)
            hash = imagehash.phash(Image.open(pathlong))
            hashes.add((hash))
        counter += 1
        if counter > 10:
            break
except Exception as e:
    print(e)
    print("\n")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-21 04:04:43

如果使用.raw属性而不是.content属性,则可以直接传递内容,而不是写入文件。

下面是代码中的内容:

代码语言:javascript
复制
image_data = Image.open(requests.get(image_url, stream=True).raw)
hash = imagehash.phash(image_data)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65818260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档