Поиск визуально похожих изображений на заданное изображение в Linux

Я ищу инструмент/программу, которая возьмет изображение в качестве примера и просканирует мой жесткий диск, чтобы найти похожие изображения, точно так же, как Google Images делает в Интернете.

Должен работать на Linux. См. Поиск визуально похожих изображений для заданного файла изображения (в Windows) для программного обеспечения Windows.

Ответы (6)

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 может хранить отпечатки изображений в базе данных, что значительно ускоряет поиск после создания базы данных. Подробнее см. в руководстве.

результат: «bash: findimagesdupes: команда не найдена». на веб-сайте говорится, что в большинстве дистрибутивов Linux пакеты установлены по умолчанию, и я проверил kal linux (который обновлен), и на нем установлен «imagemagik». мне нужно установить какой-либо другой пакет?
@Saeed Вам нужно установить пакет findimagedupes. В большинстве дистрибутивов, включая Kali, он уже упакован , а не предустановлен .
Да, вы были правы, теперь я запускаю команду, и кажется, что она работает, но я не получаю ни вывода, ни ошибки.
findimagedupesработает для меня как шарм, вот его документация: manpages.ubuntu.com/manpages/precise/man1/…
Я не помню, когда я его добавил, но эта -aопция позволяет вам просто проверять вашу базу данных на совпадения с коротким списком файлов, что будет быстрее, чем проверка их всех — что-то вроде O(m*n) для m новых файлов и n в базе данных вместо O(n^2).
вы имеете в виду знаменитый perl-скрипт findimagedupes.pl, не путать с findimagedupes.go"использующим другой алгоритм хеширования"

Немного сделай сам, но вы можете делать такие вещи с python плюс OpenCV или Numpy - в любом случае подход одинаков:

  • Создайте отпечаток пальца изображения, которое вы ищете, с помощью чего-то вроде:
    • Уменьшить до оттенков серого
    • изменить размер до фиксированного размера, например 64x64
    • возможно создать гистограмму интенсивностей
  • Используйте os.walk для поиска файлов для тестирования
  • сгенерировать отпечаток возможного совпадения
  • сравните отпечатки пальцев, например, xor, отпечатки пальцев вместе и подсчитайте единицы, чтобы определить, насколько они отличаются.
  • Добавьте графический интерфейс, если хотите.

    1. Любая ОС, включая Windows, Linux, OS-X, Raspberry Pi, суперкомпьютеры.
    2. Бесплатно - и цена, и FOSS
    3. Графический интерфейс — доступно множество библиотек графического интерфейса.
    4. Много примеров в сети только Google.
    5. Учебный опыт — можете считать это плюсом или минусом .
Спасибо, но это много DIY, и у меня нет времени изучать другой язык программирования, было бы хорошо, если бы была программа, которая делала бы это автоматически.
@Conspiria Если вы свободно владеете определенным языком программирования, это будет актуально. Есть аналогичные библиотеки для других языков.

Я рекомендую geeqie, вы можете установить через менеджер пакетов, например sudo apt install geeqie.

введите описание изображения здесь

Как видите, он способен группироваться по ушам Пикачу, хотя изображения совершенно разные. Обратите внимание, что в этом каталоге ~ 3759 изображений, и его заполнение занимает ~ 5 минут.

Как использовать:

  1. cdв нужный каталог. В качестве альтернативы вы можете сначала открыть, geeqieа затем вставить путь.
  2. введите geeqie, чтобы открыть изображения текущего каталога.
  3. ctrl+Aчтобы выделить все изображения на левой панели.
  4. щелкните правой кнопкой мыши, чтобы открыть контекстное меню.
  5. Выберите пункт меню «Найти дубликаты..»
  6. Выберите «низкое» сходство. Подождите, пока нижний правый индикатор выполнения не заполнится. Вам может потребоваться повторно выбрать «настраиваемое» сходство, если вы вводите поле «Пользовательский порог», но не обновляете страницу.
  7. Нажмите кнопку «Миниатюры», чтобы просмотреть миниатюры (нажмите повторно, если они не отображаются)
  8. Щелкните правой кнопкой мыши отдельный элемент и выберите «Просмотр» в главном окне ИЛИ «Просмотр в новом окне».
  9. Только похожие группы изображений будут видны, остальные останутся скрытыми.
  10. Затем вы можете установить флажок «Сравнить два набора файлов» в правом нижнем углу, перетащить файлы изображений, которые вы хотите сравнить, из файлового менеджера на правую панель, и на левой панели будут показаны похожие изображения (из первого набора). Ошибка заключается в том, что уровень сходства здесь работает не очень хорошо и может показывать только точно такое же, а не низкое сходство.

[ОБНОВИТЬ]

Я только что написал для этого скрипт на Python (не связанный с geeqie). Этот сценарий имеет надежные параметры, позволяющие вам выбрать метод хеширования или метод манхэттенской нормы, сохранить совпавшие/не совпадающие выходные данные в виде символической ссылки на конкретный каталог, кэшировать файл (вы можете сравнить более 10000 изображений за секунды!), И указать приемлемый процент. В настоящее время я заставляю его работать только в Linux.

Этот сценарий связан с Geeqie? Это плагин, например? Если это не так, пожалуйста, отредактируйте свой пост. Спасибо
@knb Не имеет отношения к Geeqie. Отредактировано.
geeqieдовольно хорошо. Если бы только Move toдиалоговое окно привело меня в правильный рабочий каталог, я бы нашел это полезным.
@Fruit ваш скрипт также работает на macOS, я только что проверил :)

