【XML文件数据预处理】获取xml文件中所有标签名称及数量||提取某个特定标签的数量||生成包含某个标签的图片索引txt并复制图片到指定文件夹
目录
1.获取xml文件中所有标签名称及数量
2.提取某个特定标签的数量
3.生成包含某个标签的图片索引txt并复制图片到指定文件夹
1.获取xml文件中所有标签名称及数量
【需求】自己标注的数据集,想要看看有多少个标签,并且想知道每一个标签的数量,又或者是需在标注完成后需要对标注好的XML文件校验,比如看看标签名有没有写错,都有啥标签名。
代码如下,只需将【indir】字段换成自己需要统计的xml的文件夹,随后运行即可~~~
import os
from unicodedata import name
import xml.etree.ElementTree as ET
import globdef count_num(indir):# 提取xml文件列表os.chdir(indir)annotations = os.listdir('.')annotations = glob.glob(str(annotations) + '*.xml')dict = {} # 新建字典,用于存放各类标签名及其对应的数目for i, file in enumerate(annotations): # 遍历xml文件# actual parsingin_file = open(file, encoding='utf-8')tree = ET.parse(in_file)root = tree.getroot()# 遍历文件的所有标签for obj in root.iter('object'):name = obj.find('name').textif (name in dict.keys()):dict[name] += 1 # 如果标签不是第一次出现,则+1else:dict[name] = 1 # 如果标签是第一次出现,则将该标签名对应的value初始化为1KeyDict = sorted(dict)# 打印结果print("%d kind labels and %d labels in total" % (len(KeyDict), sum(dict.values())))print('labels:',KeyDict)print('\n')print("Label Name and it's number//各类标签的数量分别为:")for key in dict.keys():print(key + ': ' + str(dict[key]))print("\n总标签数目:{}个".format(sum(dict.values())))print('\t')print('检索完成!')indir = '/data_1T/xd1/VOCdevkit/VOC2012/Annotations/' # xml文件所在的目录count_num(indir) # 调用函数用来统计各类标签数目
2.提取某个特定标签数量
【需求】自己标注的数据集,想要看看某个标签有多少个,又或者是需在标注完成后需要对标注好的XML文件校验。
代码如下,需将下面几个字段进行修改,随后运行即可~~~
【test_dir】【train_dir】【trainval_dir】【xml_dir】【label】
# -- 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 = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/test.txt' #修改读取的test_dir文件路径
train_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/train.txt' #修改读取的train_dir文件路径
trainval_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/trainval.txt' #修改读取的trainval_dir文件路径xml_dir = '/data_1T/xd1/VOCdevkit/VOC2012/Annotations/' # 修改保存xml文件的路径read_xmlfile = trainval_dir #修改读取的xml文件索引路径xml_index = open(read_xmlfile).readlines()
print('【{}】中XML文件的数量为'.format(read_xmlfile),len(xml_index),'个') # 计算测试集的xml文件的数量label = 'metal' #修改检索指定标签的名字
nums = 0
c = 0
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 name in xml.iter('object'):nums = nums + 1if name.find("name").text == label: # 按标注的标签名进行统计c = c + 1xml_file.close()print('标签为',label,'的个数:', c)
print('\t')
print('检索完成!')
3.生成包含某个标签的图片索引txt并复制图片到指定文件夹
【需求】经过上述步骤,发现自己标注的数据集有个标签是标注错的,想自己看下是那个文件的错误,又或者自己想把它删除,下面代码可以解决!!!
代码如下,需将下面几个字段进行修改,随后运行即可~~~
【test_dir】【train_dir】【trainval_dir】【xml_dir】【label】
# -- coding: utf-8 --import xml.etree.ElementTree as ET # 导入xml模块
import ostest_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/test.txt' # 修改读取的test_dir文件路径
train_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/train.txt' # 修改读取的train_dir文件路径
trainval_dir = '/data_1T/xd1/VOCdevkit/VOC2012/ImageSets/Main/trainval.txt' # 修改读取的trainval_dir文件路径xml_dir = '/data_1T/xd1/VOCdevkit/VOC2012/Annotations/' # 修改保存xml文件的路径read_xmlfile = trainval_dir # 修改读取的xml文件索引路径xml_index = open(read_xmlfile).readlines()save_file = "./" # 保存包含指定标签的图片的索引文件txt
if not os.path.exists(save_file):os.makedirs(save_file)label = 'd' #修改检索指定标签的名字fsave = open(save_file + "/label【{}】_imgpath.txt".format(label), "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 == label:img_path = path.find('path').text.split("\\")[-1]fsave.write(img_path + '\n')print("开始生成包括label为【{}】的图片索引文件!".format(label))
print("生成结束//extract label success!")
生成的指定标签图片索引txt为:
【需求】那么,找到文件是什么,怎么把这些图片提取出来呢?
下面代码帮你解决!
代码如下,需将下面几个字段进行修改,随后运行即可复制图片到指定文件夹~~~
【path】【save_img_path】【read_label_file】
# -- coding: utf-8 --
import os, shutilpath = '/data_1T/xd1/VOCdevkit/VOC2012//JPEGImages/' #原数据集图片文件夹
img_path = os.listdir(path)save_img_path = './mail_box_img/' #存放提取出来的图片文件夹
if not os.path.exists(save_img_path):os.makedirs(save_img_path)read_label_file = './label【d】_imgpath.txt' #上一步生成的包含指定标签的txt索引文档f = open(read_label_file, "r")
while True:line = f.readline()for img in img_path:if img.split('.')[0] == line.split('.')[0]:print('包含指定label的图片为:',img)shutil.copy(path + img, save_img_path + img)if not line:break
生成的图片文件夹为:
好了,大功告成,完结撒花!
欢迎关注、点赞、收藏、评论、分享给好友,一起学习有趣的新知识!!!
【XML文件数据预处理】获取xml文件中所有标签名称及数量||提取某个特定标签的数量||生成包含某个标签的图片索引txt并复制图片到指定文件夹相关推荐
- js/jquery 获取本地文件的文件路劲 获取input框中type=‘file’ 中的文件路径(转载)...
原文:http://blog.csdn.net/niyingxunzong/article/details/16989947 js/jquery 获取本地文件的文件路劲 获取input框中type=' ...
- C#下把txt文件数据读进sql server中存储所遇到的乱码问题
txt文件的默认编码为ANSI,C#的默认读取数据便秘为UTF-8 这样的话就会造成文本数据格式的显示乱码问题 解决问题的方式有两种 一是改变txt文件的编码,改为UTF-8 另一种是在读入txt文件 ...
- xml的数据交换以及xml和json数据交换的比较
一.什么是Web Service ? Web Services 是有企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过internet来访问并使用这项在线服务 WebServicc ...
- java读取word表格中的数据_JAVA获取word表格中数据的方案
上一个项目的开发中需要实现从word中读取表格数据的功能,在JAVA社区搜索了很多资料,终于找到了两个相对最佳的方案,因为也得到了不少网友们的帮助,所以不敢独自享用,在此做一个分享. 两个方案分别是: ...
- 后台静默检测U盘并复制U盘内指定文件到电脑指定目录(U盘助手)
马上期末考试了,老师复习课讲得PPT是精简版的,老师说了之前上课的PPT可以给但是这个不可以,如果得到期末必过了.本想着把我这个自己花了3个多小时做的U盘助手在教室的电脑上运行着,下课我就可以得到PP ...
- 数据挖掘中数据预处理方法_数据挖掘中的数据预处理
数据挖掘中数据预处理方法 In the previous article, we have discussed the Data Exploration with which we have star ...
- 数据预处理常用技巧 | 数据分析中如何处理缺失值?(文末福利)
无论是数据分析.数据挖掘,还是机器学习,都离不开数据预处理这一重要步骤.没有高质量的数据,就没有高质量的分析结果.而数据不完整,也就是数据中包含缺失值,正是数据分析工作者最常见的问题之一.本文我们就来 ...
- python数据预处理的方法_python中常用的九种数据预处理方法
python中常用的九种预处理方法分享 本文总结的是我们大家在python中常见的数据预处理方法,以下通过sklearn的preprocessing模块来介绍; 1. 标准化(Standardizat ...
- python写xml文件 数据量特别大_python中大型xml文件的并行处理
我有几个正在解析的大型xml文件(提取一些数据子集并写入文件),但是每个文件都有很多文件和大量记录,所以我尝试并行化.在 首先,我有一个生成器从文件中提取记录(这很好):def reader(file ...
最新文章
- ConcurrentHashMap源码解析(2)
- 【Linux】linux下gzip的压缩/解压缩详解
- 【若依(ruoyi)】打开新的选项卡
- matlab人工势场法三维演示图,运动规划入门 | 5. 白话人工势场法,从原理到Matlab实现...
- Android开发之adb命令安装apk的问题
- php做通讯录界面,PHP 制作通讯录(三)
- AutoScaling 与函数计算结合,赋予更丰富的弹性能力
- ubuntu下如何设置apache的启动和重启
- java 牛生小牛_例题:大牛生小牛的问题解决方法
- 牛客网---Java题库(1~10)
- C++ 作用域与生命周期
- 少样本学习系列(四)【元学习与少样本深层理解】
- php loadclass,Laravel如何实现自动加载类
- 一个专注PR剪辑视频的PR模板网站PRmuban.com
- 让程序员崩溃的瞬间(非程序员勿入)
- 正大国际期货:为什么外盘期货顺势交易这么难
- 拥有数据报表模板,不再愁如何制作数据报表
- [go]深入学习Go总结
- HP Chromebox G1刷Coreboot Bios
- 极限学习机 Extreme Learning Machines 介绍