我有将近 6 年的照片分布在以下服务中:Flickr、Facebook、Instagram 并存储在 iPhoto 中。
以编程方式找出这些服务中缺少哪些照片的最佳方法是什么?
我的一些想法:
- 使用图像缩略图的 MD5?
- 比较日期/时间时间戳?
我正在寻找一种方法来生成存在于一个服务上但不存在于另一个服务上的 URL / 文件名列表。
我对用于解决方案的语言并不挑剔,它在 OS X 上运行。
使用图像缩略图的 MD5 不一定会起作用,因为不同的服务会以不同的方式裁剪图像。他们还以不同的方式压缩图像,因此您将无法使用较大样本的 md5 运行。
不幸的是,像 facebook 这样的服务也会删除所有的 EXIF 数据。
这是一种可能的解决方案:
我敢打赌,您可以将图像分成 2x2 块并获得每个网格单元的平均颜色。每张图片有四个分数。要判断相似性,您只需对图像之间的差异进行平方和即可。
这基本上只是将图像的 RGB 平均值取 4 次。这样做 4 次有助于解释轮换。
对于更简单、更快、更健壮的分析,我还建议使用 TinEye API。
如果您想自己编写相似度计算算法,请在此处寻找想法:
我假设您已经知道如何通过每个服务的各种 API 获取照片,并且问题的难点在于比较照片。查看关于 SO 的以下答案,了解如何做到这一点:
如果您不介意为网络服务付费,可以试试Tineye 的 Match Engine。
我认为维护你的照片的本地集中数据库应该是你工作的起点。因此,如果您还没有这样的数据库(或者它不是最新的),您应该继续并从您的所有帐户中下载每条信息。
这个任务应该不会太难。有几种官方/非官方方法和工具可以从这些社交网络下载整个帐户。
account settings
然后选择download a copy
您的数据。既然您的所有照片都在您的 PC 上,您就必须弄清楚哪些是相同的、相似的等等。我认为这个问题应该为这个问题提供解决方案。
个人投这个方法,希望pHash可以编译下OS X
。如果pHash编译并工作,您可以执行第一次传递MD5
,SHA1
或任何其他方式来识别完全匹配。如果没有这样的匹配,您可以运行pHash来查看两个图像的接近程度。
我可以(有足够的时间)bash
在 Linux 下编写所有内容。我想这也Mac OS X
可以在 .
当您发现给定服务中缺少哪些照片时,您最终可以将它们推送到该服务。但我想这里又开始了另一个问题:)