ПРИМЕЧАНИЕ. Это больше не работает. Я больше не мог заставить его работать с большинством файлов, похоже, этот инструмент не работает.

Существует Libpuzzle , который будет выполнять часть сравнения, но не часть поиска всех изображений. Чтобы установить его, используйте пакет 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)

Инструмент (вместе со сценариями здесь) будет делать то, что вы хотите большую часть времени.

Хотя инструмент мне нравится, у него есть и недостатки. Он не может прочитать все файлы (иногда у меня были проблемы с jpg) и раздражает, когда он терпит неудачу.

Параметры puzzle-diffпочти не задокументированы, вам нужно будет протестировать некоторые изображения, которые вы хотите иметь, и некоторые, которые вы не видите, чтобы увидеть, какие из них лучше всего подходят для вашей задачи.

Мой сценарий предполагает, что изображение, которое очень похоже (0,80), должно быть указано как ДА, а остальные как НЕТ. Возможно, вы захотите уменьшить это число, чтобы оно соответствовало вашим потребностям.

Итак, я установил libpuzzle-php на Kali, поместил ваш скрипт в файл sh в своем корне и ввел команду для его вызова, но я получаю только «find: `./puzzle.sh': Отказано в доступе»
Вы chmod +x Puzzle.sh?
я забыл, теперь он говорит мне, что "./puzzle.sh строка 2: головоломка-diff: команда не найдена"
@Saeed Хорошо, я только что заметил, что интуитивно выбрал правильный пакет и забыл написать об этом. Вам нужен пакет libpuzzle-bin. Он содержит исполняемый файл головоломки-diff.
Я думаю, теперь это работает, но должен ли вывод выглядеть примерно так? (я скопировал изображение из Интернета в 2 разных каталога с разными именами) Файл BUG : [dvec.c] Строка: [341] (standard_in) 2: синтаксическая ошибка Файл BUG : [dvec.c] Строка: [341] ( standard_in) 2: синтаксическая ошибка ./.cache/mozilla/firefox/c0mqsksl.default/thumbnails/b2da5854129787420780d6c3c34ee1c3.png
@ Саид Нет, не должно. Не могли бы вы отправить мне файл (или его местоположение) по электронной почте? Тогда вечером посмотрю.
Хорошо, я только что отправил их на адрес электронной почты, который вы указали в своем профиле. Благодарность
@Saeed: я больше не мог заставить его работать, и я не нашел ошибку в libpuzzle, которая вызывает это. Я сейчас отказываюсь от этого.
Ничего страшного, может где-то еще что-то не так. благодарю вас :)

ДюпГуру ЧП . Плюс это с открытым исходным кодом. :)

dupeGuru Picture Edition (сокращенно PE) — это инструмент для поиска дубликатов изображений на вашем компьютере. dupeGuru PE — старший брат dupeGuru. Он работает как dupeGuru, но специализируется на сопоставлении дубликатов изображений. dupeGuru PE работает на Windows, Mac OS X и Linux.

dupeGuru PE эффективен. DupeGuru PE может не только находить точные совпадения, но также может находить дубликаты среди изображений разного типа (PNG, JPG, GIF и т. д.) и качества. В Mac OS X dupeGuru PE может сканировать вашу библиотеку iPhoto.

dupeGuru PE настраивается. Вы можете настроить его механизм сопоставления, чтобы найти именно те дубликаты, которые вы хотите найти. На странице Preference файла справки перечислены все настройки модуля сканирования, которые вы можете изменить.

dupeGuru PE безопасен. Его двигатель был специально разработан с учетом требований безопасности. Его справочная система каталогов, а также система группировки не позволяют вам удалять изображения, которые вы не хотели удалять.

Сравните любой формат изображения. dupeGuru PE поддерживает форматы JPG, PNG, TIFF, GIF и BMP. Все эти форматы можно сравнивать между собой. Версия dupeGuru PE для Mac OS X также поддерживает форматы PSD и RAW (CR2 и NEF).

Ваши библиотеки iPhoto и Aperture поддерживаются.

Делайте что хотите со своими дубликатами. Вы можете не только удалять дубликаты файлов, которые находит dupeGuru, но также перемещать или копировать их в другое место. Существует также несколько способов фильтрации и сортировки результатов, чтобы легко отсеивать ложные дубликаты (для сканирования с низким порогом).

(ответ скопирован с https://superuser.com/questions/311633/free-visual-similarity-image-for-a-local-hard-drive-search/453251#453251 - все кредиты Пэту на SuperUser )

Попробуйте поискать по картинке на диске . Это программа для браузера (Linux, Windows, Mac и т. д.), которую я разработал. Лучше всего работает с Chrome и Firefox, так как другие браузеры могут не поддерживать выбор папки. Вы можете использовать программу в автономном режиме, загрузив веб-страницу и разместив ее на порту 8080, поскольку она не требует обработки изображений сервером.

Пожалуйста, четко укажите, работает ли он в Linux (поскольку каждый вопрос должен быть уникальным, каждый ответ должен быть другим, отвечающим уникальным требованиям вопроса). Пожалуйста, также примените тот же совет, что и на другой странице. Спасибо!