我有一个包含百万级图像的数据集,我想做的是做类似 Counter(<list of images>)
的事情。检查重复项并计算整个数据集。但是,考虑到图像的大小,将全部加载到内存中似乎是不可行的。因此,有没有办法做这样的事情?我需要自己写哈希函数和反向字典吗?
为 sha1
编辑:
我做了类似的事情
image = Image.open("x.jpg") # PIL library
hashlib.sha1(image)
出现类似
的错误TypeError: object supporting the buffer API required
我现在该怎么办?
最佳答案
按照建议,您可以使用任何散列函数,并使用它来将图像文件摘要为二进制文件。然后将摘要保存在字典中并使用它来计算重复项(或者如果您愿意,可以存储更多信息)。
在最基本的情况下,对于每张图片你会做类似的事情:
import hashlib
filename = "x.jpg"
hashstr = hashlib.sha1(open(filename).read()).hexdigest()
这将在 hashstr
中返回一个十六进制字符串, 比如 5fe54dee8f71c9f13579f44c01aef491e9d6e655
正如所指出的,这只有在文件级逐字节复制时才有效。如果你想剔除相同的图像,比如说不同的分辨率或不同的尺寸,hashlib
函数无济于事,您需要找到一种不同的方法来确定相等性。
关于python - 如何使用 Python 检查超大数据集中的重复图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51772023/