Python如何操作目标检测数据集xml
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇"Python如何操作目标检测数据集xml"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看
千家信息网最后更新 2025年01月19日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安全错误
数据库的锁怎样保障安全
把服务器放在空调外机位置
锦江区杨飞软件开发工作室
软件开发架构平台期末考试
小学 网络安全为人民活动
数据库两表相减
实况数据库咋下载
梅州通信软件开发销售厂
泸州雷鸣网络技术有限公司
少儿视频软件开发
电信公司网络安全责任制度
php包含了数据库吗
服务器游戏怎么配置
重庆数据库招聘
对网络技术的了解与认识
计算机和网络安全上机测试
nhl数据库
有关网络安全的的课件
仪器控制软件开发平台
网络安全终极奥义
chembridge数据库
山东轩辰网络技术有限公司
仙桃高新园区软件开发
正睿的服务器怎么样
重庆外贸行业进口软件代理服务器
亿万网络技术有限公司
网络安全等级保护的定级依据
美国对网络安全的研究现状
检察机关网络安全讲话
兆行网络技术
国泰安怎么批量拉数据库