Можно ли сравнить Фото по Фото а не по размеру файла?



  • Здравствуйте,
    Есть папка в которой небольшое колличество фотографий к примеру

    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)
    

Log in to reply
 

  • 6
  • 11
  • 4
  • 15
  • 8
  • 6
  • 4
  • 1