Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Скрипт поиска дубликатов изображений.  (Прочитано 4135 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Axa-Ru

  • Автор темы
  • Гость
Коллеги, написал скрипт поиска дубликатов изображений.
Как мне кажется получился очень даже хороший.



Исходник здесь: wp_find_dup_pic2.sh

Принципы, которые лежат в основе рассмотрены здесь: http://axa-ru.blogspot.com/2011/10/linux-how-to-compare-images.html

При запуске без параметров начинает искать дубликаты jpg в текущем каталоге.
Подсказка при указании ключа -h.

Хочу добавить еще сохранение текущего состояния процесса сравнения. Думаю будет полезно при выявлении дубликатов в большом массиве картинок, когда процесс поиска нужно возобновить с прерванного места.
Буду благодарен за любые замечания, пожелания и мнения.
« Последнее редактирование: 18 Октября 2011, 13:47:53 от Axa-Ru »

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Скрипт поиска дубликатов изображений.
« Ответ #1 : 18 Октября 2011, 15:49:42 »
Так понимаю - делается это для развлечения/тренировки (иначе какой смысл - уже есть нормальные поисковики дупов, с гуи, что для подобных ММ приблуд обязательно)?

Если да - можно делать что левая пятка пожелает.

Если нет - .. хм а стоит-ли очередной велосипед изобретать? .. ну как минимум гуи прикрутить надо.

Axa-Ru

  • Автор темы
  • Гость
Re: Скрипт поиска дубликатов изображений.
« Ответ #2 : 18 Октября 2011, 15:56:19 »
А какие с ГУЙ? Я не нашел что то ни одного под линукс.
И зачем нужен ГУЙ?
« Последнее редактирование: 18 Октября 2011, 15:57:51 от Axa-Ru »

Оффлайн xkool

  • Старожил
  • *
  • Сообщений: 1459
  • do not love my brain
    • Просмотр профиля
Re: Скрипт поиска дубликатов изображений.
« Ответ #3 : 18 Октября 2011, 16:41:46 »
fdupes делает тоже самое
Лучше маленький доллар, чем большое спасибо.

Axa-Ru

  • Автор темы
  • Гость
Re: Скрипт поиска дубликатов изображений.
« Ответ #4 : 18 Октября 2011, 16:49:01 »
Нет. fdupes сравнивает md5 и побайтно. А это далеко не то же самое.
fdupes ориентирована на бинарные файлы.
А утилита perceptualdiff, которая используется в моем скрипте на сравнение именно изображений.
Почитайте в ссылке на мой блог об используемых принципах.
« Последнее редактирование: 18 Октября 2011, 16:51:36 от Axa-Ru »

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Скрипт поиска дубликатов изображений.
« Ответ #5 : 18 Октября 2011, 22:24:39 »
А какие с ГУЙ? Я не нашел что то ни одного под линукс.
Такое возможно в одном варианте - не искал :)

Самые известные digikam (входит в дистр убунты) и gqview. Есть еще пачка менее известных (одним из которых я, лет несколько назад, даже пользовался, только названия не помню).

И зачем нужен ГУЙ?
Как зачем? Я хочу видеть ЧТО софтина посчитала дублями. И выбрать какой из файлов оставить.

Axa-Ru

  • Автор темы
  • Гость
