Находите и удаляйте дубликаты изображений из области ± 2 миллиона изображений

Новостной портал компании имеет два сервера (OS = Centos 6):

Первый сервер №1 имеет около 1 миллиона изображений (.jpg, .png), а сервер №2 имеет почти такое же количество - 1 миллион изображений. Некоторые из них являются идентичными дубликатами, некоторые являются дубликатами с измененным размером, некоторые с размытием, некоторые без размытия, некоторые являются полностью уникальными изображениями. Имена файлов в основном тоже разные.

Задача - объединить медиа каталог двух серверов в один. После слияния дубликаты должны быть ромовированы (чтобы освободить место на диске).

Я провел несколько тестов с Imagemagick compare -metric RMSE, но я подумал, что это займет много времени, чтобы сравнить каждый файл с каждым файлом с двух серверов. Таким образом, будет 1 млн x 1 млн = 1 триллион операций, это займет много времени ...

Есть предложения здесь?

Не могли бы вы сравнить контрольные суммы MD5 друг с другом? Я чувствую, что это может быть быстрее, чем imagemagick, но вы все равно выполняете 1 триллион операций

IsThisJavascript 01.05.2018 16:08

Проблема с MD5 в том, что первый сервер делал оригинальные фотографии (загруженные журналистами) и уменьшал их размер до разрешения 1600x900 пикселей с разной степенью сжатия. Тем временем второй сервер делал оригинальные фотографии и ничего с ними не делал, просто записывал на диск. Так что md5 будет разным для всех файлов. :(

Sid 01.05.2018 16:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
2
286
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Используйте GNU Parallel, чтобы рассчитать только один раз для каждого изображения:

  • контрольная сумма только данных

  • перцептивный хэш

Затем отбросьте все с идентичными контрольными суммами и просмотрите те, которые имеют похожие хеш-значения восприятия.


Получите контрольную сумму по только данные изображения (то есть не включая никаких метаданных, таких как другая дата в ваших изображениях), используя ImageMagick следующим образом:

identify -format "%#" a.jpg
9e51c9cf53fddc7d318341cd7e6c6e34663e5c49f20ede16e29e460dfc63867

Ссылки на создание перцептивного хэша:

Привет, Марк, спасибо! На самом деле я уже проверял вашу первую упомянутую ссылку - stackoverflow.com/questions/25198558/…. Отметьте там второй комментарий - он мой, и этот скрипт выдает мне ошибки.

Sid 01.05.2018 16:24

Если скрипт выдает ошибки, попробуйте запустить его вот так, чтобы увидеть, что происходит ... bash -xv ./script

Mark Setchell 01.05.2018 17:03

Выход: codehare.io/21p9JB. Насколько я понимаю, -gt не работает. Поэтому я заменил его на простой знак >, и, похоже, он работает без ошибок. Но все равно хеш = 0000000000000000 все время для разных образов. Отлаживаю .. И дам знать.

Sid 01.05.2018 17:25

@ fmw42 OP имеет в виду мой код здесь stackoverflow.com/a/25204466/2836621

Mark Setchell 01.05.2018 19:38

Вы запускаете код с bash? Вы установили ImageMagick? Какую версию чата вы используете? Если вы используете v7, вам нужно будет изменить все экземпляры convert на magick, поскольку имя программы изменилось. Точно так же все экземпляры identify необходимо изменить на magick identify в версии 7 - если вы это используете. Вы не в винде?

Mark Setchell 01.05.2018 19:40

@MarkSetchell да, Version: ImageMagick 7.0.7-28, я заменил все convert на magick, также я не нашел в вашем коде никаких экземпляров identify. И результат следующий: $ ./byb.sh 1/bird1.jpg 0. :( Я на Centos 6

Sid 02.05.2018 07:10

Пожалуйста, запустите сценарий с помощью bash -xv theScript someImage.jpg

Mark Setchell 02.05.2018 08:12

Я только что добавил скрипт (bash unix ImageMagick) для вычисления 4 различных перцептивных хэшей, которые создают хэши двоичных строк, которые могут быть сохранены в метаданных изображения. Также скрипт для вычисления расстояния Хэмминга между двумя хешами двоичных строк. Он может получить доступ к хешам из метаданных изображения. Мои скрипты находятся по адресу fmwconcepts.com/imagemagick/index.php

fmw42 03.05.2018 19:55

Другие вопросы по теме