python 批量删除重复图片和其xml文件
Posted stt-ac
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 批量删除重复图片和其xml文件相关的知识,希望对你有一定的参考价值。
最近有一批数据,大约10000多张图片吧,重复的很多,开始自己写了一个脚本删除重复图片和xml文件
开始之前发现一个同事的遗产里有此类型脚本,决定在此基础上修改,恩,菜鸡的开始之路,果然不能相信另一只菜鸡。
他的脚本就是一个冒泡双重循环下逐像素比较两张图片是否重复,真的慢到反正代码跑了一晚上10000多张图片还没遍历完
行吧,我更强不到那里去了,在他的基础上加了同时删除这张图片对应的xml文件,一张图片比较完就从list中删除,后来经人提醒开始不逐像素比较了
使用md5比较两张图片是否重复,但是这个双重循环遍历,不知道要跑到哪一年(我没有测试像素比较和md5比较哪个更快,反正在图片多的情况下都差不多相当于废物)
后来同事终于搜到网上大神写的脚本,秒秒钟跑完了,我太菜了,大神13年就写了这样的脚本,我果然是个废柴https://blog.csdn.net/frylion/article/details/8505385(大神脚本链接)
其原理是比较图片大小和md5结合来删除重复图片,比较大小已经完胜了我,现在的我才知道size = os.stat(real_path).st_size 这个size不是所谓的1920×1080图片的长宽
在图片比较上也不是那种傻循环,而是利用了字典此工具,大神就是大神啊
我自己的破脚本也粘一下吧,可以结合一下删除同名xml文件
# encoding: utf-8 """ @author: Shang Tongtong @contact: tongtong.shang@seetatech.com @time: 2019/9/4 下午1:34 @file: delete_same_pic_and_xml.py @desc: """ import os import cv2 import numpy as np import hashlib def get_token(pic): m1 = hashlib.md5() m1.update(pic) token = m1.hexdigest() return token def find_the_same_pic(cwd, xml): for path, d, filelist in os.walk(cwd): filelist = sorted(filelist) filelist = filelist[600:] for imgname in filelist: if imgname.endswith(‘jpg‘): oldname1 = os.path.join(path, imgname) print(‘the old pic : ‘, oldname1) filelist.remove(imgname) img1 = cv2.imread(oldname1) #img1 = cv2.resize(img1, (540, 960)) img1md5 = get_token(img1) for imgname1 in filelist: if imgname1.endswith(‘jpg‘): oldname2 = os.path.join(path, imgname1) # print(oldname2) img2 = cv2.imread(oldname2) print(oldname2) #img2 = cv2.resize(img2, (540, 960)) img2md5 = get_token(img2) # img = img2 - img1 # a = max(sum(sum(img))) result = (img1md5 == img2md5) #result = not np.any(difference) if result is True : print(‘the_same : ‘, oldname1, oldname2) rm_same_pic_and_xml(cwd, imgname1, xml) filelist.remove(imgname1) else: pass def rm_same_pic_and_xml(cwd, imgname, xml): xmlname = imgname.split(‘.‘)[0] + ‘.xml‘ pic_file = os.path.join(cwd, imgname) xml_file = os.path.join(xml, xmlname) os.remove(pic_file) os.remove(xml_file) if __name__ == ‘__main__‘: cwd = r‘/home/stt/data/tinghua/20190903/JPEGImages/‘ xml = r‘/home/stt/data/tinghua/20190903/Annotations/‘ find_the_same_pic(cwd, xml)
以上是关于python 批量删除重复图片和其xml文件的主要内容,如果未能解决你的问题,请参考以下文章