向量数据库如何进行图片相似存储查询?
网友回复
1、首先要解决图片向量化
可以使用用 OpenAI 的 CLIP 模型和 ViT 模型 openai/clip-vit-base-patch32行图片向量化比较相似性,你可以按照以下步骤进行:
准备图片和模型:
确保你有需要比较相似性的两张图片。下载并加载 CLIP-ViT 模型,如 openai/clip-vit-base-patch32。处理图片:
将图片调整为模型的输入大小和格式要求。通常 CLIP-ViT 模型的输入大小为 224x224 像素,并且可能需要归一化。生成图片向量:
使用 CLIP-ViT 模型将每张图片转换为其对应的向量表示。这一步骤需要使用模型的编程接口(例如 Python 中的 PyTorch 或 TensorFlow)来计算图片的特征向量。计算相似性:
使用生成的图片向量计算它们之间的相似性。通常可以使用余弦相似度或欧氏距离等指标来衡量向量之间的相似程度。这些步骤需要一定的编程知识和基础,特别是对模型的调用和图像处理。以下是一个简单的伪代码示例,演示了如何使用 Python 和 PyTorch 来加载 CLIP-ViT 模型并计算两张图片之间的相似性:
import torch from PIL import Image from torchvision import transforms from clip import CLIP # 加载模型 device = "cuda" if torch.cuda.is_available() else "cpu" model = CLIP(clip_model='ViT-B/32', jit=False).to(device) model.eval() # 图片处理和向量化 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), ]) def image_to_vector(image_path): image = Image.open(image_path) image = transform(image).unsqueeze(0).to(device) with torch.no_grad(): image_features = model.encode_image(image) return image_features # 例子:计算两张图片之间的相似性 image1_path = 'path/to/image1.jpg' image2_path = 'path/to/image2.jpg' vector1 = image_to_vector(image1_path) vector2 = image_to_vector(image2_path) # 计算余弦相似度 similarity = torch.cosine_similarity(vector1, vector2, dim=-1) print(f"Similarity between the images: {similarity.item()}")
在这个例子中,image_to_vector 函数加载图片、处理大小和格式,然后使用 CLIP-ViT 模型计算图像的特征向量。最后,使用余弦相似度计算这两个向量的相似性。
2、图片向量插入qdrant向量数据库并搜索
client...
点击查看剩余70%
不仅仅是图片,甚至视频、音频都能实现向量语义化检索,图像使用ImageNet-1k的validation数据集作为入库的图片数据集,将原始图片数据Embedding入库https://www.image-net.org/download.php
声音类的使用ESC-50数据集合 https://github.com/karolpiczak/ESC-50
图片embedding入库
import dashscope from dashscope import MultiModalEmbedding from dashvector import Client, Doc, DashVectorException dashscope.api_key = '{your-dashscope-api-key}' # 由于 ONE-PEACE 模型服务当前只支持 url 形式的图片、音频输入,因此用户需要将数据集提前上传到 # 公共网络存储(例如 oss/s3),并获取对应图片、音频的 url 列表。 # 该文件每行存储数据集单张图片的公共 url,与当前python脚本位于同目录下 IMAGENET1K_URLS_FILE_PATH = "imagenet1k-urls.txt" def index_image(): # 初始化 dashvector client client = Client( api_key='{your-dashvector-api-key}', endpoint='{your-dashvector-cluster-endpoint}' ) # 创建集合:指定集合名称和向量维度, ONE-PEACE 模型产生的向量统一为 1536 维 rsp = client.create('imagenet1k_val_embedding', 1536) if not rsp: raise DashVectorException(rsp.code, reason=rsp.message) # 调用 dashscope ONE-PEACE 模型生成图片 Embedding,并插入 dashvector collection = client.get('imagenet1k_val_embedding') with open(IMAGENET1K_URLS_FILE_PATH, 'r') as file: for i, line in enumerate(file): url = line.strip('\n') input = [{'image': url}] result = MultiModalEmbedding.call(model=MultiModalEmbedding.Models.multimodal_embedding_one_peace_v1, input=input, auto_truncation=True) if result.status_code != 200: print(f"ONE-PEACE failed to generate embedding of {url}, result: {result}") continue embedding = result.output["embedding"] collection.insert( Doc( ...
点击查看剩余70%
python如何压缩视频到指定的分辨率大小?
抖音微信小程序有压缩视频分辨率的api吗?
ollama中的deepseek有没有本地越狱提示词?
deepseek r1各个版本本地电脑部署运行的硬件要求是多少?
python如何分离视频中的音频与视频为mp4与wav文件?
python报错: ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the ‘ssl‘ module is comp
ps支持命令行执行脚本文件修改图片吗?
传统的个人博客站长如何应对ai搜索的流量锐减?
centos安装python3.10提示ssl模块不存在?
deepseek r1如何使用本地gpu运行?