Wikipedia article on TinEye 表示Perceptual Hashing 将产生类似于 TinEye 的结果。他们引用this detailed description of the algorithm。但是TinEye refuses to comment.
Perceptual Hashing 方法的最大问题是,虽然它在识别相同图像时很有效(受歪斜、对比度变化等影响),但在识别同一物体的完全不同图像时却不是很好(例如正面汽车的侧面与汽车的侧面)。
TensorFlow 对深度神经网络有很好的支持,这可能会给您带来更好的结果。以下是关于如何在 TensorFlow 中使用深度神经网络来解决此问题的高级描述:
从预训练的 NN(例如 GoogLeNet)开始,或者在 ImageNet 等数据集上自行训练。现在我们得到了一张我们正在尝试识别的新图片。将其输入NN。看看神经网络中一个相当深的层的激活。这个激活向量就像图像的“指纹”。在您的数据库中找到指纹最接近的图片。如果它足够接近,它可能是同一个对象。
这种方法背后的直觉是,与感知散列不同,NN 正在构建图像的高级表示,包括识别边缘、形状和重要颜色。例如,一个苹果的指纹可能包含关于它的圆形、红色,甚至是它的小茎的信息。
您也可以尝试使用this 2012 paper on image retrieval 之类的方法,它使用一系列精选特征,例如 SIFT、区域色矩和对象轮廓片段。这可能需要更多的工作,而这并不是 TensorFlow 最擅长的。
更新
OP 提供了他的应用程序中的一对示例图像:
这是在这对相似的图像以及一对完全不同的图像上使用the demo on the pHash.org website 的结果。
比较 OP 提供的两张图片:
RADISH(径向散列):pHash determined your images are not similar with PCC = 0.518013
DCT 哈希:pHash determined your images are not similar with hamming distance = 32.000000.
Marr/墨西哥帽子小波:pHash determined your images are not similar with normalized hamming distance = 0.480903.
将他的一张图片与我机器中的一张随机图片进行比较:
RADISH(径向散列):pHash determined your images are not similar with PCC = 0.690619.
DCT 哈希:pHash determined your images are not similar with hamming distance = 27.000000.
Marr/墨西哥帽子小波:pHash determined your images are not similar with normalized hamming distance = 0.519097.
结论
我们必须测试更多图片才能真正了解。但到目前为止,pHash 似乎做得并不好。使用默认阈值,它不会认为相似的图像是相似的。而对于一种算法,它实际上认为完全随机的图像更相似。