本地以图搜图怎么做?用 CLIP 给图库排序并检查相似图片

用同一 CLIP 模型生成查询图和图库向量,归一化后输出 Top-5,并按人工相关图核对排序。

本地以图搜图可以把查询图和图库转换成同一种向量,再按余弦相似度排序。CLIP 适合试验语义相近的图片检索,例如在自有图库中寻找同类主体;它不是精确文件去重,也不保证找到同一商品型号。

先建一个能人工看完的小图库

创建 gallery 文件夹,放入约十张自有 JPG 或 PNG,包含你希望命中的图片和几个明显不同的对照。另存 query.jpg。先记录至少一张你认为应排在前面的图,结果出来后有据可比。

本地以图搜图怎么做?用 CLIP 给图库排序并检查相似图片

python -m pip install torch "transformers==4.57.1" pillow

在 Python 3.11 环境使用 CPU,首次从 Hugging Face 获取模型。本文未运行 CLIP 图库推理,没有展示实测排序;代码采用 4.57.1 的 get_image_features 接口。

归一化后按相似度排序

保存为 search_images.py,运行 python search_images.py。

from pathlib import Path
from PIL import Image
import torch
from transformers import CLIPModel, CLIPProcessor

name = "openai/clip-vit-base-patch32"
model = CLIPModel.from_pretrained(name).eval()
processor = CLIPProcessor.from_pretrained(name)
def features(path):
    with Image.open(path) as source:
        image = source.convert("RGB")
    inputs = processor(images=image, return_tensors="pt")
    with torch.inference_mode():
        vector = model.get_image_features(**inputs)
    return vector / vector.norm(dim=-1, keepdim=True).clamp_min(1e-12)

files = sorted(p for p in Path("gallery").iterdir()
               if p.suffix.lower() in {".jpg", ".jpeg", ".png"})
if not files:
    raise ValueError("gallery has no supported images")
query = features("query.jpg")
database = torch.cat([features(p) for p in files], dim=0)
scores = (query @ database.T)[0]
order = torch.argsort(scores, descending=True)[:5]
for i in order.tolist():
    print(files[i].name, round(float(scores[i]), 4))

每个向量先除以自身长度,再做点积,得到余弦相似度。查询图和图库必须使用同一模型与处理器;不能把不同模型的向量混在一张索引里。

怎样判断检索对当前任务有用

人工查看前五名,记录预先指定的相关图是否出现,以及无关图被排进来的原因。再换一个查询主体测试,避免只对一张图片满意。相似度是排序依据,不是“有多少概率属于同一物品”。

若商品外形很相近,语义检索可能把不同型号排在一起。需要核对商品身份时增加型号、包装文字或人工复核,不以分数差直接判定同款。

从示例扩展到大图库

本例逐张计算,适合小规模验证。图库增大时先缓存向量,并保存模型名称、处理器配置和图片文件对应关系;更新模型后重建相关向量。加载失败的图片应显式记录,不能从数量统计中悄悄消失。

想查像素相同或仅压缩变化的重复图片,选择文件哈希或感知哈希;想按文字选场景类别,则需要文本候选输入。二者都不等于这里的图像查询图库排序。

资料与适用范围

本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30695.html

赞 (0)
AI小管家的头像AI小管家
训练图片对比度怎么增强?用 OpenCV CLAHE 比较处理前后细节
上一篇 8小时前
图像去噪怎么做?用 OpenCV 非局部均值保留原图并检查边缘
下一篇 8小时前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部