(修改深度学习VOC数据集)Python批量处理xml内容、生成新的xml文件及转移对应图片(附源码)

背景

博主在网上找到已经标注好的数据集,想去除掉不想标注的类同时去除没有用的图片文件,方便自己训练。代码注释都写清楚了

注意几点

  • 要先装lxml,运气好输入pip install lxml就能成功~
  • 最好都写绝对路径,然后路径结尾必须要有\\
  • nameRule是命名用的 具体看代码
  • 这些代码可以拓展很多东西,满足自己的处理需求~
    例如:如果不想转移文件 直接删除文件 用remove函数 具体看其他博客吧~
 

from lxml import etree 
import os

#初始化
global num
isMove = False
#--------重命名文件的格式--------#
nameRule = '%06d'# 06表示000001,000002等命名排序
#--------源文件绝对路径(结尾必须是'\\')--------#
xmldir = "D:\deeplearnITERM\DEL_imge_xml\VOCdevkit\VOC2007\Annotations\\" 
imgsdir = "D:\deeplearnITERM\DEL_imge_xml\VOCdevkit\VOC2007\JPEGImages\\"
#--------目标文件绝对路径(结尾必须是'\\')--------#
outXMLdir ="D:\deeplearnITERM\DEL_imge_xml\hbC_x_Is_DATA\Annotations\\" 
outImagedir = "D:\deeplearnITERM\DEL_imge_xml\hbC_x_Is_DATA\JPEGImages\\"


# def createFile(oripath):
#     xml_list = os.listdir(oripath)
#     for i in xml_list:  # 遍历所有xml文件
#         fullPath = oripath + i  # 完整路径
#         remove_(fullPath)  # 将完整路径作为参数传入调用该函数
 
 
def move_ImageAndXML():  # path 是原来xml文件的完整路径
    num = 1
    labName = ['aeroplane','bicycle','bird','boat','bottle','chair','diningtable','pottedplant','sofa','train','tvmonitor']
    xml_list = os.listdir(xmldir)
    for iA_XML in xml_list:  # 遍历所有xml文件
        fullPath = xmldir + iA_XML  # 完整路径
        tree = etree.parse(fullPath)
        root = tree.getroot()   # 获取根节点
        for object in root.findall('object'):   # 找到根节点下所有“object”节点
            name = str(object.find('name').text)  # 找到object节点下name子节点的值(字符串)
            for deletName in labName:
                if name == deletName:
                    root.remove(object)
        
        #已经找到对应文件开始处理
        if root.findall('object'):  # 找到为object的tag
            # 给新的xml重命名
            s = nameRule % num  # 06表示000001,000002等命名排序
            xml_name = str(s) +'.xml'
            print(num)
            num = num + 1

            #通过xml截取图片文件名
            image_Name = (iA_XML.split(".")[0])
            image_Name = image_Name + ".jpg"

            #写入新的xml文件 并移到对应路径
            new_ann_path = os.path.join(r'%s%s' %(outXMLdir, xml_name))
            tree.write(new_ann_path,encoding='utf-8') #将tree写入新的文件

            #改名
            old_Imagedir = os.path.join(os.path.abspath(imgsdir), image_Name)
            new_Imagedir = os.path.join(os.path.abspath(outImagedir), str(s)+".jpg")
            os.rename(old_Imagedir,new_Imagedir)

if __name__ == '__main__':
    move_ImageAndXML()
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值