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格式的目标检测数据集相关推荐

  1. 【目标检测】YOLOv5/6/7/8格式标注目标框可视化

    YOLOv5/6/7/8格式标注目标框可视化 修改图片.标注.输出路径: # -- coding: utf-8 -- import os import shutil from pathlib impo ...

  2. 后缀为labels的文件_txt标注文档转换为labelmg VOC格式的xml标注文件

    清理库存8~ #! /usr/bin/python # -*- coding:UTF-8 -*- import os, sys import glob from PIL import Image ## ...

  3. 【工具代码】COCO检测预测结果转换为txt标准格式

    import jsonlines = json.load(open("instances_minival2014.json", 'r')) pic2id = {}for pic i ...

  4. 【目标检测实验系列】使用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类似的数据集文件结构(文件夹名可以自定义) ...

  5. [数据集][目标检测]篮球数据集VOC格式7398张

    数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):7398 标注数量(xml文件个数):739 ...

  6. VCT空间数据交换格式数据的检测方法研究

    摘要:国土资源信大量的是空间地理信息,由于现买中各GIS系统存储.管理GIS数据的格式各不相同,空间数据交换标准是实现GIS数据共享的必要途径,国土资源部制定了VCT矢量数据交换格式来实现各类国土资源 ...

  7. 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( ...

  8. matlab ssd检测,基于SSD神经网络的违章停车车辆实时检测方法与流程

    本发明属于图像识别和计算机视觉技术领域,尤其涉及一种停车车辆的检测方法,可用于城市环境中对违章停车车辆的检测. 背景技术: 随着现代社会经济的快速发展和城市化的普及,汽车作为一种重要的交通工具,其数量 ...

  9. 人工智能目标检测总结(五)——深入理解one-stage目标检测模型

    本文翻译自One-shot object detection,原作者保留版权. 作为计算机视觉领域的一项重要任务,目标检测是要找到一张图片里的感兴趣物体: 这比图像分类任务更高级,因为分类只需要告诉图 ...

  10. 将数据集Voc .xml转为Matlab 的GroundTruth

    学生在pytorch做的模型,尝试在matlab导入,存在问题. 主要是yolo检测框输出一个1*25200*(cls+6),这个25200展平数据无法处理,所以需要在maltab中进行重新训练. 遇 ...

最新文章

  1. 【区间DP】释放囚犯
  2. Ubuntu安装Nginx+PHP+Memcache+Mysql指导手册
  3. getRequestDispatcher()与sendRedirect()的区别
  4. 1185 城市名排序
  5. DNS服务(4)Slave DNS及高级特性
  6. 恒源云(Gpushare)_FAIR CVPR2022新作DVT是个啥?
  7. python 抢购小米_利用Python+selenium实现小米商城抢购代码
  8. java 购物系统代码_java购物系统源代码
  9. m6000查看端口状态_中兴ZXR10 M6000维护最常用命令精要
  10. navicat的注册码
  11. Unable to access jar file xxx.jar问题的解决
  12. 老徐和阿珍的故事:缓存穿透、缓存击穿、缓存雪崩、缓存热点,傻傻分不清楚
  13. 使用jib发布代码流程
  14. 南京大学计算机专业拂晓,南京大学2020年计算机学科录取推免生222人,全部来自211高校...
  15. Centos7 安装RTL8723BE无线网卡驱动
  16. 【论文阅读】ICLR 2022: Scene Transformer: A unified architecture for predicting future trajectories of ...
  17. 【群晖秘籍】如何在群晖中安装Redis数据库,群晖如何使用套件安装Redis(已解决无法访问问题)!
  18. 计算幻术之路(二):增强现实的现实
  19. 欧洲杯上那让人惊叹的vivo蓝
  20. simulink电力电子仿真(1)单相半波可控整流电路

热门文章

  1. connect ETIMEDOUT
  2. 浏览器白屏原因思路分析
  3. chrome消除缓存的默认设置
  4. 调用restFul接口如何实现返回的数据编码格式为utf-8
  5. 在线caj免费转换Word格式
  6. 你不能访问此共享文件夹,因为你组织的安全策略的解决办法
  7. 王者荣耀android换ios,王者荣耀安卓转ios教程攻略
  8. 线性代数——向量的乘法计算
  9. 文件生成Md5值方法
  10. 开关电源中输出电容的ESR会影响负载的动态响应