Re: Скрипт поиска дубликатов изображений.
« Ответ #6 : 18 Октября 2011, 22:29:55 »
sudo apt-get install digikam
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  akonadi-server digikam-data dolphin icoutils kdebase-bin kdebase-data kdebase-runtime
  kdebase-runtime-data kdegraphics-libs-data kdelibs-bin kdelibs5-data kdelibs5-plugins
  kdepim-runtime kdepimlibs-kio-plugins kdoctools kfind kipi-plugins kipi-plugins-common konqueror
  konqueror-nsplugins kubuntu-debug-installer libakonadi-kabc4 libakonadi-kcal4 libakonadi-kde4
  libakonadi-kmime4 libakonadiprotocolinternals1 libattica0 libboost-program-options1.42.0
  libclucene0ldbl libgps19 libiodbc2 libkabc4 libkatepartinterfaces4 libkcal4 libkcmutils4
  libkdcraw9 libkde3support4 libkdecore5 libkdesu5 libkdeui5 libkdewebkit5 libkdnssd4
  libkemoticons4 libkexiv2-9 libkfile4 libkhtml5 libkidletime4 libkimap4 libkio5 libkipi8
  libkjsapi4 libkjsembed4 libkldap4 libkmediaplayer4 libkmime4 libknewstuff3-4 libknotifyconfig4
  libkntlm4 libkonq5-templates libkonq5a libkonqsidebarplugin4a libkparts4 libkpimutils4
  libkprintutils4 libkpty4 libkresources4 libkrosscore4 libksane0 libktexteditor4 libkutils4
  liblensfun-data liblensfun0 libmailtransport4 libmarblewidget11 libmicroblog4 libnepomuk4
  libnepomukquery4a libnepomukutils4 libntrack-qt4-1 libntrack0 libplasma3 libqapt-runtime
  libqapt1 libqjson0 libreadline5 libsolid4 libsoprano4 libssh-4 libstreamanalyzer0 libstreams0
  libthreadweaver4 libvirtodbc0 marble-data marble-plugins mysql-client-core-5.1
  mysql-server-core-5.1 ntrack-module-libnl-0 odbcinst odbcinst1debian2 oxygen-icon-theme
  plasma-scriptengine-declarative plasma-scriptengine-javascript qapt-batch
  shared-desktop-ontologies soprano-daemon virtuoso-minimal virtuoso-opensource-6.1-bin
  virtuoso-opensource-6.1-common
Suggested packages:
  digikam-doc kdesdk-dolphin-plugins ruby libterm-readline-gnu-perl libterm-readline-perl-perl
  djvulibre-bin gallery kmail hugin enblend enfuse konq-plugins hspell
The following NEW packages will be installed:
  akonadi-server digikam digikam-data dolphin icoutils kdebase-bin kdebase-data kdebase-runtime
  kdebase-runtime-data kdegraphics-libs-data kdelibs-bin kdelibs5-data kdelibs5-plugins
  kdepim-runtime kdepimlibs-kio-plugins kdoctools kfind kipi-plugins kipi-plugins-common konqueror
  konqueror-nsplugins kubuntu-debug-installer libakonadi-kabc4 libakonadi-kcal4 libakonadi-kde4
  libakonadi-kmime4 libakonadiprotocolinternals1 libattica0 libboost-program-options1.42.0
  libclucene0ldbl libgps19 libiodbc2 libkabc4 libkatepartinterfaces4 libkcal4 libkcmutils4
  libkdcraw9 libkde3support4 libkdecore5 libkdesu5 libkdeui5 libkdewebkit5 libkdnssd4
  libkemoticons4 libkexiv2-9 libkfile4 libkhtml5 libkidletime4 libkimap4 libkio5 libkipi8
  libkjsapi4 libkjsembed4 libkldap4 libkmediaplayer4 libkmime4 libknewstuff3-4 libknotifyconfig4
  libkntlm4 libkonq5-templates libkonq5a libkonqsidebarplugin4a libkparts4 libkpimutils4
  libkprintutils4 libkpty4 libkresources4 libkrosscore4 libksane0 libktexteditor4 libkutils4
  liblensfun-data liblensfun0 libmailtransport4 libmarblewidget11 libmicroblog4 libnepomuk4
  libnepomukquery4a libnepomukutils4 libntrack-qt4-1 libntrack0 libplasma3 libqapt-runtime
  libqapt1 libqjson0 libreadline5 libsolid4 libsoprano4 libssh-4 libstreamanalyzer0 libstreams0
  libthreadweaver4 libvirtodbc0 marble-data marble-plugins mysql-client-core-5.1
  mysql-server-core-5.1 ntrack-module-libnl-0 odbcinst odbcinst1debian2 oxygen-icon-theme
  plasma-scriptengine-declarative plasma-scriptengine-javascript qapt-batch
  shared-desktop-ontologies soprano-daemon virtuoso-minimal virtuoso-opensource-6.1-bin
  virtuoso-opensource-6.1-common
0 upgraded, 109 newly installed, 0 to remove and 4 not upgraded.
Need to get 78.8 MB of archives.
After this operation, 237 MB of additional disk space will be used.
Do you want to continue [Y/n]? Y

