Посмотрев просторы интернета, первым делом на глаза мне попалась библиотека OpenCV, эта библиотека имеет интерфейсы на различных языках, среди которых Python, Java, C++ и Matlab. Мне стало интересно, есть ли у Python стандартная библиотека для работы с изображениями и вот она – Pillow. Это форк PIL, которая успешно развивается и был принят в качестве замены оригинальной библиотеки. Свой выбор я остановил на ней.
Достаточно ли оптимально?
Может, для каждой картинки сперва посчитать хэши, а потом уже хэши сравнивать? По ощущениям, должно быть быстрее.
100% быстрее.
Из простых решений это phash.org, для похожести можно еще расстояние Хэмминга использовать. Загнать в постгрес, индексы которого помогут быстрее матчинг проводить, например, можно на это посмотреть https://github.com/fake-name/pg-spgist_hamming
Можно для начала сравнить размеры в байтах
Хорошая статейка, спасибо!
вместо того, чтобы проверять картинку на соответствие каждой следующей, лучше просто сделать словарь (размер : расположение) и если размер картинки будет в словаре, то сравнивать их контент. В случае совпадения будет выводиться сообщение с расположением этих одинаковых картинок
вот мой код, надеюсь он вам поможет:
import os
from PIL import Image, ImageChops
print('Введите ПОЛНЫЙ путь к папке: ', end = '')
directory_in_str = input()
directory = os.fsencode(directory_in_str)
imgs = os.listdir(directory_in_str)
dublicates = {}
try:
for file in os.listdir(directory):
filename = os.fsdecode(file)
last_name = directory_in_str
last_name += '\\' + filename
f_info = os.stat(last_name)
if f_info.st_size in dublicates:
image_1 = Image.open(last_name)
image_2 = Image.open(dublicates[f_info.st_size])
result = ImageChops.difference(image_1, image_2)
result = result.getbbox()
if result == None:
couter += 1
print(f'Найден дубликат: [{last_name} и {dublicates[f_info.st_size]}]')
else:
dublicates[f_info.st_size] = last_name
except:
print('Ошибка поиска директории!')
print(f'Программа завершила работу, файлов обработано [{couter}].')
Спасибо за готовое решение!
Вот сервис похожий https://jarjad.ru/compare-images/