Совсем недавно у меня появилась интересная задача – необходимо было найти одинаковые фотографии на разных объектах недвижимости. Т.е. к объектам недвижимости расположенных с разным местоположением крепилась одна и та же фотография, может ошибочно, может специально, но такие объекты надо было найти. И я хотел бы поделиться тем, как я решал эту задач…
вместо того, чтобы проверять картинку на соответствие каждой следующей, лучше просто сделать словарь (размер : расположение) и если размер картинки будет в словаре, то сравнивать их контент. В случае совпадения будет выводиться сообщение с расположением этих одинаковых картинок
вот мой код, надеюсь он вам поможет:
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}].')
Спасибо за готовое решение!