去除同级目录下重复图片
代码实现
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
()
md5
.update
(img_array
)
if md5
.hexdigest
() not in temp
:
temp
.add
(md5
.hexdigest
())
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公开密钥认证或是数字签名等用途。
此外
原创内容转载请注明出处代码托管到我的GitHub可以点点 star关注我的 博客关注我的哔哩哔哩关注公众号:CV伴读社