前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AI办公自动化:相似照片批量智能删除

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

作者头像
AIGC部落
发布2024-07-22 18:09:36
630
发布2024-07-22 18:09:36
举报
文章被收录于专栏:Dance with GenAI

电脑中有大量手机照片,要批量删除其中相似度高的,首先得有一个分析照片相似度的算法和模型。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: # 这里设置相似度阈值,如果觉得不满意,可以调高或者调低。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Dance with GenAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档