【开源】基于DINOv3的以图搜图系统,告别手动翻图!AI帮你一秒找到相似图片
【开源】基于DINOv3的以图搜图系统,告别手动翻图!AI帮你一秒找到相似图片
《博主简介》
小伙伴们好,我是阿旭。
专注于计算机视觉领域,包括目标检测、图像分类、图像分割和目标跟踪等项目开发,提供模型对比实验、答疑辅导等。
《------往期经典推荐------》
二、机器学习实战专栏【链接】,已更新31期,欢迎关注,持续更新中~~
三、深度学习【Pytorch】专栏【链接】
四、【Stable Diffusion绘画系列】专栏【链接】
五、YOLOv8改进专栏【链接】,持续更新中~~
六、YOLO性能对比专栏【链接】,持续更新中~
《------正文------》
目录
引言
最近在研究刚出不久的DINOv3模型,基于它强大的特征提取能力,顺便做了一个基于DiNOv3的图像检索系统,能够基于给定图片搜索相似图片,也就是以图搜图的功能。代码已开源,感兴趣的小伙伴文末获取即可。实现界面如下:
核心原理
1. 什么是DiNOv3?
DiNOv3是Facebook(现Meta)推出的一个强大的视觉模型。它通过自监督学习,从海量图片中学习到了丰富的视觉特征。简单来说,它能把一张图片转换成一个数字向量,这个向量就代表了图片的"内容"和"含义"。
2. 特征提取:图片变数字
当我们把一张图片输入DiNOv3模型时,它会输出一个768维的向量。这个向量就像图片的"指纹":
- 相似的图片,它们的"指纹"很接近
- 不同的图片,"指纹"差距很大
核心代码示例:
class DINOv3Encoder:
"""DINOv3特征提取器"""
def __init__(self, model_name="PreModels/dinov3-vits16-pretrain-lvd1689m"):
"""初始化DINOv3模型"""
try:
logger.info(f"正在加载模型: {model_name}")
self.processor = AutoImageProcessor.from_pretrained(model_name)
self.model = AutoModel.from_pretrained(model_name, device_map="auto").eval()
self.device = self.model.device
logger.info(f"模型加载成功,设备: {self.device}")
except Exception as e:
logger.error(f"模型加载失败: {e}")
raise
@torch.inference_mode()
def encode(self, image):
"""提取图像特征向量"""
try:
# 确保图像是RGB格式
if image.mode != 'RGB':
image = image.convert('RGB')
inputs = self.processor(images=image, return_tensors="pt").to(self.device)
outputs = self.model(**inputs)
features = outputs.pooler_output[0].cpu().numpy()
return features
except Exception as e:
logger.error(f"特征提取失败: {e}")
raise
3. 相似度计算:如何判断两张图像不像?
有了特征向量,我们就可以计算两张图片的相似度了。最常用的方法是余弦相似度:
- 相似度 = 1:完全相同
- 相似度 = 0:完全不同
- 相似度 = 0.8:相似度80%
核心代码示例:
from sklearn.metrics.pairwise import cosine_similarity
# 计算查询图片和数据库图片的相似度
similarity = cosine_similarity([query_features], [db_features])[0][0]
整个流程就是:
- 提取查询图片的特征
- 提取数据库中所有图片的特征
- 计算它们之间的相似度
- 按相似度排序,返回最相似的图片
系统主要功能

这个图像检索系统虽然代码简洁,但功能非常实用:
1. 以图搜图
上传一张图片作为"查询图",系统会在你选择的文件夹中搜索所有图片,找出最相似的几张。不需要手动打标签,不需要复杂的配置,一键搜索!
2. 文件夹选择
点击按钮选择文件夹,系统会自动:
- 扫描文件夹中的所有图片
- 支持JPG、PNG、BMP等多种格式
- 自动过滤非图片文件
- 实时显示找到的图片数量
3. 相似度展示
每张搜索结果上方都会显示相似度百分比,让你清楚知道:
- 这张图和查询图有多像
- 是否符合你的预期
- 是否需要调整搜索参数
4. 灵活的搜索设置
- 显示数量:想看多少张结果?1到100张,默认12张
- 相似度阈值:只看相似度高的图片?设置阈值即可,默认0.1(10%)
5. 实时预览
选择图片和文件夹时,界面会实时显示预览,所见即所得,操作体验流畅。
技术栈
-
后端:
- Flask - Web框架
- PyTorch - 深度学习框架
- Transformers - Hugging Face模型库
- PIL/Pillow - 图像处理
- scikit-learn - 余弦相似度计算
- NumPy - 数值计算
-
前端:
- HTML5
- Tailwind CSS - 样式框架
- Font Awesome - 图标库
- JavaScript - 交互逻辑
应用场景
这个系统可以应用在很多地方:
- 个人相册管理:快速找到相似的照片
- 设计素材整理:找风格相似的图标、插画
- 电商图片检索:根据商品图找相似商品
- 版权检测:查找是否有重复或相似的图片
- 内容审核:识别违规图片的变种
项目亮点
- 开箱即用:无需复杂配置,安装依赖即可运行
- 代码简洁:前后端分离,结构清晰,易于理解
- 功能完整:从图片选择到结果展示,一应俱全
- 可扩展性强:可以轻松替换模型、添加新功能
总结
这个基于DiNOv3的图像检索系统,展示了AI如何让我们的生活更便捷。它不需要复杂的算法知识,不需要昂贵的硬件,却能解决实际的问题。
如果你对图像检索、深度学习感兴趣,不妨试试这个项目。代码开源,可以自由修改和扩展。以下方式获取即可。

好了,这篇文章就介绍到这里,喜欢的小伙伴感谢给点个赞和关注,更多精彩内容持续更新~~
关于本篇文章大家有任何建议或意见,欢迎在评论区留言交流!
更多推荐

所有评论(0)