Python 生成VOC格式的标签实例

所属分类: 脚本专栏 / python 阅读数: 391
收藏 0 赞 0 分享

常用目标检测模型基本都是读取的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)

以上这篇Python 生成VOC格式的标签实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

使用Python写一个量化股票提醒系统

这篇文章主要介绍了小白用Python写了一个股票提醒系统,迷你版量化系统,完美的实现了实时提醒功能,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Python绘制的二项分布概率图示例

这篇文章主要介绍了Python绘制的二项分布概率图,涉及Python基于numpy、math的数值运算及matplotlib图形绘制相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Python Learning 列表的更多操作及示例代码

这篇文章主要介绍了Python Learning-列表的更多操作,需要的朋友可以参考下
收藏 0 赞 0 分享

关于python列表增加元素的三种操作方法

这篇文章主要介绍了关于python列表增加元素的几种操作方法,主要有insert方法,extend方法和append方法,每种方法给大家介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

如何在python字符串中输入纯粹的{}

这篇文章主要介绍了如何在python字符串中输入纯粹的{}以及python字符串连接的三种方法,需要的朋友可以参考下
收藏 0 赞 0 分享

浅谈Django的缓存机制

这篇文章主要介绍了浅谈Django的缓存机制,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Django 限制用户访问频率的中间件的实现

这篇文章主要介绍了Django 限制用户访问频率的中间件的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

示例详解Python3 or Python2 两者之间的差异

这篇文章主要介绍了Python3 or Python2?示例详解两者之间的差异,在本文中给大家介绍的非常详细,需要的朋友可以参考下
收藏 0 赞 0 分享

Python wxpython模块响应鼠标拖动事件操作示例

这篇文章主要介绍了Python wxpython模块响应鼠标拖动事件操作,结合实例形式分析了Python使用wxpython模块创建窗口、绑定事件及相应鼠标事件相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

使用Python实现一个栈判断括号是否平衡

栈(Stack)在计算机领域是一个被广泛应用的集合,栈是线性集合,访问都严格地限制在一段,叫做顶(top)。这篇文章主要介绍了使用Python实现一个栈判断括号是否平衡,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多