首先我自己的数据集格式为filename lable xmin ymin xmax ymax,如果一张图片有两个bbox,是另起一行的,按前面这个格式,不是接着写在同一行的。

方法1 通过别的模板转换

VOC数据集的xml格式为:

<annotation><folder>VOC2007</folder><filename>000002.jpg</filename><size><width>335</width><height>500</height><depth>3</depth></size><object><name>cat</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox><xmin>139</xmin><ymin>200</ymin><xmax>207</xmax><ymax>301</ymax></bndbox></object>
</annotation>

所以我们把它当作模板然后修改成自己的数据集。注意object 可能不止一个。

转换代码:

"""conver to xml"""
import copy
from lxml.etree import Element, SubElement, tostring, ElementTree
import cv2# 修改为你自己的路径
template_file = 'anno.xml'
target_dir = 'Annotations/'
image_dir = 'train/'  # 图片文件夹
train_file = 'train.txt'  # 存储了图片信息的txt文件with open(train_file) as f:trainfiles = f.readlines()  # 标注数据 格式(filename label x_min y_min x_max y_max)file_names = []for line in trainfiles:trainFile = line.split()file_name = trainFile[0]# 如果没有重复,则顺利进行。这给的数据集一张图片的多个框没有写在一起,我艹。if file_name not in file_names:file_names.append(file_name)lable = trainFile[1]xmin = trainFile[2]ymin = trainFile[3]xmax = trainFile[4]ymax = trainFile[5]tree = ElementTree()tree.parse(template_file)root = tree.getroot()# filenameroot.find('filename').text = file_name# sizesz = root.find('size')im = cv2.imread(image_dir + file_name)sz.find('height').text = str(im.shape[0])sz.find('width').text = str(im.shape[1])sz.find('depth').text = str(im.shape[2])# object 因为我的数据集都只有一个框obj = root.find('object')obj.find('name').text = lablebb = obj.find('bndbox')bb.find('xmin').text = xminbb.find('ymin').text = yminbb.find('xmax').text = xmaxbb.find('ymax').text = ymax# 如果重复,则需要添加object框else:lable = trainFile[1]xmin = trainFile[2]ymin = trainFile[3]xmax = trainFile[4]ymax = trainFile[5]obj_ori = root.find('object')obj = copy.deepcopy(obj_ori)  # 注意这里深拷贝obj.find('name').text = lablebb = obj.find('bndbox')bb.find('xmin').text = xminbb.find('ymin').text = yminbb.find('xmax').text = xmaxbb.find('ymax').text = ymaxroot.append(obj)xml_file = file_name.replace('jpg', 'xml')tree.write(target_dir + xml_file, encoding='utf-8')

方法2 直接生成

def save_xml(image_name, bbox, save_dir='./VOC2007/Annotations', width=1609, height=500, channel=3):''':param image_name:图片名:param bbox:对应的bbox:param save_dir::param width:这个是图片的宽度,博主使用的数据集是固定的大小的,所以设置默认:param height:这个是图片的高度,博主使用的数据集是固定的大小的,所以设置默认:param channel:这个是图片的通道,博主使用的数据集是固定的大小的,所以设置默认:return:'''from lxml.etree import Element, SubElement, tostringfrom xml.dom.minidom import parseStringnode_root = Element('annotation')node_folder = SubElement(node_root, 'folder')node_folder.text = 'JPEGImages'node_filename = SubElement(node_root, 'filename')node_filename.text = image_namenode_size = SubElement(node_root, 'size')node_width = SubElement(node_size, 'width')node_width.text = '%s' % widthnode_height = SubElement(node_size, 'height')node_height.text = '%s' % heightnode_depth = SubElement(node_size, 'depth')node_depth.text = '%s' % channelfor x, y, w, h in bbox:left, top, right, bottom = x, y, x + w, y + hnode_object = SubElement(node_root, 'object')node_name = SubElement(node_object, 'name')node_name.text = 'car'node_difficult = SubElement(node_object, 'difficult')node_difficult.text = '0'node_bndbox = SubElement(node_object, 'bndbox')node_xmin = SubElement(node_bndbox, 'xmin')node_xmin.text = '%s' % leftnode_ymin = SubElement(node_bndbox, 'ymin')node_ymin.text = '%s' % topnode_xmax = SubElement(node_bndbox, 'xmax')node_xmax.text = '%s' % rightnode_ymax = SubElement(node_bndbox, 'ymax')node_ymax.text = '%s' % bottomxml = tostring(node_root, pretty_print=True)  dom = parseString(xml)save_xml = os.path.join(save_dir, image_name.replace('jpg', 'xml'))with open(save_xml, 'wb') as f:f.write(xml)returndef change2xml(label_dict={}):for image in label_dict.keys():image_name = os.path.split(image)[-1]bbox = label_dict.get(image, [])save_xml(image_name, bbox)returnif __name__ == '__main__':# step 2# make_voc_dir()# step 3# label_dict = utils.read_csv(csv_path=r'./train_b.csv',#                             pre_dir=r'/home/matthew/dataset')# rename_image(label_dict)# step 3label_dict = utils.read_csv(csv_path=r'./rename_train_b.csv',pre_dir=r'/home/matthew/VOC2007/JPEGImages')change2xml(label_dict)

