网络编程
位置:首页>> 网络编程>> Python编程>> Python 生成VOC格式的标签实例

Python 生成VOC格式的标签实例

作者:疯狂的小猪oO  发布时间:2021-09-09 04:39:07 

标签:Python,VOC,标签

常用目标检测模型基本都是读取的PASCAL VOC格式的标签,下面代码用于生成VOC格式的代码,根据需要修改即可:


from lxml import etree, objectify

def gen_txt(filename, h, w, c):
 E = objectify.ElementMaker(annotate=False)
 anno_tree = E.annotation(
   E.folder('VOC_OPEN_IMAGE'),
   E.filename(filename),
   E.source(
     E.database('The VOC2007 Database'),
     E.annotation('PASCAL VOC2007'),
     E.image('flickr'),
     E.flickrid("341012865")
   ),
   E.size(
     E.width(w),
     E.height(h),
     E.depth(c)
   ),
   E.segmented(0),
   E.object(
     E.name('1'),
     E.pose('left'),
     E.truncated('1'),
     E.difficult('0'),
     E.bndbox(
       E.xmin('0'),
       E.ymin('0'),
       E.xmax('0'),
       E.ymax('0')
     )
   ),
 )
 etree.ElementTree(anno_tree).write('ann/'+filename[:-4]+".xml", pretty_print=True)

补充知识: python对PASCAL VOC标注数据进行统计

用于统计训练数据中的类别,以及所有目标的个数:


# coding:utf-8
import xml.etree.cElementTree as ET
import os
from collections import Counter
import shutil

# Counter({'towCounter({'tower': 3074, 'windpower': 2014, 'thermalpower': 689, 'hydropower': 261, 'transformer': 225})
# total_num: 6263

def count(pathdir,despath):
category = []
path = pathdir + '/XML/'
for index,xml in enumerate(os.listdir(path)):
# print(str(index) + ' xml: '+ xml)
root = ET.parse(os.path.join(path, xml))
objects = root.findall('object')

# ==================select images which has a special object=============
for obj in objects:
 obj_label = obj.find('name').text
 if obj_label == 'transformer':
 print(xml)
 imgfile = pathdir + 'JPEG/' + xml.replace('xml', 'jpg')
 img_despath = despath + xml.replace('xml', 'jpg')
 # if not os.path.exists(img_despath):
 shutil.copyfile(imgfile, img_despath)

# ==================select images which has a special object=============

category += [ob.find('name').text for ob in objects]
print(Counter(category))
total_num = sum([value for key, value in Counter(category).items()])
print('total_num:',total_num)

if __name__ == '__main__':
# pathdirs = list(set(os.listdir('./')) ^ set(['tools','count.py']))
# print(pathdirs)
# for pathdir in pathdirs:
pathdir = '/summer/Desktop/power_traindata/'
despath = '/transformer/'
count(pathdir,despath)

来源:https://blog.csdn.net/u014657795/article/details/81154731

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com