AI办公自动化:相似照片批量智能删除

部落人有文化 2024-07-14 13:36:51

电脑中有大量手机照片,要批量删除其中相似度高的,首先得有一个分析照片相似度的算法和模型。CLIP(Contrastive Language-Image Pre-Training)模型是由OpenAI在2021年发布的一种多模态预训练神经网络,旨在通过对比学习方法将图像和文本进行联合训练,从而实现对图像和文本之间关联性的理解和匹配。CLIP模型的核心思想是通过对比学习(Contrastive Learning)来学习大量的图像和对应的文本描述,形成一个能够理解两者之间关联的通用模型。具体来说,CLIP采用了两个独立的编码器:一个用于处理文本,另一个用于处理图像。这两个编码器分别提取文本和图像特征,并基于比对学习让模型学习到文本-图像的匹配关系。

在deepseek中输入提示词:

一步步思考,写一个Python脚本,完成批量删除相似照片的功能,具体步骤如下:

打开文件夹:F:\dpic;

读取文件夹里面所有的图像文件;

用CLIP提取文件夹所有图像的特征,然后计算它们的余弦相似度;

相似高的2张以上图片,只保留其中一个最佳图片,删除其余图片;

设置相似度阈值> 0.87

注意:每一步都要输出信息到屏幕上

源代码:

import os

from PIL import Image

import numpy as np

import torch

from transformers import CLIPProcessor, CLIPModel

from sklearn.metrics.pairwise import cosine_similarity

# 定义文件夹路径

folder_path = "F:\\dpic"

# 读取文件夹中的所有图像文件

image_files = [f for f in os.listdir(folder_path) if f.endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif', '.JPG'))]

print(f"Found {len(image_files)} image files.")

# 加载CLIP模型和处理器

model_name = "openai/clip-vit-base-patch32"

model = CLIPModel.from_pretrained(model_name)

processor = CLIPProcessor.from_pretrained(model_name)

# 加载图像并提取特征

images = []

for file in image_files:

img_path = os.path.join(folder_path, file)

try:

img = Image.open(img_path)

inputs = processor(images=img, return_tensors="pt")

with torch.no_grad():

image_features = model.get_image_features(**inputs)

images.append((file, image_features.cpu().numpy().squeeze()))

except Exception as e:

print(f"Error loading image {file}: {e}")

print(f"Loaded {len(images)} images.")

# 提取图像特征

features = [img[1] for img in images]

# 计算余弦相似度

similarity_matrix = cosine_similarity(features)

# 删除相似度高的多余图像

to_delete = set()

for i in range(len(similarity_matrix)):

for j in range(i + 1, len(similarity_matrix)):

if similarity_matrix[i][j] > 0.87: # 设置相似度阈值

to_delete.add(images[j][0])

for file in to_delete:

file_path = os.path.join(folder_path, file)

try:

os.remove(file_path)

print(f"Deleted {file}")

except Exception as e:

print(f"Error deleting {file}: {e}")

print("Done.")

程序运行结果:

if similarity_matrix[i][j] > 0.87: # 这里设置相似度阈值,如果觉得不满意,可以调高或者调低。

0 阅读:0

部落人有文化

简介:感谢大家的关注