python去除文件夹同级目录下的重复图片
程序员文章站
2023-11-26 09:05:46
去除同级目录下重复图片代码实现class Config(object): data_dir = './structure/' save_dir = './save/' isRename = True isRemove = False isSave = Falseimport osimport hashlibimport numpy as npfrom PIL import Imagefrom config import Configdef remo...
去除同级目录下重复图片
代码实现
class Config(object):
data_dir = './structure/'
save_dir = './save/'
isRename = True
isRemove = False
isSave = False
import os
import hashlib
import numpy as np
from PIL import Image
from config import Config
def remove_duplicated(data_dir, save_dir, isRename, isRemove, isSave):
temp = set()
count = 0
classes = os.listdir(data_dir)
for cls in classes:
files = os.listdir(data_dir + cls)
for file in files:
file_path = data_dir + cls + '/' + file # 获得完整的路径
rename_path = data_dir + cls + '/' + 'duplicated' + file
img = Image.open(file_path) # 打开图片
img_array = np.array(img) # 转为数组
md5 = hashlib.md5() # 创建一个hash对象
md5.update(img_array) # 获得当前文件的md5码
if md5.hexdigest() not in temp: # 如果当前的md5码不在集合中
temp.add(md5.hexdigest()) # 则添加当前md5码到集合中
if isSave:
img.save(save_dir + file) # 并保存当前图片到保存文件的路径
else:
count += 1 # 否则删除图片数加一
if isRemove:
os.remove(file_path)
elif isRename:
os.rename(file_path, rename_path)
print('total duplicated images:', count)
print('total non duplicated images', len(temp))
if __name__ == '__main__':
opt = Config()
remove_duplicated(opt.data_dir, opt.save_dir, opt.isRename, opt.isRemove, opt.isSave)
功能介绍
- 可以删除同级目录下的重复图片
- 或者将重复图片重命名进行特殊标记
- 保存所有不重复图片到指定文件夹下
- 打印重复图片数量以及不重复图片数量
使用说明
- 示例代码数据结构:structure文件夹下有若干子文件夹,每个子文件夹下有若干待检测的图片,remove_duplicated.py以及config.py与structure文件夹同级
- 在config.py中配置参数
- 数据路径(例如"./structure/",右侧含"/")
- 保存路径(例如“./save/”,右侧含"/")
- 是否删除重复图片(isRemove=True,删除)
- 是否重命名重复图片(isRename=True,重命名)
- 是否保存所有不重复图片(isSave=True,保存 )
原理简介
主要是通过判断图片与图片的md5值是否相同来确定两张图片是否重复
知识推送
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
此外
本文地址:https://blog.csdn.net/xiaoxuebajie/article/details/107113252