欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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)

​功能介绍

  1. 可以删除同级目录下的重复图片
  2. 或者将重复图片重命名进行特殊标记
  3. 保存所有不重复图片到指定文件夹下
  4. 打印重复图片数量以及不重复图片数量

使用说明

  1. 示例代码数据结构:structure文件夹下有若干子文件夹,每个子文件夹下有若干待检测的图片,remove_duplicated.py以及config.py与structure文件夹同级
  2. 在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公开密钥认证或是数字签名等用途。

此外

  • 原创内容转载请注明出处
  • 代码托管到我的GitHub可以点点 star
  • 关注我的 CSDN博客
  • 关注我的哔哩哔哩
  • 关注公众号:CV伴读社

python去除文件夹同级目录下的重复图片

本文地址:https://blog.csdn.net/xiaoxuebajie/article/details/107113252