去除同级目录下的重复图片

去除同级目录下重复图片

代码实现

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伴读社

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章