每张图片都有一个指纹。正如人的指纹可以识别人,图片的指纹能识别图片。
什么是图片指纹(图片哈希)?
用图片指纹进行相似图片的检测。这种技术通常被称为“感知图像hash”或是简单的“图片hash”。
图片hash是检测一张图片的内容然后根据检测的内容为图片建立一个唯一值的过程。
比如,给定一张图片作为输入,应用一个hash函数,然后基于图片的视觉计算出一个图片hash。相似的图片也应当有相似的hash值。
特别地,将会使用“差别Hash”或简单的DHash算法计算图片指纹。简单来说,DHash算法着眼于两个相邻像素之间的差值。然后,基于这样的差值,就建立起一个hash值了。
为什么不使用md5,sha-1等算法?
我们不能在实现中使用加密hash算法。由于加密hash算法的本质使然,输入文件中非常微小的差别也能造成差异极大的hash值。我们实际上希望相似的输入可以有相似的hash输出值。
需要的库有哪些?
三个主要的Python包:
• PIL/Pillow用于读取和载入图片
• ImageHash,包括DHash的实现• 以及NumPy/SciPy,ImageHash的依赖包
具体流程:
1)、为一个图片建立dhash指纹
img1_dhash=str(imagehash.dhash(query))
2)、计算汉明距离(Hamming distance)
汉明距离被用于计算一个哈希中的不同位数。因此,哈希中只有一位不同的两张图片自然比有10位不同的图片更相似。
总结
正如一个指纹可以识别一个人,图片哈希也能唯一的识别一张图片。
使用图片指纹的知识,我们仅使用图片哈希就能找到和识别图像具有相似内容的图片。