Можно ли сравнить Фото по Фото а не по размеру файла?
-
Здравствуйте,
Есть папка в которой небольшое колличество фотографий к примеру1.png filesize=28782
2.png filesize=13987
3.png filesize=19333
4.png filesize=54987задача удалить дубликаты в этой папке на основе анализа по самой фотографии потому как сам размер фото разный но на фото одна и таже картинка.
Возможно ли такое в BAS ?
Спасибо!
-
@discovery-84 said in Можно ли сравнить Фото по Фото а не по размеру файла?:
Здравствуйте,
Есть папка в которой небольшое колличество фотографий к примеру1.png filesize=28782
2.png filesize=13987
3.png filesize=19333
4.png filesize=54987задача удалить дубликаты в этой папке на основе анализа по самой фотографии потому как сам размер фото разный но на фото одна и таже картинка.
Возможно ли такое в BAS ?
Спасибо!
В BAS точно нельзя, используйте специализированные для этой задачи инструменты
-
Вот код на питоне которые исщет похожие картники
Там задаются 4 картинки вычисляется их хеш и потом исщется та которая наиболее похожа другую
может его можно как то адаптрировать под javascript
если питон не знаешь учивообще то принцип такой картика уменьшается в размере переводится в черно белую и потом вычисляется ее хеш который потом сравнивается с другими такими же похожими картиками.
Еще можно заморачаться и написать нейросеть которая будет определять что у тебя там на картники или на что это вообще похоже но в этом я не силен.
import cv2 #Функция вычисления хэша def CalcImageHash(FileName): image = cv2.imread(FileName) #Прочитаем картинку resized = cv2.resize(image, (8,8), interpolation = cv2.INTER_AREA) #Уменьшим картинку gray_image = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) #Переведем в черно-белый формат avg=gray_image.mean() #Среднее значение пикселя ret, threshold_image = cv2.threshold(gray_image, avg, 255, 0) #Бинаризация по порогу #Рассчитаем хэш _hash="" for x in range(8): for y in range(8): val=threshold_image[x,y] if val==255: _hash=_hash+"1" else: _hash=_hash+"0" return _hash def CompareHash(hash1,hash2): l=len(hash1) i=0 count=0 while i<l: if hash1[i]!=hash2[i]: count=count+1 i=i+1 return count hash1=CalcImageHash("1.png") hash2=CalcImageHash("2.png") hash3=CalcImageHash("3.png") hash4=CalcImageHash("4.png") print(hash1) print(hash2) print(hash3) print(hash4) print(CompareHash(hash1, hash2)) print(CompareHash(hash1, hash3)) print(CompareHash(hash1, hash4)) print(CompareHash(hash2, hash3)) print(CompareHash(hash2, hash4)) print(CompareHash(hash3, hash4)) minHash = CompareHash(hash1, hash2) img = 1 if(CompareHash(hash1, hash3) < minHash): minHash = CompareHash(hash1, hash3) if(CompareHash(hash1, hash4) < minHash): minHash = CompareHash(hash1, hash4) if(CompareHash(hash2, hash3) < minHash): minHash = CompareHash(hash2, hash3) img = 2 if(CompareHash(hash2, hash4) < minHash): minHash = CompareHash(hash2, hash4) img = 2 if(CompareHash(hash3, hash4) < minHash): minHash = CompareHash(hash3, hash4) img = 3 print(img, minHash)