13 年来收集了大约 600GB 的照片 - 现在存储在 freebsd zfs/server 上。
照片来自家庭计算机,从几个部分备份到不同的外部 USB 硬盘,从磁盘灾难重建的图像,来自不同的照片处理软件(iPhoto、Picassa、HP 和许多其他:()在几个深层子目录中 - 很快 =可怕的混乱与许多重复。
所以首先我做了:
- 在树中搜索相同大小的文件(快速)并为这些文件制作 md5 校验和。
- 收集的重复图像(相同大小 + 相同 md5 = 重复)
这有很大帮助,但这里仍然有很多重复项:
- 照片仅与某些照片管理软件添加的exif / iptc数据不同,但图像相同(或至少“看起来相同”并且具有相同的尺寸)
- 或者它们只是原始图像的调整大小版本
- 或者它们是原件的“增强”版本等。
现在的问题:
- 如何在没有 exif/IPTC 和元信息的情况下仅检查 JPG 中的“纯图像字节”来查找重复项?所以,要过滤掉照片重复,只有exif标签有什么不同,但图像是一样的。(因此文件校验和不起作用,但图像校验和可以......)。这(我希望)不是很复杂 - 但需要一些方向。
- 什么 perl 模块可以从 JPG 文件中提取“纯”图像数据可用于比较/校验和?
更复杂
- 如何找到“相似”的图像,只有
- 原件的调整大小的版本
- 原件的“增强”版本(来自一些照片处理程序)
- 这里是否已经有任何以 unix 命令形式或 perl 模块(XS?)可用的算法,我可以用什么来检测这些特殊的“重复”?
我能够制作复杂的脚本是BASH和“+-” :) 知道perl。. 可以直接在服务器上使用 FreeBSD/Linux 实用程序,并且可以通过网络使用 OS X(但通过 LAN 使用 600GB 不是最快的方式)...
我的粗略想法:
- 仅在工作流程结束时删除图像
use Image::ExifTool
用于根据图像创建日期和相机型号(也可能是其他 exif 数据)收集重复图像数据的脚本。- 对纯图像数据进行校验和(或提取直方图-相同的图像应该具有相同的直方图)-对此不确定
- 使用一些相似性检测来查找基于调整大小和照片增强的重复项 - 不知道该怎么做......
任何想法,帮助,任何(软件/算法)暗示如何在混乱中建立秩序?
附言:
这是几乎相同的问题:查找重复的图像文件,但我已经完成了答案(md5)。并寻找更精确的校验和和图像比较算法。