Python如何操作目标检测数据集xml
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇"Python如何操作目标检测数据集xml"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2025年11月09日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安全错误
数据库的锁怎样保障安全
btok 代理服务器
浪潮英信服务器不开机
两个数据库同步数据接口的设计
初中生网络安全知识题库
南关区网络技术服务推荐咨询
长沙网络安全宣传创新
表格vba导入数据库
华为服务类网络技术工程师薪金
软件开发第一法则
影之刃服务器
河北昊宇网络技术有限公司
思科认证软件开发
商丘网络技术怎么样
网络安全密银不正确
潍坊企业软件开发服务
姜堰区直销网络技术价格表格
网络安全保障现场自查报告
airport无线网络技术
数据库登录表单
河南恒冰网络技术有限公司
网关服务器中勒索病毒
软件开发服务好
什么是服务器上的线
网络安全周校
网络安全芯片必要性
投票软件开发
网络安全与机器视觉的前景
数据库按时间戳查询
立足开放环境维护网络安全
网络技术岗位主管工作职责