VisDrone数据集txt格式标注更改xml
txt格式,每行从左往右分别<bbox_left>,<bbox_top>,<bbox_width>,<bbox_height>,<score>,<object_category>,<truncation>,<occlusion> 分类:
pedestrian (1), people (2), bicycle (3), car (4), van (5),truck (6), tricycle (7), awning-tricycle (8), bus (9), motor (10), others (11)
代码,从一个文件夹中读取jpg文件,另一个文件夹读标注,汇总成xml格式
# -*- coding:utf-8 -*-
import os
import xml.etree.ElementTree as ET
import cv2
# 增加换行符
def __indent(elem, level=0):
i = "
" + level * " "
if len(elem):
if not elem.text or not elem.text.strip():
elem.text = i + " "
if not elem.tail or not elem.tail.strip():
elem.tail = i
for elem in elem:
__indent(elem, level + 1)
if not elem.tail or not elem.tail.strip():
elem.tail = i
else:
if level and (not elem.tail or not elem.tail.strip()):
elem.tail = i
def __makeXML(shape, realName, f, savePath = "E:/dataset/UAV_for_counting/"):
root = ET.Element(annotation) # 创建节点
tree = ET.ElementTree(root) # 创建文档
filename = ET.Element(filename)
filename.text = txt_path
root.append(filename)
# 图像尺寸
size = ET.Element(size)
width = ET.Element(width)
height = ET.Element(height)
depth = ET.Element(depth)
width.text = str(shape[0])
height.text = str(shape[1])
depth.text = 3
size.append(width)
size.append(height)
size.append(depth)
root.append(size)
# 逐行读txt
while True:
line = f.readline()
if line:
# object节点
object = ET.Element(object)
name = ET.Element(name)
pose = ET.Element(pose)
difficult = ET.Element(Difficult)
bndbox = ET.Element(bndbox)
xmin = ET.Element(xmin)
ymin = ET.Element(ymin)
xmax = ET.Element(xmax)
ymax = ET.Element(ymax)
truncated = ET.Element(truncated)
s = line.split(,)
if s[5] == 1 or s[5] == 2:
name.text = pedestrian
elif s[5] == 4 or s[5] == 5 or s[5] == 6 or s[5] == 9:
name.text = vehicle
else:
continue
xmin.text = s[0]
ymin.text = s[1]
xmax.text = str(int(s[0]) + int(s[2]))
ymax.text = str(int(s[1]) + int(s[3]))
pose.text = Unspecified
difficult.text = 0
truncated.text = s[6]
bndbox.append(xmin)
bndbox.append(ymin)
bndbox.append(xmax)
bndbox.append(ymax)
object.append(name)
object.append(pose)
object.append(difficult)
object.append(truncated)
object.append(bndbox)
root.append(object)
else:
break
__indent(root) # 增加换行符
tree.write(savePath + realName + ".xml", encoding=utf-8, xml_declaration=False)
img_path = "E:/dataset/UAV_for_counting/"
txt_path = "E:/数据集/VisDrone2019-DET-train/annotations/"
filelist = os.listdir(img_path)
for i, filename in enumerate(filelist):
if filename.endswith(".jpg"):
img = cv2.imread(img_path + filename)
size = img.shape
realName = filename.split(".")[0]
f = open(txt_path + realName + ".txt", encoding=utf-8)
__makeXML(size, realName, f)
f.close()
print(i, "
")
