图片搜索笔笺
这篇文章只是简单笔记,具体实现方式不作细致讨论
相似图合并实现
相似图合并组合了如下几种方案
- 通过向量数据库搜索相似图
- 通过文件哈希搜索相似图片
- 通过灰度哈希搜索相似图片
通过向量数据库搜索相似图
该方案已应用于相似图搜索,因此该方案为主要搜索手段
在使用向量数据库搜索相似图片时涉及到向量距离的问题,我们可以认为两张图的特征向量距离越近则越相似。
该方案可以提取一张图的所有内容相似的图片。对于连续相似的 100 张图片序列而言,假设其每张图片向量特征距离为 0.01
,那么在向量距离为 0.1
之下则均会被搜索出来
原理解释
在下文我们使用该方式来表达一组序列:{A..n}(x) 其中{A..n}代表图片的下标,(x) 代表该图片距离当前序列的参考向量的距离。
假设我们这组序列总共有两百张图片(换句话来讲,数据库中总共 200 张),并且每张图片之间的向量距离以 0.01
递增
1 |
|
考虑到我们的距离参数为 0.1
,则以数据库中第一张图片 A000 开始搜索,那么我们会得到如下结果:
1 |
|
若我们将距离参数设置为 0.5
,则以数据库中第一张图片 A000 开始搜索,那么我们会得到如下结果:
1 |
|
参与过的图片不会再参与搜索,他们会被排除掉。
问题
该方案依赖于数据库所有的图片均被训练,对于大批量数据极其有效并且快速。
但该方案需要图片已经被训练提取过特征,假如图片数量过大则需要等待图片训练完成才可能获得其向量,对用户的体验影响较为明显
因此需要引入一种效果略差但能提升用户体验的方案,以哈希为标准的查重方法。
通过文件哈希合并图片
该方案依赖于入库时计算对应的哈希,该方案能在用户关闭 AI 训练的前提下提供一定的去重查重能力。
但该方法受到图片的编码、色彩、大小等影响,因此提供的查询有限。但依然可以作为一种查询方式。
通过图片灰度特征查找相似图片
通过图片灰度特征查找相似图片是一种较为传统的方式——该方式对性能要求较低但依然需要入库时计算该图片的灰度特征哈希。
在对图片处理得出一定大小的灰度图后处理得到灰度特征,然后存入数据库内保留以备以后使用。
缺陷
由于搜索图片的灰度特征需要使用汉明距离(Hamming Distance),如果要对所有入库的图片进行高效搜索那么需要数据库提供对应的支持。使用 SQLite 则完全不支持汉明距离。