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格式相关推荐

  1. 用faster-rcnn训练自己的数据集(VOC2007格式,python版)

    用faster-rcnn训练自己的数据集(VOC2007格式,python版) 一. 配置caffe环境 ubunt16.04下caffe环境安装 二. 下载,编译及测试py-faster-rcnn源 ...

  2. labelme的 json格式转化成自己的json格式

    labelme的json格式: {"version": "4.5.6","flags": {},"shapes": [{ ...

  3. 将数据集做成VOC2007格式用于Faster-RCNN训练

    0.文件夹名 首先,确定你的数据集所放的文件夹名字,例如我的叫logos. (或者和voc2007一样的名字:VOC2007) 1.图片命名 虽然说图片名对训练没什么影响,但建议还是按VOC2007那 ...

  4. 目标检测之VOC2007格式数据集制作

    1.前序 前几天师弟问我如何做自己的VOC2007数据集的事情,当时跟他说网上资料很多,让他自己查查,但不知道什么原因和我说还是没搞好.自己想想也是,不熟悉的东西即便在别人眼里看似很简单,到了自己跟前 ...

  5. 把自己的数据格式转化成VOC2007格式

    1. 自己数据集格式介绍 我们数据集标注的文件如下 每一个image对应一个txt,每个txt内容如下 每一行有8个数据,每个数据代表的含义如下图所示 2. 重命名 VOC2007格式必须为JPG格式 ...

  6. labelImg的VOC格式转化为labelme的json格式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.安装labelme 二.VOC转化为JSON的代码 1.代码: 2.用labelme查看转化完成的文件 前言    ...

  7. VOC2007格式数据集制作

    1.VOC2007格式数据集介绍 解压VOC2007数据集后可以看到VOC2007文件夹下有以下5个文件夹: Annotations文件夹  该文件下存放的是xml格式的标签文件,每个xml文件都对应 ...

  8. 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)

    参考链接:http://ai.baidu.com/forum/topic/show/595975 https://github.com/endernewton/tf-faster-rcnn https ...

  9. 建立自己的voc数据集_制作自己的数据集(VOC2007格式)用于Faster-RCNN训练

    一.数据集文件夹 新建一个文件夹,用来存放整个数据集,或者和voc2007一样的名字:VOC2007 然后在文件夹里面新建如下文件夹: 二.将训练图片放到JPEGImages 将所有的训练图片放到该文 ...

  10. MATLAB图像数据集的制作,使用labelImg制作自己的数据集(VOC2007格式)用于Faster-RCNN训练...

    一.数据集文件夹 新建一个文件夹,用来存放整个数据集,或者和voc2007一样的名字:VOC2007 然后像voc2007一样,在文件夹里面新建如下文件夹: 二.将训练图片放到JPEGImages 将 ...

最新文章

  1. 剑指offer:删除链表中重复的结点
  2. DB2 格式化输出 Date
  3. eclipse目录出现重复情况 解决
  4. 数据可视化图表,你选对了吗?
  5. mysql二级缓存,mybatis的动态sql和二级缓存
  6. 4003基于邻接表的新顶点的增加(C++,附详细解析)
  7. JavaScript学习(七十七)—统计字符串中出现次数最多的字符和每个字符出现的次数
  8. AcWing1069.凸多边形的划分(区间DP)题解
  9. 全国计算机三级嵌入式资料
  10. 如何使用阿里云打造离线下载服务器?
  11. java 后加_java中的前加加++和后加加++,有很多人搞的很晕,不太明白!今天我举几个例子说明下前++和后++的区别!其实大家只要记住一句话就可以了,前++是先自加再使...
  12. wincc7.4sp1硬件狗破解不成功
  13. 安卓逆向学习 之 KGB Messenger的writeup(1)
  14. 领导带好团队需要有的3个能力
  15. 用Derby数据库读取加密的DAT数据文件(一)
  16. 网页设计与制作第三节文字(页面设计与制作答案)
  17. 华硕ax56u刷机_华硕WiFi6家用路由RT-AX56U初体验
  18. Sublime text 2 简单注册方法。
  19. 从开发零基础到登上Steam和Oculus:一个VR游戏开发者的自述
  20. 初始C语言——梦启程的地方

热门文章

  1. linux root用户被锁定如何解除,超级管理员被锁定,如何解锁?
  2. html5在线+网站,15个在线HTML5网页设计工具
  3. 16种常用统计分析软件介绍
  4. 如何把pdf转换成excel表格
  5. 轩辕实验室 |自动驾驶系统安全隐患分析
  6. linux打包解压包(tar.gz )
  7. Web服务器常见HTTP错误码
  8. 在html语言中读取txt文件中的内容,Javascript写入txt和读取txt文件示例详解
  9. 关于快递鸟的顺丰电子面单打印
  10. 计算机基础第四章excel,计算机基础第4次作业 第四章 Excel知识题