Pytorch比较图片间的相似度。

import torch
from torchvision import models, transforms
from PIL import Image
import numpy as np

# 加载预训练的模型
model = models.resnet50(pretrained=True)
model.eval()

# 图片预处理和特征提取函数
preprocess = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])

# 存储特征向量的字典
feature_vectors = {}

# 遍历每个文件夹
for folder_name in folder_names:
    folder_path = 'path_to_folder/' + folder_name  # 文件夹路径
    images = os.listdir(folder_path)  # 文件夹下的所有图片文件名
    for image_name in images:
        # 读取图片并进行预处理
        image_path = os.path.join(folder_path, image_name)
        img = Image.open(image_path)
        img = preprocess(img)
        img = img.unsqueeze(0)

        # 提取特征向量
        with torch.no_grad():
            features = model(img)
        
        # 存储特征向量
        feature_vectors[image_name] = features.numpy()

# 计算图片之间的相似度
similar_images = []
for image1_name in feature_vectors:
    for image2_name in feature_vectors:
        if image1_name != image2_name:
            # 计算相似度得分,可以使用不同的度量方法
            similarity_score = cosine_similarity(feature_vectors[image1_name], feature_vectors[image2_name])
            # 如果得分高于阈值,将相似的图片添加到列表中
            if similarity_score > threshold:
                similar_images.append((image1_name, image2_name, similarity_score))

# 根据相似度得分排序
similar_images.sort(key=lambda x: x[2], reverse=True)

# 输出相似度高的图片对
for image_pair in similar_images:
    image1_name, image2_name, similarity_score = image_pair
    print(f"Image pair: {image1_name}, {image2_name}, Similarity score: {similarity_score}")
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值