Есть сайт с возможностью пользователя загружать изображения в общую галлерею. Изображений довольно много и есть необходимость проверки на наличие таких изображений в каталоге.
Как я планирую это делать: пи сохранении изображения вычислять его хеш, затем искать похожие хеши в бд. Если таковых нет - сохранять изображение и его хеш.
Тут возникает ряд вопросов:
1. Какие есть готовые решения для расчета подобных хешей, которые работают на Linux.
2. Достаточно ли сравнения по одному алгоритму, или будет целесообразно хранить и сравнивать несколько хешей?
3. Для поиска похожих изображений необходим поиск не по полному соответствию, а по "отклонению" хешей друг от друга. Возможно ли организовать такой поиск при помощи БД (POSTGRESQL) что бы не вытаскивать каждый раз все запись и не обрабатывать из на ЯП?
Алгоритм правильный, но его можно ускорить в несколько раз - анализируйте не всё изображение, а его центральную часть. Размеры части должны зависеть от размеров изображения, чтобы исключить повторяющиеся изображения разного разрешения
Писал на эту тему диплом. Ознакомьтесь в первую очередь вот с этим постом: habrahabr.ru/post/120562
Для Вашей задачи описанный алгоритм подойдёт лучше всего. Но он определяет схожесть только по форме изображения и не берёт в расчёт цвет. Если Вам нужно учитывать цвет, попробуйте вычленять доминирующие цвета (habrahabr.ru/post/136530) и придумать алгоритм вычисления хэшей и определения схожести по этим цветам.
Со статьями ознакомился. Думаю использовать phash. Скачать, скомпилировал. Но не могу разобраться, как его использовать. Доков нигде найти не могу.
Единственное, что удалось понять - то что это не готовая утилита, а библиотека. НЕ подскажите, как ее использовать?
Если готовое решение - то www.phash.org/, на osx ставится через brew install phash под linux думаю аналогично. Собственно плюс данного решения, что разница между хашами и есть, разница между изображениями по данному алгоритму. Если постгрес понимает запросы типа - выдай мне все записи где вот это поле отличается от этого числа не более чем на такую константу - то сможете получать на посгресе.