我正在寻找一种工具/软件,它将以图像为例并扫描我的硬盘驱动器以找到与之相似的图像,就像 Google 图片在网络上所做的那样。
必须在 Linux 上运行。请参阅为 Windows 软件查找给定图像文件(在 Windows 上)的视觉相似图像。
我正在寻找一种工具/软件,它将以图像为例并扫描我的硬盘驱动器以找到与之相似的图像,就像 Google 图片在网络上所做的那样。
必须在 Linux 上运行。请参阅为 Windows 软件查找给定图像文件(在 Windows 上)的视觉相似图像。
findimagedupes
是 Linux 和其他 Unix 平台上常用的命令行程序。
它寻找所有文件之间的相似性。如果您愿意,您可以过滤输出以仅保留有关一个文件的信息,我认为这不会对性能产生巨大影响(缓慢的部分是扫描所有文件)。
要扫描某个目录下的 PNG 和 JPEG 文件,并且只保留类似于 SOMEIMAGE.jpg 的图像,请运行以下命令:
cd /path/to/directory
find . \( -name '*.jpg' -o -name '*.png' \) -print0 |
findimagedupes -0 - |
grep -F 'SOMEIMAGE.jpg'
如果您要经常这样做,findimagedupes 可以将图像指纹存储在数据库中,这样一旦建立数据库,搜索速度就会大大加快。有关详细信息,请参阅手册。
有点 DIY,但你可以用python加上OpenCV或Numpy来做这种事情——在任何一种情况下,方法都是一样的:
如果您愿意,可以添加一个 GUI。
我建议geeqie
,您可以通过包管理器安装,例如sudo apt install geeqie
.
如您所见,即使图像完全不同,它也可以按皮卡丘的耳朵进行分组。请注意,此目录有约 3759 张图像,需要约 5 分钟才能完成。
如何使用:
cd
到所需的目录。或者,您可以geeqie
先打开并稍后插入路径。geeqie
以打开当前目录图像。[更新]
我刚刚写了一个python 脚本(不相关geeqie
)来做到这一点。该脚本具有强大的选项,可让您选择哈希方法或曼哈顿范数方法,将匹配/不匹配输出保存为特定目录的符号链接,缓存文件(您可以在几秒钟内比较 10000 多张图像!),并指定可接受的百分比。目前我只让它在 Linux 中工作。
注意:这不再起作用。我无法再让它为大多数文件运行,看来这个工具已经坏了。
有Libpuzzle,它将进行比较部分,但不是搜索所有图像部分。要安装它,请使用 package libpuzzle-bin
,它将为您提供命令行工具。
它是一个库和命令行工具,旨在比较两个图像并列出它们的相似性。不久前,我用它来查找非常相似(徽标)的文件,效果很好。
如果你想使用它,你必须使用调用 libpuzzle 的附加软件和适当的选项。
我编写了一个可用于 find -exec 命令的脚本。脚本是这样的(我把它放在一个名为 的文件中simple-pd.sh
):
#!/bin/bash
if (( $(echo "0.80<`puzzle-diff \"$1\" \"$2\"`" | bc -l) )) ; then
exit 0
fi
exit 1
它是这样调用的:
find . -regex ".*jpg\|.*gif\|.*png" -exec ./simple-pd.sh MYIMAGE {} \; -print
将 MYIMAGE 替换为要进行比较的图像。脚本需要可执行权限 ( chmod +x simple-pd.sh
)
该工具(连同此处的脚本)将在大多数情况下执行您想要的操作。
虽然我确实喜欢这个工具,但它也有它的缺点。它无法读取所有文件(我有时会遇到 jpgs 的问题)并且在失败时很烦人。
的参数puzzle-diff
几乎没有记录,您将需要测试一些您想要拥有的图像和一些您不需要的图像,以查看哪些图像最适合您的任务。
我的脚本假定将非常相似 (0.80) 的图像报告为“是”,其余的为“否”。您可能希望减少该数字以满足您的需求。