如何使用Python检查非常大的数据集中的重复图片?

时间:2018-08-09 16:33:35

标签: python algorithm opencv

我有一个包含百万个级别的图像的数据集,我想做的事情是像Counter(<list of images>)这样检查重复项并为整个数据集计数。但是,考虑到图像的大小,将所有内容加载到内存中似乎是不可行的。因此,有没有办法做这样的事情?我需要编写自己的哈希函数并反转字典吗?

sha1编辑:

我做了类似

image = Image.open("x.jpg") # PIL library
hashlib.sha1(image)

并出现类似

的错误
TypeError: object supporting the buffer API required

我现在该怎么办?

1 个答案:

答案 0 :(得分:1)

根据建议,您可以使用任何哈希函数,并使用它来将图像文件摘要为二进制文件。然后将摘要保存在字典中,并用它来计算重复项(或根据需要存储更多信息)。

从最基本的角度来说,对于每张图片,您都会执行以下操作:

import hashlib
filename = "x.jpg"
hashstr = hashlib.sha1(open(filename).read()).hexdigest()

这将在hashstr中返回一个十六进制字符串,例如5fe54dee8f71c9f13579f44c01aef491e9d6e655

如前所述,这仅在复制是在文件级别(逐字节)的情况下才有效。如果要去除相同的图像(例如,使用不同的分辨率或不同的尺寸),hashlib函数将无济于事,您需要寻找不同的方法来确定平等