是否可以检测到重复的图像文件?

Bla*_*man 8 python image

我有超过10K的产品文件,问题是很多图像都是重复的.

如果没有图像,则会有标准图像显示"无图像".

如何检测图像是否为此标准"无图像"图像文件?

更新 图像是一个不同的名称,但它是完全相同的图像.

人们在说哈希,我会这样做吗?

im = cStringIO.StringIO(file.read())
img = im.open(im)
md5.md5(img)
Run Code Online (Sandbox Code Playgroud)

Dan*_*uev 9

作为旁注,对于图像,我发现栅格数据哈希比文件哈希更有效.

ImageMagick提供了计算此类哈希的可靠方法,并且可用的python有不同的绑定.它有助于检测具有不同无损压缩和不同元数据的相同图像.

用法示例:

>>> import PythonMagick
>>> img = PythonMagick.Image("image.png")
>>> img.signature()
'e11cfe58244d7cf98a79bfdc012857a9391249dca3aedfc0fde4528eed7f7ba7'
Run Code Online (Sandbox Code Playgroud)


Fel*_*ing 5

假设您正在谈论相同图像数据的相同图像.

计算哈希值 "无图像"的形象,并将其与其他图像的哈希值.如果哈希值相同,则它是同一个文件.


Par*_*and 5

不久前,我为此编写了一个脚本。首先,它扫描所有文件,并在字典中记录它们的大小。您最终得到:

images[some_size] = ['x/a.jpg', 'b/f.jpg', 'n/q.jpg']
images[some_other_size] = ['q/b.jpg']
Run Code Online (Sandbox Code Playgroud)

然后,对于字典中元素多于1个的每个键(图像大小),我将读取一定数量的文件并进行哈希处理。就像是:

possible_dupes = [size for size in images if len(images[size]) > 1]
for size in possible_dupes:
    hashes = defaultdict(list)
    for fname in images[size]:
        m = md5.new()
        hashes[ m.update( file(fname,'rb').read(10000) ).digest() ] = fname
    for k in hashes:
       if len(hashes[k]) <= 1: continue
       for fname in hashes[k][1:]:
           os.remove(fname)
Run Code Online (Sandbox Code Playgroud)

这一切都让我烦恼,还没有测试代码,但是您明白了。