5

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)。并寻找更精确的校验和和图像比较算法。

4

4 回答 4

3

假设您可以使用本地安装的 FS:

  • rmlint:我用过的最快的工具来查找精确的重复项
  • findimagedupes:使整个 ImageMagick 方式自动化(作为我没有测试过的 Randal Schwartz 的脚本?似乎)
  • 使用 Perseptual Hashes 检测相似和相同的图像一路走来(一个很好的参考帖子)
  • dupeguru-pe(gui) :专用工具,速度快,工作出色
  • geeqie(gui) :我发现使用细粒度的重复数据删除选项可以快速/出色地完成这项工作。此外,您还可以生成有序的图像集合,使“模拟图像”彼此相邻,允许您在两者之间“翻转”以查看变化。
于 2015-02-20T16:51:45.237 回答
2

mogrify -strip您可以从 ImageMagick 工具集中删除 exif 数据。所以你可以,对于每张图片,在没有 exif、md5sum 的情况下复制它,然后比较 md5sums。

当涉及到视觉上相似的消息时 - 例如,您可以使用比较(也来自 ImageMagick 工具集),并生成黑白差异图,如此所述,然后制作差异直方图并检查是否有“足够”的白色意味着它是不同的。

于 2013-06-22T13:16:26.400 回答
2

你看过Randal Schwartz的这篇文章吗?他使用带有 ImageMagick 的 perl 脚本来比较图片的调整大小(4x4 RGB 网格)版本,然后进行比较以标记“相似”图片。

于 2013-08-28T03:30:29.877 回答
0

我也遇到过类似的困境——数百张照片和视频在十几个驱动器上传播和复制。我知道这可能不是您正在寻找的确切方式,但 FSlint Janitor 应用程序(在 Ubuntu 16.x 上,然后是 18.x 上)对我来说是救命稻草。我把这个项目分成几块,最终把它清理干净,最后得到了三套完整的东西(我想要两个异地备份)。

FSLint 看门人:
FSLint 看门人

sudo apt install fslint
于 2020-11-20T03:29:08.017 回答