Python如何操作目标检测数据集xml
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇"Python如何操作目标检测数据集xml"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2026年11月02日Python如何操作目标检测数据集xml
这篇"Python如何操作目标检测数据集xml"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Python如何操作目标检测数据集xml"文章吧。
1. 根据xml文件统计目标种类以及数量
# -*- coding:utf-8 -*-#根据xml文件统计目标种类以及数量import osimport xml.etree.ElementTree as ETimport numpy as npnp.set_printoptions(suppress=True, threshold=np.nan)import matplotlibfrom PIL import Image def parse_obj(xml_path, filename): tree=ET.parse(xml_path+filename) objects=[] for obj in tree.findall('object'): obj_struct={} obj_struct['name']=obj.find('name').text objects.append(obj_struct) return objects def read_image(image_path, filename): im=Image.open(image_path+filename) W=im.size[0] H=im.size[1] area=W*H im_info=[W,H,area] return im_info if __name__ == '__main__': xml_path='/home/dlut/网络/make_database/数据集--合集/VOCdevkit/VOC2018/Annotations/' filenamess=os.listdir(xml_path) filenames=[] for name in filenamess: name=name.replace('.xml','') filenames.append(name) recs={} obs_shape={} classnames=[] num_objs={} obj_avg={} for i,name in enumerate(filenames): recs[name]=parse_obj(xml_path, name+ '.xml' ) for name in filenames: for object in recs[name]: if object['name'] not in num_objs.keys(): num_objs[object['name']]=1 else: num_objs[object['name']]+=1 if object['name'] not in classnames: classnames.append(object['name']) for name in classnames: print('{}:{}个'.format(name,num_objs[name])) print('信息统计算完毕。')2.根据xml文件统计目标的平均长度、宽度、面积以及每一个目标在原图中的占比
# -*- coding:utf-8 -*-#统计# 计算每一个目标在原图中的占比# 计算目标的平均长度、# 计算平均宽度,# 计算平均面积、# 计算目标平均占比import osimport xml.etree.ElementTree as ETimport numpy as np#np.set_printoptions(suppress=True, threshold=np.nan) #10,000,000np.set_printoptions(suppress=True, threshold=10000000) #10,000,000import matplotlibfrom PIL import Imagedef parse_obj(xml_path, filename): tree = ET.parse(xml_path + filename) objects = [] for obj in tree.findall('object'): obj_struct = {} obj_struct['name'] = obj.find('name').text bbox = obj.find('bndbox') obj_struct['bbox'] = [int(bbox.find('xmin').text), int(bbox.find('ymin').text), int(bbox.find('xmax').text), int(bbox.find('ymax').text)] objects.append(obj_struct) return objectsdef read_image(image_path, filename): im = Image.open(image_path + filename) W = im.size[0] H = im.size[1] area = W * H im_info = [W, H, area] return im_infoif __name__ == '__main__': image_path = '/home/dlut/网络/make_database/数据集--合集/VOCdevkit/VOC2018/JPEGImages/' xml_path = '/home/dlut/网络/make_database/数据集--合集/VOCdevkit/VOC2018/Annotations/' filenamess = os.listdir(xml_path) filenames = [] for name in filenamess: name = name.replace('.xml', '') filenames.append(name) print(filenames) recs = {} ims_info = {} obs_shape = {} classnames = [] num_objs={} obj_avg = {} for i, name in enumerate(filenames): print('正在处理 {}.xml '.format(name)) recs[name] = parse_obj(xml_path, name + '.xml') print('正在处理 {}.jpg '.format(name)) ims_info[name] = read_image(image_path, name + '.jpg') print('所有信息收集完毕。') print('正在处理信息......') for name in filenames: im_w = ims_info[name][0] im_h = ims_info[name][1] im_area = ims_info[name][2] for object in recs[name]: if object['name'] not in num_objs.keys(): num_objs[object['name']] = 1 else: num_objs[object['name']] += 1 #num_objs += 1 ob_w = object['bbox'][2] - object['bbox'][0] ob_h = object['bbox'][3] - object['bbox'][1] ob_area = ob_w * ob_h w_rate = ob_w / im_w h_rate = ob_h / im_h area_rate = ob_area / im_area if not object['name'] in obs_shape.keys(): obs_shape[object['name']] = ([[ob_w, ob_h, ob_area, w_rate, h_rate, area_rate]]) else: obs_shape[object['name']].append([ob_w, ob_h, ob_area, w_rate, h_rate, area_rate]) if object['name'] not in classnames: classnames.append(object['name']) # 求平均 for name in classnames: obj_avg[name] = (np.array(obs_shape[name]).sum(axis=0)) / num_objs[name] print('{}的情况如下:*******'.format(name)) print(' 目标平均W={}'.format(obj_avg[name][0])) print(' 目标平均H={}'.format(obj_avg[name][1])) print(' 目标平均area={}'.format(obj_avg[name][2])) print(' 目标平均与原图的W比例={}'.format(obj_avg[name][3])) print(' 目标平均与原图的H比例={}'.format(obj_avg[name][4])) print(' 目标平均原图面积占比={}'.format(obj_avg[name][5])) print('信息统计计算完毕。')3.修改xml文件中某个目标的名字为另一个名字
#修改xml文件中的目标的名字,import os, sysimport globfrom xml.etree import ElementTree as ET# 批量读取Annotations下的xml文件# per=ET.parse(r'C:UsersockhuangDesktopAnnotations00003.xml')xml_dir = r'/home/dlut/网络/make_database/数据集--合集/VOCdevkit/VOC2018/Annotations'xml_list = glob.glob(xml_dir + '/*.xml')for xml in xml_list: print(xml) per = ET.parse(xml) p = per.findall('/object') for oneper in p: # 找出person节点 child = oneper.getchildren()[0] # 找出person节点的子节点 if child.text == 'PinNormal': #需要修改的名字 child.text = 'normal bolt' #修改成什么名字 if child.text == 'PinDefect': #需要修改的名字 child.text = 'defect bolt-1' #修改成什么名字 per.write(xml) print(child.tag, ':', child.text)以上就是关于"Python如何操作目标检测数据集xml"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
目标
数据
名字
文件
统计
内容
原图
信息
网络
合集
检测
正在
节点
面积
处理
宽度
数量
文章
比例
知识
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云南咖啡
朗新科技与工业互联网
互联网科技开发公司
互联网科技金融
上海互联网科技有限公司
国外互联网科技网站
无锡溥仪互联网科技有限公司
互联网科技创新企业排名
移动互联网科技股
崇明区互联网教育科技诚信经营
宜昌元轩互联网科技有限公司
长沙茂晟互联网科技有限公司
合肥互联网科技公司公章图片
富国互联网金融科技混合基金
宇信科技在杭州互联网排第几
有人说阿里系是互联网科技企业
世界互联网科技成果奖
互联网的科技体现在哪里
中国主要互联网科技公司
前海云享互联网科技
小米移动互联网科技园
互联网科技名片
科技类互联网
互联网未来科技
互联网科技logo设计
广州善班互联网科技
深圳艾佳互联网科技
南博望互联网科技有限公司
2021互联网科技公司排名
互联网科技博主张洲