labelme转VOC2007格式
labelme转VOC2007格式labelme转VOC2007格式labelme转VOC2007格式
运行labelme2voc.py
文件需要 图片和json文件在同一文件夹下面
cmd 打开
输入
python labelme2voc.py
得到
labelme2voc.py
import os
import numpy as np
import codecs
import json
from glob import glob
import cv2
import shutil
from sklearn.model_selection import train_test_split
#1.标签路径
labelme_path = "./" #原始labelme标注数据路径
saved_path = "./VOC2007/" #保存路径#2.创建要求文件夹
if not os.path.exists(saved_path + "Annotations"):os.makedirs(saved_path + "Annotations")
if not os.path.exists(saved_path + "JPEGImages/"):os.makedirs(saved_path + "JPEGImages/")
if not os.path.exists(saved_path + "ImageSets/Main/"):os.makedirs(saved_path + "ImageSets/Main/")#3.获取待处理文件
files = glob(labelme_path + "*.json")
files = [i.split("/")[-1].split(".json")[0] for i in files]#4.读取标注信息并写入 xml
for json_file_ in files:json_filename = labelme_path + json_file_ + ".json"json_file = json.load(open(json_filename,"r",encoding="utf-8"))height, width, channels = cv2.imread(labelme_path + json_file_ +".jpg").shapewith codecs.open(saved_path + "Annotations/"+json_file_ + ".xml","w","utf-8") as xml:xml.write('<annotation>\n')xml.write('\t<folder>' + 'UAV_data' + '</folder>\n')xml.write('\t<filename>' + json_file_ + ".jpg" + '</filename>\n')xml.write('\t<source>\n')xml.write('\t\t<database>The UAV autolanding</database>\n')xml.write('\t\t<annotation>UAV AutoLanding</annotation>\n')xml.write('\t\t<image>flickr</image>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t</source>\n')xml.write('\t<owner>\n')xml.write('\t\t<flickrid>NULL</flickrid>\n')xml.write('\t\t<name>ChaojieZhu</name>\n')xml.write('\t</owner>\n')xml.write('\t<size>\n')xml.write('\t\t<width>'+ str(width) + '</width>\n')xml.write('\t\t<height>'+ str(height) + '</height>\n')xml.write('\t\t<depth>' + str(channels) + '</depth>\n')xml.write('\t</size>\n')xml.write('\t\t<segmented>0</segmented>\n')for multi in json_file["shapes"]:points = np.array(multi["points"])xmin = min(points[:,0])xmax = max(points[:,0])ymin = min(points[:,1])ymax = max(points[:,1])label = multi["label"]if xmax <= xmin:passelif ymax <= ymin:passelse:xml.write('\t<object>\n')xml.write('\t\t<name>'+"class_name"+'</name>\n') xml.write('\t\t<pose>Unspecified</pose>\n')xml.write('\t\t<truncated>1</truncated>\n')xml.write('\t\t<difficult>0</difficult>\n')xml.write('\t\t<bndbox>\n')xml.write('\t\t\t<xmin>' + str(xmin) + '</xmin>\n')xml.write('\t\t\t<ymin>' + str(ymin) + '</ymin>\n')xml.write('\t\t\t<xmax>' + str(xmax) + '</xmax>\n')xml.write('\t\t\t<ymax>' + str(ymax) + '</ymax>\n')xml.write('\t\t</bndbox>\n')xml.write('\t</object>\n')print(json_filename,xmin,ymin,xmax,ymax,label)xml.write('</annotation>')#5.复制图片到 VOC2007/JPEGImages/下
image_files = glob(labelme_path + "*.jpg")
print("copy image files to VOC007/JPEGImages/")
for image in image_files:shutil.copy(image,saved_path +"JPEGImages/")#6.split files for txt
txtsavepath = saved_path + "ImageSets/Main/"
ftrainval = open(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/val.txt', 'w')
total_files = glob("./VOC2007/Annotations/*.xml")
total_files = [i.split("/")[-1].split(".xml")[0] for i in total_files]
#test_filepath = ""
for file in total_files:ftrainval.write(file + "\n")
#test
#for file in os.listdir(test_filepath):
# ftest.write(file.split(".jpg")[0] + "\n")
#split
train_files,val_files = train_test_split(total_files,test_size=0.15,random_state=42)
#train
for file in train_files:ftrain.write(file + "\n")
#val
for file in val_files:fval.write(file + "\n")ftrainval.close()
ftrain.close()
fval.close()
#ftest.close()
训练集和验证集的划分方法是采用 sklearn.model_selection.train_test_split 进行分割的。
默认图片格式 .jpg,如果图片格式有变化,请自行修改代码中的 .jpg 名称。
默认不添加测试集,如果有需要,自行解开注释即可。
voc2annotation
import xml.etree.ElementTree as ET
from os import getcwdsets=[('2007', 'train'), ('2007', 'val'), ('2007', 'test')]wd = getcwd()
classes = ["fire"]def convert_annotation(year, image_id, list_file):in_file = open('VOCdevkit/VOC%s/Annotations/%s.xml'%(year, image_id))tree=ET.parse(in_file)root = tree.getroot()list_file.write('%s/VOCdevkit/VOC%s/JPEGImages/%s.jpg'%(wd, year, image_id))for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult)==1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (int(xmlbox.find('xmin').text), int(xmlbox.find('ymin').text), int(xmlbox.find('xmax').text), int(xmlbox.find('ymax').text))list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))list_file.write('\n')for year, image_set in sets:image_ids = open('./VOCdevkit/VOC%s/ImageSets/Main/%s.txt'%(year, image_set)).read().strip().splitlines()list_file = open('%s_%s.txt'%(year, image_set), 'w')for image_id in image_ids:convert_annotation(year, image_id, list_file)list_file.close()
labelme转VOC2007格式相关推荐
- 用faster-rcnn训练自己的数据集(VOC2007格式,python版)
用faster-rcnn训练自己的数据集(VOC2007格式,python版) 一. 配置caffe环境 ubunt16.04下caffe环境安装 二. 下载,编译及测试py-faster-rcnn源 ...
- labelme的 json格式转化成自己的json格式
labelme的json格式: {"version": "4.5.6","flags": {},"shapes": [{ ...
- 将数据集做成VOC2007格式用于Faster-RCNN训练
0.文件夹名 首先,确定你的数据集所放的文件夹名字,例如我的叫logos. (或者和voc2007一样的名字:VOC2007) 1.图片命名 虽然说图片名对训练没什么影响,但建议还是按VOC2007那 ...
- 目标检测之VOC2007格式数据集制作
1.前序 前几天师弟问我如何做自己的VOC2007数据集的事情,当时跟他说网上资料很多,让他自己查查,但不知道什么原因和我说还是没搞好.自己想想也是,不熟悉的东西即便在别人眼里看似很简单,到了自己跟前 ...
- 把自己的数据格式转化成VOC2007格式
1. 自己数据集格式介绍 我们数据集标注的文件如下 每一个image对应一个txt,每个txt内容如下 每一行有8个数据,每个数据代表的含义如下图所示 2. 重命名 VOC2007格式必须为JPG格式 ...
- labelImg的VOC格式转化为labelme的json格式
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.安装labelme 二.VOC转化为JSON的代码 1.代码: 2.用labelme查看转化完成的文件 前言 ...
- VOC2007格式数据集制作
1.VOC2007格式数据集介绍 解压VOC2007数据集后可以看到VOC2007文件夹下有以下5个文件夹: Annotations文件夹 该文件下存放的是xml格式的标签文件,每个xml文件都对应 ...
- 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)
参考链接:http://ai.baidu.com/forum/topic/show/595975 https://github.com/endernewton/tf-faster-rcnn https ...
- 建立自己的voc数据集_制作自己的数据集(VOC2007格式)用于Faster-RCNN训练
一.数据集文件夹 新建一个文件夹,用来存放整个数据集,或者和voc2007一样的名字:VOC2007 然后在文件夹里面新建如下文件夹: 二.将训练图片放到JPEGImages 将所有的训练图片放到该文 ...
- MATLAB图像数据集的制作,使用labelImg制作自己的数据集(VOC2007格式)用于Faster-RCNN训练...
一.数据集文件夹 新建一个文件夹,用来存放整个数据集,或者和voc2007一样的名字:VOC2007 然后像voc2007一样,在文件夹里面新建如下文件夹: 二.将训练图片放到JPEGImages 将 ...
最新文章
- 剑指offer:删除链表中重复的结点
- DB2 格式化输出 Date
- eclipse目录出现重复情况 解决
- 数据可视化图表,你选对了吗?
- mysql二级缓存,mybatis的动态sql和二级缓存
- 4003基于邻接表的新顶点的增加(C++,附详细解析)
- JavaScript学习(七十七)—统计字符串中出现次数最多的字符和每个字符出现的次数
- AcWing1069.凸多边形的划分(区间DP)题解
- 全国计算机三级嵌入式资料
- 如何使用阿里云打造离线下载服务器?
- java 后加_java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别!其实大家只要记住一句话就可以了,前++是先自加再使...
- wincc7.4sp1硬件狗破解不成功
- 安卓逆向学习 之 KGB Messenger的writeup(1)
- 领导带好团队需要有的3个能力
- 用Derby数据库读取加密的DAT数据文件(一)
- 网页设计与制作第三节文字(页面设计与制作答案)
- 华硕ax56u刷机_华硕WiFi6家用路由RT-AX56U初体验
- Sublime text 2 简单注册方法。
- 从开发零基础到登上Steam和Oculus:一个VR游戏开发者的自述
- 初始C语言——梦启程的地方