Фигасе ...  :idiot2:

Но в любом случае спасибо. Посмотрю.
« Последнее редактирование: 18 Октября 2011, 22:31:37 от Axa-Ru »

Оффлайн shumtest

  • Активист
  • *
  • Сообщений: 731
  • Это вам просто кажется...
    • Просмотр профиля
    • Блог Шумомера
Re: Скрипт поиска дубликатов изображений.
« Ответ #7 : 18 Октября 2011, 22:59:43 »
Фигасе ...  :idiot2:
Она на кде основана :crazy2: А у вас, видимо, только гткшные проги до сих пор стояли. Потому и подтягивает столько либ.
« Последнее редактирование: 18 Октября 2011, 23:01:56 от shumtest »

Axa-Ru

  • Автор темы
  • Гость
Re: Скрипт поиска дубликатов изображений.
« Ответ #8 : 18 Октября 2011, 23:03:50 »
Это я понимаю. Все равно 10.04 сносить поставлю и посмотрю

Оффлайн ende_neu

  • Старожил
  • *
  • Сообщений: 2473
    • Просмотр профиля
Re: Скрипт поиска дубликатов изображений.
« Ответ #9 : 18 Октября 2011, 23:12:23 »
>Я хочу видеть ЧТО софтина посчитала дублями. И выбрать какой из файлов оставить.

Скрипты делают и используют для того чтоб не думать и не выбирать.Не путайте скрипт и приложение.

Оффлайн Phlya

  • Старожил
  • *
  • Сообщений: 2219
  • Фля, Цыганский барон, Винни Пух
    • Просмотр профиля
Re: Скрипт поиска дубликатов изображений.
« Ответ #10 : 18 Октября 2011, 23:15:30 »
Жесть, сколько времени занимает по описанию... Поддержка GPU не планируется? =) Я не знаю, но мне кажется, это должно сильно ускорить...
Ubuntu 14.04 (Unity), MSI GE40

Axa-Ru

  • Автор темы
  • Гость
Re: Скрипт поиска дубликатов изображений.
« Ответ #11 : 18 Октября 2011, 23:32:24 »
Я сейчас посавлю digikam и посмотрю сколько времени он будет искать дубликаты в папке с 5000 картинок.
С GPU интересно было бы поразбираться. Это в самом деле на порядки бы ускорило такие операции.
Но в моем ноуте стоит интеловская графика, к сожалению, нет CUDA.

==========================================================================================

Поставил. Посмотрел.
Как они обрабатывают с такой скоростью?
Точнее что они хранят в fingerprint?
Да-а-а-а... Мой скрипт нафиг не сдался...

Как у Лескова. В Сибири чувак в 18 веке дифиренциальное исчисление изобрел.

Пользователь решил продолжить мысль 19 Октября 2011, 05:01:31:
В digikam строится какая то внутренняя база, называемая fingerprint. Этот процесс достаточно долгий. У меня он занял часа 3 на 40000 картинках с разрешением больше, чем 1920х1080.

Затем практически мнгновенно, за десяток секунд происходит поиск дубликатов.

Затем выводится список из огромного количества дубликатов и предлагается тыкать мышкой. Это реальный фейл. Мне нужно их удалить, а сделать такую операцию в командном режиме программа не позволяет. Это тот "windows" случай, когда ГУЙ не сдался.

Колеги, а давайте пофантазируем, какие принципы могут быть заложены при поиске одинаковых или похожих изображений?

1. Нашел небольшую, но интересную статью на хабре: «Выглядит похоже». Как работает перцептивный хэш
2. Обмен знаниями очень важен. После просмотра процесса работы digikam появилась идея как ускорить поиск на порядки.
3. В общем ясно, что делает digikam. fingerprint это hash от HAAR-преобразования уменьшенной  картинки. Я делаю примерно так же, но у меня не хранится база хэшей.
4. Нужно отсечь из списка те, которые явно отличаются и в коротком списке выполнять поиск дубликатов.
Я думаю, что сделаю это быстрее, чем digikam.
« Последнее редактирование: 19 Октября 2011, 13:04:53 от Axa-Ru »

 

Страница сгенерирована за 0.048 секунд. Запросов: 24.