数据预处理篇---获取xml的标签数量,提取某个标签的图片名字及对应的图片

数据预处理篇---获取xml的标签数量,提取某个标签的图片名字及对应的图片

数据集的格式

在这里插入图片描述

  • 图片标签
    在这里插入图片描述
  • 类别标签
    在这里插入图片描述
  • xml 数据结构
    在这里插入图片描述

获取xml的标签数量

# -- coding: utf-8 --

import pickle
import os
import glob
from os import listdir, getcwd
from os.path import join
import xml.etree.ElementTree as ET  # 导入xml模块


test_dir = 'D:/dataset/second_project/error_dataset2021_1/ImageSets/Main/test.txt'
train_dir = 'D:/dataset/second_project/error_dataset2021_1/ImageSets/Main/train.txt'
trainval_dir = 'D:/dataset/second_project/error_dataset2021_1/ImageSets/Main/trainval.txt'

xml_dir = 'D:/dataset/second_project/error_dataset2021_1/Annotations/'  # 保存xml文件的路径

xml_index = open(train_dir).readlines()
print(len(xml_index))  # 计算测试集的xml文件的数量

nums = 0
c = 0
for A in range(len(xml_index)):
    index = xml_index[A].strip('\n')  # 截取xml文件名
    # print(xml_dir+index+'.xml')
    xml_file = open(xml_dir + index + '.xml', encoding="utf-8")
    xml = ET.parse(xml_file)

    for name in xml.iter('object'):
        nums = nums + 1
        if name.find("name").text == 'Bicycle':  # 按标注的标签名进行统计
            c = c + 1
            xml_file.close()


print("标签为Bicycle的个数:", c)
print("\n总标签数目:", nums)

注意:变量不要发生重复,以免出现问题

结果如下:
在这里插入图片描述

提取某个标签的名字

# -- coding: utf-8 --

import xml.etree.ElementTree as ET  # 导入xml模块
import pickle
import os
import glob
from os import listdir, getcwd
from os.path import join

test_dir = 'D:/dataset/second_project/error_dataset2021_1/ImageSets/Main/test.txt'
train_dir = 'D:/dataset/second_project/error_dataset2021_1/ImageSets/Main/train.txt'
trainval_dir = 'D:/dataset/second_project/error_dataset2021_1/ImageSets/Main/trainval.txt'

xml_dir = 'D:/dataset/second_project/error_dataset2021_1/Annotations/'  # 保存xml文件的路径

xml_index = open(train_dir).readlines()
print(len(xml_index))  # 计算测试集的xml文件的数量

save_file = "D:/dataset/second_project/data_augmentation"
if not os.path.exists(save_file):
    os.makedirs(save_file)

fsave = open(save_file + "/img_path.txt", "w", encoding="utf-8")\


for i in range(len(xml_index)):
    index = xml_index[i].strip('\n')  # 截取xml文件名
    # print(xml_dir+index+'.xml')
    xml_file = open(xml_dir + index + '.xml', encoding="utf-8")
    xml = ET.parse(xml_file)
    for path in xml.iter('annotation'):
        for name in path.iter('object'):
            if name.find("name").text == 'mailbox':
                img_path = path.find('path').text.split("\\")[-1]
                fsave.write(img_path + '\n')

print("extract label success")

结果如下:保存在img_path.txt的文件中
在这里插入图片描述

找的对应名字下的原始图片

# -- coding: utf-8 --
import os, shutil


path = 'D:/dataset/second_project/error_dataset2021/JPEGImages/'
img_path = os.listdir(path)
print(img_path)

save_img_path = 'D:/dataset/second_project/data_augmentation/mail_box_img/'
if not os.path.exists(save_img_path):
    os.makedirs(save_img_path)

save_file = 'D:/dataset/second_project/data_augmentation/img_path.txt'

f = open(save_file, "r")
while True:
    line = f.readline()
    # xml_path = 'D:/dataset/third_project/data_augmentation/' + line
    for img in img_path:
        if img.split('.')[0] == line.split('.')[0]:
            print(img)
            shutil.copy(path + img, save_img_path + img)
    if not line:
        break

生成新的文件夹,保存相对应的图片
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心惠天意

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值