参考链接:

  1. 一次将自己的数据集制作成PASCAL VOC格式的惨痛经历
  2. 转换

如何将自己的数据转换为Pascal voc2017数据集标注格式相关推荐

  1. wps excel 中将一行多列数据转换为一行两列的格式 的方法函数

    在使用wps excel 整理表格时,我的表格一行有多列内容,我想把这些数据转换为一行两列的格式,在百度上查了很多方法,都很不好用,最后在论坛中看到的方法,借鉴了一下,各位可以参考. 非常重要的一点: ...

  2. .mat,.txt,.csv 数据转换为weka中的arff格式及matlab和Weka之间相互转换格式

    在RUSBoost和SMOTEBoost中提供了csv转换为arff格式的方法,详见CSVtoARFF.m http://www.mathworks.com/matlabcentral/fileexc ...

  3. 如何将自己采集到的点云数据转换为与Kitti数据集相同的格式?(.pcd文件转换为.bin文件)

    Autonomous vehicle 杂谈_14 一. pcd文件要求: 要求.pcd文件不光只有x,y,z的坐标数据,同时也需要有indensity属性. 一. 功能包配置 pip install ...

  4. PASCAL VOC数据集标注要求

    PASCAL 视觉对象类挑战 2007,2011 (VOC2007, 2011) 注释指南 本文档复制了 VOC2007 数据集中用于注释图像的指南. 一, 关于标签内容和方式的指南 标注什么 定义类 ...

  5. TXT文件转Pascal voc数据集XML格式标注文件

    TXT的文件格式为 wmin,hmin,wmax,hmax ​ 最终转换出来的效果为 ​ 代码: from xml.dom import minidomimport cv2txt_dirtory=r' ...

  6. 【数据预处理】CoCo数据集标注文件.json转yolov5标注文件.txt格式

    下载pycocotools包(用于解析coco.json文件) 直接运行即可 from pycocotools.coco import COCO import numpy as np import t ...

  7. ArcGIS中将shp数据转换为CAD

    ArcGIS中将shp数据转换为CAD并带有 标注要素 请问 arcgis里面 shp文件导出 为CAD 加一个 图中的编号 属性 字段 请问 arcgis里面 shp文件导出 为CAD 加一个 图中 ...

  8. Objects365数据简介及数据转换为XML格式

    Objects365数据简介及数据转换为XML格式 注:Obj365和COCO数据集转换为xml格式以及转为yolo的txt格式,xml数据统计处理更改见GitHub:https://github.c ...

  9. R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据、计算最佳λ、变换后构建模型

    R语言Box-Cox变换实战(Box-Cox Transformation):将非正态分布数据转换为正态分布数据.计算最佳λ.变换后构建模型 目录

最新文章

  1. IC基础知识(1)集成电路(IC)简介
  2. 告别beta版-Google Daydream SDK 1.0正式版发布并支持Unity原生开发
  3. lsnrctl 与 tnsnames.ora 的联系
  4. mysql表内增加一个字段并赋值
  5. SQLite API
  6. Mind Master Pro 8.0——安装教程
  7. WPF的binding
  8. 数据库杂谈(八)——查询优化
  9. centos 没有nmtui命令_Linux free 命令
  10. python day15
  11. 截取视频段转换为GIF动图
  12. 帆软报表-通过代码来创建一个模板文件
  13. 图像形状特征(八)--SC形状上下文
  14. Ubuntu配置Wine教程
  15. 富士施乐Fuji Xerox DocuPrint CP215 w 驱动
  16. 普歌-码上鸿鹄团队:在Nuxt(vue)渲染模板中使用mock.js随机生成数据
  17. 卡牌游戏算法原理、代码
  18. hellow windows
  19. 北京天宇联科技有限责任公司-T语言中html页面keys键值的设置
  20. 打造云原生大型分布式监控系统(三): Thanos 部署与实践

热门文章

  1. firebug js版
  2. 输入姓名打印年龄练习
  3. iOS核心动画Core Animation(一)
  4. factory service provide自定义服务
  5. 深入理解数组与指针——原因在于”退化“
  6. python极简代码实现快速排序
  7. UITableView 自带编辑删除 自己定义button
  8. 计算几何之凸包_卷包裹算法
  9. ZOJ-2008-Invitation Cards(dijkstra)
  10. undefined reference to `main`