pythonの画像指紋(一意性)

1876 ワード

紹介する
各画像には一意の指紋があります.まるで人間の指紋がこの人を識別できるようだ.
画像の指紋は何ですか?(画像ハッシュ)
  • は、画像指紋を用いて類似画像の検出を行う.この技術は、通常、「感知画像hash」または単純な「画像hash」と呼ばれる.
  • ピクチャhashは、1枚のピクチャのコンテンツを検出し、検出されたコンテンツに基づいてピクチャに一意の値を確立するプロセスである.
  • は、例えば、入力として1枚のピクチャを与え、hash関数を適用し、ピクチャの視覚に基づいて1つのピクチャhashを計算する.似たような画像にも似たようなhash値があるはずです.
  • では、「差分Hash」または簡単なDHashアルゴリズムを使用して画像指紋を計算します.簡単に言えば、DHashアルゴリズムは2つの隣接画素間の差に着目している.そして,このような差に基づいてhash値が確立される.

  • なぜmd 5,sha-1などのアルゴリズムを使用しないのですか?
    実装では暗号化hashアルゴリズムを使用することはできません.暗号化hashアルゴリズムの本質により,入力ファイルにおける非常にわずかな差も大きなhash値をもたらす.実際には,類似の入力に類似のhash出力値があることを望んでいる.
    関連ライブラリのインストール
    pip install Pillow
    pip install ImageHash
    pip install numpy
    pip install scipy
    

    使用開始
    画像の指紋を取得
    from PIL import Image
    import imagehash
    
    #      
    img1 = Image.open('images/demo4.jpg')
    res = imagehash.dhash(img1) # 4f999cc90979704c
    

    ハミング距離の計算
    ハミング距離は、ハッシュ内の異なるビット数を計算するために使用される.したがって,ハッシュには10ビットの異なるピクチャよりも1つの異なる2枚のピクチャだけが自然に似ている.
    すべてのコード
    from PIL import Image
    
    import imagehash
    
    
    def img(img_path):
        """
            (  :4f999cc90979704c)
        :param img_path:     
        :return: 
        """
        img1 = Image.open(img_path)
        res = imagehash.dhash(img1)
        return res
    
    
    def hamm_img(res1, res2):
        """
            ,           ,  0         ,  10  ,       
        :param res1:
        :param res2:
        :return:
        """
        str1 = str(res1)  #     str
        str2 = str(res2)
        num = 0  #         
        for i in range(len(str1)):
            if str1[i] != str2[i]:
                num += 1
        return num
    
    
    if __name__ == '__main__':
        img_path1 = 'images/demo1.jpg'
        img_path2 = 'images/demo2.jpg'
        res = hamm_img(img(img_path1), img(img_path2))
        print('     :', res)