1.问题描述
在整理数据集的时候,由于部分数据集来自网络,其一张图片标注了多个类别,而我们只想使用其中的某些类别,如果不去管那些无效类别,在训练时可能会出错。这就需要我们读取xml文件,根据指定的name名称,删除掉无效的object标注。
2.例子
我想要删除掉 name为花盆这个关键字的标注 的 object。
我想要的结果
3.解决
相关注释代码如下
import os
import xml.etree.ElementTree as ET
import tqdm
def del_delete_eq_1(xml_path):
#从xml文件中读取,使用getroot()获取根节点,得到的是一个Element对象
tree = ET.parse(xml_path)
root = tree.getroot()
for object in root.findall('object'):
deleted = str(object.find('name').text)
if (deleted in ['花盆', '骨头']):
root.remove(object)
tree.write(xml_path)
def main():
root_dir = "/home/cheng/git/yolov5_v2/data/test/"
xml_path_list = [os.path.join(root_dir, x) for x in os.listdir(root_dir)]
# 使用tqdm显示进程
for xml in tqdm.tqdm(xml_path_list):
del_delete_eq_1(xml)
if __name__ == '__main__':
main()