我已经收集了大约13年的照片,总共600GB,现在存储在FreeBSD ZFS/服务器上。
这些照片来自家庭电脑,从不同的外部USB硬盘驱动器进行了几次部分备份,从磁盘灾难中重建的图像,从不同的照片处理软件(iPhoto、Picassa、HP等)在几个深层子目录中 - 简而言之 = 非常混乱,有很多重复文件。
所以我首先做的是:
- 搜索相同大小的文件(速度快),并为它们制作md5校验和。
- 收集重复的图像(相同大小+相同md5 = 重复)
这对我帮助很大,但仍然有很多重复项:
- 仅通过某些照片管理软件添加的exif/iptc数据而不同的照片,但图像相同(或至少“看起来相同”且具有相同的尺寸)
- 或者它们只是原始图像的调整大小版本
- 或者它们是原始图像的“增强”版本等等。
现在的问题:
- 如何通过仅对JPG中的“纯图像字节”进行校验和来查找重复项,而不包括exif/IPTC等元信息?因此,希望过滤掉仅在exif标记方面有所不同但图像相同的照片副本(因此文件校验和无法起作用,但图像校验和可以……)。这(我希望)并不是很复杂 - 但需要一些指导。
- 哪个Perl模块可以从可用于比较/校验的JPG文件中提取“纯”图像数据?
更复杂的问题:
- 如何找到“相似”的图像,即
- 原始图像的调整大小版本
- 原始图像的“增强”版本(来自某些照片处理程序)
- 是否已经有任何算法以Unix命令形式或Perl模块(XS?)可用于检测这些特殊的“重复项”?
我能够使用BASH和Perl创建复杂的脚本。可以直接在服务器上使用FreeBSD/Linux实用程序,在网络上可以使用OS X(但使用LAN处理600GB不是最快的方法)……
我的粗略想法:
- 在工作流程结束时仅删除图像
使用Image::ExifTool
脚本根据图像创建日期和相机型号(也许还有其他exif数据)收集重复的图像数据。- 制作纯图像数据的校验和(或提取直方图 - 相同的图像应该具有相同的直方图)- 不确定这一点
- 使用某些相似度检测来查找基于调整大小和照片增强的重复项 - 不知道如何实现……
您好,以下是您需要翻译的内容:
有什么方法、帮助或(软件/算法)提示可以让混乱中的秩序更加有序吗?
附注:
这里有一个几乎相同的问题:查找重复图片文件,但我已经用md5回答了,并正在寻找更精确的校验和图像比较算法。