我有超过 130 万张图像需要相互比较,而且每天会添加数百张。
我的公司拍摄图像并创建一个可供我们的供应商使用的版本。
这些文件通常彼此非常相似,例如,两家不同的公司可以向我们发送两张不同的图像,一张 JPG 和一张 GIF,都带有麦当劳的标志,提交间隔几个月。
正在发生的事情是,最后我们发现自己创建了两个不同时间的相同徽标,而我们可以简单地复制/粘贴已经创建的徽标,或者至少建议将其作为艺术家的可能起点。
我一直在寻找创建指纹的算法或其他允许我在上传新图像时进行简单查询的算法,时间相对不是问题,如果创建指纹需要 1 秒,则需要 150 天创建指纹,但我们甚至可能会获得 3 或 4 台服务器来做这件事,这将是一个很大的节省。
我精通 PHP,但如果算法是伪代码甚至 CI 可以读取它并尝试翻译(除非它使用一些 C 特定库)
目前我正在对所有图像进行 MD5 以捕捉完全相同的图像,当我考虑调整图像大小并在调整大小的图像上运行 md5 以捕捉那些已经被以不同的格式保存并调整大小,但我仍然没有足够好的识别。
如果我没有提到它,我会很高兴有一些只是建议可能的“相似”图像的东西。
编辑
请记住,检查需要每分钟进行多次,因此最好的解决方案是为每个图像提供一些值,以便我可以存储并在将来使用这些值与我正在查看的图像进行比较,而无需重新扫描整个服务器。
我正在阅读一些提到直方图的页面,或者将图像调整为非常小的尺寸,去除可能的标签,然后将其转换为灰度,对这些文件进行哈希处理并将其用于比较。如果我成功了,我会在这里发布代码/答案