生成VOC2007标注格式

Posted houjun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成VOC2007标注格式相关的知识,希望对你有一定的参考价值。

在目标检测、文本检测人脸检测的项目时候,会有一些标注给的是txt文件,而最经济实用的方法是,将txt标注文件转成VOC格式(XML),否则自己实现一个数据输入层。下面贴出转化的代码:

  1 import cv2
  2 from xml.dom.minidom import Document
  3 from collections import defaultdict
  4 
  5 src_img_dir = VOCdevkit/VOC2012/JPEGImages/
  6 src_txt_dir = train.txt
  7 src_xml_dir = xml/
  8 
  9 img_labels = defaultdict(list)
 10 f = open(src_txt_dir, r)
 11 for i in open(src_txt_dir):
 12     line = f.readline().strip(
)
 13     x = line.split(.jpg )
 14     key = x[0]
 15     value = x[1]
 16     img_labels[key].append(value)
 17 
 18 for key in img_labels:
 19     if(len(img_labels[key])>1):
 20         #print (key)
 21         #print (img_labels[key])
 22         pass
 23 
 24     doc = Document()
 25     annotation = doc.createElement(annotation)
 26     doc.appendChild(annotation)
 27 
 28     folder = doc.createElement(folder)
 29     folder.appendChild(doc.createTextNode(VOC2012))
 30     annotation.appendChild(folder)
 31 
 32     filename = doc.createElement(filename)
 33     filename.appendChild(doc.createTextNode(key+.jpg))
 34     annotation.appendChild(filename)
 35 
 36     source = doc.createElement(source)
 37     database = doc.createElement(database)
 38     database.appendChild(doc.createTextNode(Baidu))
 39     source.appendChild(database)
 40     annotation.appendChild(source)
 41 
 42     # obtain the size of the image
 43     imagefile = src_img_dir + key + .jpg
 44     img = cv2.imread(imagefile)
 45     imgSize = img.shape
 46 
 47     size = doc.createElement(size)
 48     width = doc.createElement(width)
 49     width.appendChild(doc.createTextNode(str(imgSize[1])))
 50     size.appendChild(width)
 51     height = doc.createElement(height)
 52     height.appendChild(doc.createTextNode(str(imgSize[0])))
 53     size.appendChild(height)
 54     depth = doc.createElement(depth)
 55     depth.appendChild(doc.createTextNode(str(imgSize[2])))
 56     size.appendChild(depth)
 57     annotation.appendChild(size)
 58 
 59     segmented = doc.createElement(segmented)
 60     segmented.appendChild(doc.createTextNode(str(0)))
 61     annotation.appendChild(segmented)
 62 
 63     # write the coordinates of the b-box
 64     for b_box in list(img_labels[key]):
 65         #print b_box
 66         x = b_box.split( )
 67         if(int(x[1])<0):
 68             x[1] = 0
 69         if (int(x[2]) < 0):
 70             x[2] = 0
 71 
 72         object = doc.createElement(object)
 73         name = doc.createElement(name)
 74         name.appendChild(doc.createTextNode(n + x[0]))
 75         #name.appendChild(doc.createTextNode(x[0]))
 76         object.appendChild(name)
 77 
 78         difficult = doc.createElement(difficult)
 79         difficult.appendChild(doc.createTextNode(0))
 80         object.appendChild(difficult)
 81 
 82         truncated = doc.createElement(truncated)
 83         truncated.appendChild(doc.createTextNode(0))
 84         object.appendChild(truncated)
 85 
 86         pose = doc.createElement(pose)
 87         pose.appendChild(doc.createTextNode(undefined))
 88         object.appendChild(pose)
 89 
 90         bndbox = doc.createElement(bndbox)
 91         xmin = doc.createElement(xmin)
 92         xmin.appendChild(doc.createTextNode(x[1]))
 93         bndbox.appendChild(xmin)
 94         object.appendChild(bndbox)
 95         ymin = doc.createElement(ymin)
 96         ymin.appendChild(doc.createTextNode(x[2]))
 97         bndbox.appendChild(ymin)
 98         xmax = doc.createElement(xmax)
 99         xmax.appendChild(doc.createTextNode(x[3]))
100         bndbox.appendChild(xmax)
101         ymax = doc.createElement(ymax)
102         ymax.appendChild(doc.createTextNode(x[4]))
103         bndbox.appendChild(ymax)
104         annotation.appendChild(object)
105 
106     with open(src_xml_dir + key + .xml, wb) as f:
107         f.write(doc.toprettyxml(indent=	, encoding=utf-8))

 

以上是关于生成VOC2007标注格式的主要内容,如果未能解决你的问题,请参考以下文章

使用Python将DOTA数据集的格式转换成VOC2007数据集的格式

使用Python将DOTA数据集的格式转换成VOC2007数据集的的格式

使用Python将NWPU VHR-10数据集的格式转换成VOC2007数据集的格式

使用Python将NWPU VHR-10数据集的格式转换成VOC2007数据集的的格式

labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

使用labelImg制作自己的数据集(VOC2007格式)用于Faster-RCNN训练