xml转matlab目标检测,将Cityscape转换为PASACAL VOC格式的目标检测数据集
1、将Cityscape中的json格式的标注转换为.txt格式的标签
# convert cityscape dataset to pascal voc format dataset
# 1. convert every cityscape image label '.json' to '.txt'
import json
import os
from os import listdir, getcwd
from os.path import join
import os.path
rootdir = 'D:\dataset\cityscapes\leftImg8bit\\train\\zurich' # 写自己存放图片的数据地址
def position(pos):
# 该函数用来找出xmin,ymin,xmax,ymax即bbox包围框
x = []
y = []
nums = len(pos)
for i in range(nums):
x.append(pos[i][0])
y.append(pos[i][1])
x_max = max(x)
x_min = min(x)
y_max = max(y)
y_min = min(y)
# print(x_max,y_max,x_min,y_min)
b = (float(x_min), float(y_min), float(x_max), float(y_max))
# print(b)
return b
# pascal voc 标准格式
# < xmin > 174 < / xmin >
# < ymin > 101 < / ymin >
# < xmax > 349 < / xmax >
# < ymax > 351 < / ymax >
def convert(size, box):
# 该函数将xmin,ymin,xmax,ymax转为x,y,w,h中心点坐标和宽高
dw = 1. / (size[0])
dh = 1. / (size[1])
x = (box[0] + box[1]) / 2.0 - 1
y = (box[2] + box[3]) / 2.0 - 1
w = box[1] - box[0]
h = box[3] - box[2]
x = x * dw
w = w * dw
y = y * dh
h = h * dh
print((x, y, w, h))
return (x, y, w, h)
def convert_annotation(image_id):
# load_f = open("/home/ubuntu/PycharmProjects/city2pascal/source/train/tubingen/%s_gtFine_polygons.json" % (image_id), 'r') # 导入json标签的地址
load_f = open("D:\dataset\cityscapes\gtFine\\train\\zurich\%s_gtFine_polygons.json" % (image_id), 'r') # 导入json标签的地址
load_dict = json.load(load_f)
out_file = open('D:\dataset\cityscapes\gtFine\\train\\zurich\%s_leftImg8bit.txt' % (image_id), 'w') # 输出标签的地址
# keys=tuple(load_dict.keys())
w = load_dict['imgWidth'] # 原图的宽,用于归一化
h = load_dict['imgHeight']
# print(h)
objects = load_dict['objects']
nums = len(objects)
# print(nums)
# object_key=tuple(objects.keys()
cls_id = ''
for i in range(0, nums):
labels = objects[i]['label']
# print(i)
if (labels in ['person', 'rider']):
# print(labels)
pos = objects[i]['polygon']
bb = position(pos)
# bb = convert((w, h), b)
cls_id = 'pedestrian' # 我这里把行人和骑自行车的人都设为类别pedestrian
out_file.write(cls_id + " " + " ".join([str(a) for a in bb]) + '\n')
# print(type(pos))
elif (labels in ['car', 'truck', 'bus', 'caravan', 'trailer']):
# print(labels)
pos = objects[i]['polygon']
bb = position(pos)
# bb = convert((w, h), b)
cls_id = 'car' # 我这里把各种类型的车都设为类别car
out_file.write(cls_id + " " + " ".join([str(a) for a in bb]) + '\n')
if cls_id == '':
print('no label json:',"%s_gtFine_polygons.json" % (image_id))
def image_id(rootdir):
a = []
for parent, dirnames, filenames in os.walk(rootdir):
for filename in filenames:
# print(filename)
filename = filename[:-16]
# filename = filename.strip('_leftImg8bit.png')
a.append(filename)
return a
if __name__ == '__main__':
names = image_id(rootdir)
for image_id in names:
print(image_id)
convert_annotation(image_id)
2、将.txt转换为.xml的标签
#! /usr/bin/python
# -*- coding:UTF-8 -*-
# Convert cityscape dataset to pascal voc format dataset
# 2. convert '.txt' to '.xml'
import os, sys
import glob
from PIL import Image
# VEDAI 图像存储位置
src_img_dir = "D:\dataset\cityscapes\leftImg8bit\\train\\zurich\\"
# VEDAI 图像的 ground truth 的 txt 文件存放位置
src_txt_dir = "D:\dataset\cityscapes\gtFine\\train\\zurich\\"
src_xml_dir = "D:\dataset\cityscapes\gtFine\\train\\zurich\\"
img_Lists = glob.glob(src_img_dir + '/*.png')
img_basenames = [] # e.g. 100.jpg
for item in img_Lists:
img_basenames.append(os.path.basename(item))
img_names = [] # e.g. 100
for item in img_basenames:
temp1, temp2 = os.path.splitext(item)
img_names.append(temp1)
for img in img_names:
im = Image.open((src_img_dir + img + '.png'))
width, height = im.size
# open the crospronding txt file
gt = open(src_txt_dir + '/' + img + '.txt').read().splitlines()
# gt = open(src_txt_dir + '/gt_' + img + '.txt').read().splitlines()
# write in xml file
# os.mknod(src_xml_dir + '/' + img + '.xml')
xml_file = open((src_xml_dir + '/' + img + '.xml'), 'w')
xml_file.write('\n')
xml_file.write(' CITYSCAPE\n')
xml_file.write(' ' + str(img) + '.png' + '\n')
xml_file.write(' \n')
xml_file.write(' ' + str(width) + '\n')
xml_file.write(' ' + str(height) + '\n')
xml_file.write(' 3\n')
xml_file.write(' \n')
# write the region of image on xml file
for img_each_label in gt:
spt = img_each_label.split(' ') # 这里如果txt里面是以逗号‘,’隔开的,那么就改为spt = img_each_label.split(',')。
xml_file.write(' \n')
xml_file.write(' ' + str(spt[0]) + '\n')
xml_file.write(' Unspecified\n')
xml_file.write(' 0\n')
xml_file.write(' 0\n')
xml_file.write(' \n')
xml_file.write(' ' + str(spt[1]) + '\n')
xml_file.write(' ' + str(spt[2]) + '\n')
xml_file.write(' ' + str(spt[3]) + '\n')
xml_file.write(' ' + str(spt[4]) + '\n')
xml_file.write(' \n')
xml_file.write(' \n')
xml_file.write('')
承接Matlab、Python和C++的编程,机器学习、计算机视觉的理论实现及辅导,本科和硕士的均可,咸鱼交易,专业回答请走知乎,详谈请联系QQ号757160542,非诚勿扰。
本文同步分享在 博客“于小勇”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
xml转matlab目标检测,将Cityscape转换为PASACAL VOC格式的目标检测数据集相关推荐
- 【目标检测】YOLOv5/6/7/8格式标注目标框可视化
YOLOv5/6/7/8格式标注目标框可视化 修改图片.标注.输出路径: # -- coding: utf-8 -- import os import shutil from pathlib impo ...
- 后缀为labels的文件_txt标注文档转换为labelmg VOC格式的xml标注文件
清理库存8~ #! /usr/bin/python # -*- coding:UTF-8 -*- import os, sys import glob from PIL import Image ## ...
- 【工具代码】COCO检测预测结果转换为txt标准格式
import jsonlines = json.load(open("instances_minival2014.json", 'r')) pic2id = {}for pic i ...
- 【目标检测实验系列】使用yolov3 spp训练西工大遥感数据集NWPU VHR-10(包括如何将NWPU VHR-10转为VOC格式和yolov3 spp实验调试的详细步骤,且附上训练完的权重文件)
目录 1. 文章主要内容 2. 西工大数据集转换为VOC格式数据集 2.1 VOC数据集结构 2.2 西工大数据集 2.3 转换格式 2.3.1 构建与VOC类似的数据集文件结构(文件夹名可以自定义) ...
- [数据集][目标检测]篮球数据集VOC格式7398张
数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):739 ...
- VCT空间数据交换格式数据的检测方法研究
摘要:国土资源信大量的是空间地理信息,由于现买中各GIS系统存储.管理GIS数据的格式各不相同,空间数据交换标准是实现GIS数据共享的必要途径,国土资源部制定了VCT矢量数据交换格式来实现各类国土资源 ...
- python解析xml+得到pascal voc xml格式用于目标检测+美化xml
1.python解析xml img_path='./data/001.tif'xml_path='./xml/001.xml'img=cv2.imread(img_path)# cv2.imshow( ...
- matlab ssd检测,基于SSD神经网络的违章停车车辆实时检测方法与流程
本发明属于图像识别和计算机视觉技术领域,尤其涉及一种停车车辆的检测方法,可用于城市环境中对违章停车车辆的检测. 背景技术: 随着现代社会经济的快速发展和城市化的普及,汽车作为一种重要的交通工具,其数量 ...
- 人工智能目标检测总结(五)——深入理解one-stage目标检测模型
本文翻译自One-shot object detection,原作者保留版权. 作为计算机视觉领域的一项重要任务,目标检测是要找到一张图片里的感兴趣物体: 这比图像分类任务更高级,因为分类只需要告诉图 ...
- 将数据集Voc .xml转为Matlab 的GroundTruth
学生在pytorch做的模型,尝试在matlab导入,存在问题. 主要是yolo检测框输出一个1*25200*(cls+6),这个25200展平数据无法处理,所以需要在maltab中进行重新训练. 遇 ...
最新文章
- 【区间DP】释放囚犯
- Ubuntu安装Nginx+PHP+Memcache+Mysql指导手册
- getRequestDispatcher()与sendRedirect()的区别
- 1185 城市名排序
- DNS服务(4)Slave DNS及高级特性
- 恒源云(Gpushare)_FAIR CVPR2022新作DVT是个啥?
- python 抢购小米_利用Python+selenium实现小米商城抢购代码
- java 购物系统代码_java购物系统源代码
- m6000查看端口状态_中兴ZXR10 M6000维护最常用命令精要
- navicat的注册码
- Unable to access jar file xxx.jar问题的解决
- 老徐和阿珍的故事:缓存穿透、缓存击穿、缓存雪崩、缓存热点,傻傻分不清楚
- 使用jib发布代码流程
- 南京大学计算机专业拂晓,南京大学2020年计算机学科录取推免生222人,全部来自211高校...
- Centos7 安装RTL8723BE无线网卡驱动
- 【论文阅读】ICLR 2022: Scene Transformer: A unified architecture for predicting future trajectories of ...
- 【群晖秘籍】如何在群晖中安装Redis数据库,群晖如何使用套件安装Redis(已解决无法访问问题)!
- 计算幻术之路(二):增强现实的现实
- 欧洲杯上那让人惊叹的vivo蓝
- simulink电力电子仿真(1)单相半波可控整流电路