Skip to content

yuriy-zhilovets2/dupfinder

Repository files navigation

Поиск дубликатов для сайта Pastvu.com

Предполагается, что дубликаты фотографий слабо отличаются друг от друга и представляют собой копии с измененными цветами, подкрученной контрастностью или резкостью, нанесенными небольшими надписями, и другими правками косметического характера.  Алгоритм не стоек к обрезке картинок и позволяет найти только дубликаты, лишь слегка отличающиеся друг от друга в плане кадрирования (например, обрезанные на несколько пикселей со всех сторон).

Описание использованных алгоритмов хеширования (dhash) и поиска: https://habr.com/ru/post/715714/

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

Алгоритмы проверялись на базе MySQL (MariaDB 10.6) размеров в 1.200.000 различных изображений и показали приемлемую скорость работы (15 сек для поиска на компьютере с HDD и процессором AMD Phenom(tm) 8450 X3 - 1 Ghz).

################################

Алгоритм создания хэшей dhash не совсем детерминированный и может зависеть от версии установленной библиотеки GraphicMagic.
Необходима осторожность, поэтому поиск лучше проводить на том же компьютере, где создавались хэши, или как минимум проверить, что на обоих компьютерах для одного и того же изображения создаются одинаковые хэши.

Тестовые картинки и скрипт test-samples для вычисления хэшей находятся в каталоге samples. На моем компьютере они дают следующие результаты 
(имя файла, хэш, расстояние от эталонного dj.jpg):

dj.jpg 00800207250F8780
dj-crop3.jpg 00000703640507C3 12
dj-crop.jpg 0080030324050380 7
dj-bw.jpg 00800203250F8780 1
dj-crop2.jpg 00800207250F8780 0
dj-color.jpg 00800207250F8780 0
dj-letter.jpg 00800207250F87C0 1
dj-br.jpg 00000207250F8780 1
dj-mirror.jpg FFFE9F1F5B0F1EFE 37
dj-sharp.jpg 00800207250F8780 0

###############################

Зеркально отраженные изображения найти невозможно, но можно отразить искомое изображение и провести поиск еще раз.

###############################

Собственно, рабочие модули:

image-hash.js   Модуль с функцией расчета дифференциального хэша
dupfinder.js Модуль с функциями для добавления хэша в базу и поиска в базе

Примеры использования:

spider.js    Скрипт рекурсивного индексирования каталога с изображениями
find-dup.js  Скрипт поиска изображения в базе

################################

Основые модули для индексации в базе используют разбиение хэша на 10 частей по 7, 6 и 6 бит каждая. Это позволяет искать изображения, находящиеся на расстоянии 9 друг от друга.

About

Finder of duplicate images

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published