主要是网上一些已有并已用了觉得还可以的,同时记录方便以后查询使用。
第一个代码是生成VOC数据集的无后缀文件名于txt文件中,如下所示:

E84.27832967649_N46.23271680371_Level_17
E84.27323348179_N46.20431951701_Level_17
E84.26983244239_N46.22384654871_Level_17
E84.26467187469_N46.19801444161_Level_17
E84.25288088939_N46.183574654009995_Level_17
E84.24682982879_N46.195036174509994_Level_17
E84.24360045069_N46.237184791009994_Level_17
E84.23477062279_N46.235218030809996_Level_17
E84.22621974449_N46.22634817991_Level_17
E84.22523269199_N46.243774779409996_Level_17
E84.20790562999_N46.23288751421_Level_17
E84.19428001469_N46.23460943411_Level_17
E84.18946276959_N46.231165540309995_Level_17
E84.18435584609_N46.24350021241_Level_17
E84.17493593249_N46.23213044611_Level_17
E84.17491447479_N46.22991856001_Level_17
E84.17009722969_N46.22870124241_Level_17
E84.16549456119_N46.22301512081_Level_17
....
import os
import random xmlfilepath='./dataset/wind_turbine/600/Annotations'
saveBasePath='./dataset/wind_turbine/main/'trainval_percent=0.5
train_percent=0.5
#按比例分配数据集并写入txt文件
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)  print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'trainval_600.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'val.txt'), 'w')  for i  in list:  name=total_xml[i][:-4]+'\n'  if i in trainval:  ftrainval.write(name)  if i in train:  ftrain.write(name)  else:  fval.write(name)  else:  ftest.write(name)  ftrainval.close()
ftrain.close()
fval.close()
ftest .close()

第二个是生成VOC数据集含jpg图像数据的路径+对应图片的标签数据于txt文件中,效果如下所示:

nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.27832967649_N46.23271680371_Level_17.jpg 228.99391,222.47363,312.58466,304.47232,0 233.84084,532.4577,324.12997,599.7597,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.27323348179_N46.20431951701_Level_17.jpg 201.64653,494.78455,337.38416,557.193,0 211.9857,233.18863,309.72287,305.5362,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.26983244239_N46.22384654871_Level_17.jpg 223.42166,218.48094,311.25772,302.37592,0 234.28397,534.29614,329.2536,598.3805,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.26467187469_N46.19801444161_Level_17.jpg 216.01837,230.02402,315.0269,306.0483,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.25288088939_N46.183574654009995_Level_17.jpg 212.70818,226.00427,316.77173,305.18716,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.24682982879_N46.195036174509994_Level_17.jpg 208.24023,225.01248,308.3647,302.37195,0 224.92915,487.00003,313.08423,567.02155,0 204.29791,0.0,293.57907,49.22905,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.24360045069_N46.237184791009994_Level_17.jpg 222.19019,236.3034,315.72125,307.9717,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.23477062279_N46.235218030809996_Level_17.jpg 206.90015,220.33434,313.02274,306.4058,0 220.44206,0.0,284.43204,22.45714,0 232.01357,541.43335,272.89383,597.89197,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.22621974449_N46.22634817991_Level_17.jpg 216.45709,235.43375,313.00192,306.33673,0 229.08986,544.2234,272.83643,598.7043,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.22523269199_N46.243774779409996_Level_17.jpg 228.57738,218.4152,312.82574,302.70883,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.20790562999_N46.23288751421_Level_17.jpg 220.28488,234.50874,315.49698,308.64893,0
/nfs/private/junnxie/codes/opencv-mosaic-data-aug-master/./dataset/wind_turbine/600/Images/E84.19428001469_N46.23460943411_Level_17.jpg 243.37088,250.062,308.4704,306.28558,0 249.10687,459.61624,310.7504,515.1315,0 239.11302,41.748695,303.94968,95.20206,0
.....

使用前读懂参数设置,建议使用的命令行如下

python3 voc2txt_annotation.py -name bdd100k_obj -input_dir D:/BDD100K/ -save data_txt

实际上上述参数可以在代码中默认设置,不需要加也可以使用。

import os
import logging
import argparse
from tqdm import tqdm
import xml.etree.ElementTree as ET
from Generate_coco_classes import main
from ipdb import set_tracelogging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)
logger = logging.getLogger('voc2txt')
logger.setLevel(logging.DEBUG)# 改annotations
# python3 voc2txt_annotation.py -name bdd100k_obj -input_dir D:/BDD100K/ -save data_txtdef parse_arguments():parser = argparse.ArgumentParser(description='This a script to generate train, test, val dataset, the generated txt file will be used for yolo training')parser.add_argument('-name', default="mosaic", help="Dataset name", action="store_true")parser.add_argument('-input_dir',default="./dataset/wind_turbine/600",help="Read dataset annotations", action="store_true")parser.add_argument('-save', default='data_txt', help="Txt file generated for centernet training and test", action="store_true")args = parser.parse_args()return argsdef convert_annotation(image_id, list_file, image_set, input_dir_path):# print(os.path.join(input_dir_path, 'Annotations/%s.xml'%(image_id)))# in_file = open(os.path.join(input_dir_path, 'Annotations/%s/%s.xml'%(image_set, image_id)))in_file = open(os.path.join(input_dir_path, 'Annotations/%s.xml' % (image_id)))tree=ET.parse(in_file)root = tree.getroot()list_file.write(os.path.join(current_path, input_dir_path, 'Images/%s.jpg'%(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))b = (float(xmlbox.find('xmin').text), float(xmlbox.find('ymin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymax').text))list_file.write(" " + ",".join([str(a) for a in b]) + ',' + str(cls_id))list_file.write('\n')def save_data_txt(input_dir_path, sets):for name, image_set in sets:# print(os.path.join(input_dir_path, 'ImageSets','Main','%s.txt'%(image_set)))logger.info(input_dir_path)# set_trace()# image_ids = open(os.path.join(input_dir_path, 'ImageSets', 'Main','%s.txt'%(image_set))).read().strip().split()image_ids = open(os.path.join(input_dir_path,'%s.txt'%(image_set))).read().strip().split()list_file = open(os.path.join(save_path, '%s_%s.txt'%(args.name, image_set)), 'w')for image_id in tqdm(image_ids):convert_annotation(image_id, list_file, image_set, input_dir_path)list_file.close()if __name__=='__main__':current_path = os.getcwd()args = parse_arguments()save_path = args.saveos.makedirs(save_path, exist_ok=True)# classes = ['rider', 'car', 'bike', 'person', 'train', 'traffic light', 'motor', 'bus', 'truck', 'traffic sign']classes = ['wind_turbine']# classes = main(year=2017)# Train/Val# trainval_sets=[(args.name, 'train'), (args.name, 'trainval'), (args.name, 'val')]trainval_sets = [(args.name, 'trainval_600')]trainval_input_dir_path = args.input_dirsave_data_txt(trainval_input_dir_path, trainval_sets)

把VOC数据集转化成txt文件python相关推荐

  1. 比赛中学习(2)-voc数据集制作中将.txt文件变为.xml文件

    描述 和voc数据集制作有一点不同的是,因为参加的比赛中坐标给了4个,也就是说目标的形状可能是是平行四边形.所以和voc数据集有点不同啊.放出一张.txt文件的形式 最后的结果大致是这样的(和上面的图 ...

  2. VOC数据集 XML 和 txt标注文本的理解

    VOC数据集 XML 和 txt标注文本的理解 以VOC数据集中VOC2007中的000001.jpg图片为例,分析下其对应的Annotations文件夹下的000001.xml文件和labels文件 ...

  3. python怎么创建txt文件夹_python怎么创建一个txt文件/python创建文件夹基础教程

    python怎么创建一个txt文件 python怎么创建一个txt文方法. 如考: 1.首先内置的空闲编辑器进行编辑(单击并选择copy),如下图所示. 2.您可以下载记事本和其他编辑软件,以支持多种 ...

  4. python读取整个txt文件-Python读写txt文本文件

    一.文件的打开和创建 1 2 3 4 5 >>> f= open('/tmp/test.txt') >>> f.read() 'hello python! hell ...

  5. python在当前目录创建txt文件-python根据txt文本批量创建文件夹

    前言 前言:想写这个代码的原因是因为实习的时候需要根据表格名创建对应的文件夹,如果只是很少个数文件夹的话,ctrl+shift+n还可以接受吧,可是一次就要创建几百个文件夹,这就有点方方了.所以我写了 ...

  6. python创建一个txt文件-python中如何创建一个txt文件

    python中有一个内置函数open(),该函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写.如果以只写模式打开一个文件,那么该函数会在文件不存在时创建一个文件. 语法: ...

  7. python如何导入txt文件-python如何将数据写入本地txt文本文件

    一.读写txt文件 1.打开txt文件file_handle=open('1.txt',mode='w') 上述函数参数有(1.文件名,mode模式) mode模式有以下几种:#w 只能操作写入 r ...

  8. python读取整个txt文件-python怎么读取txt文件内容

    读取文件: 步骤:打开 -- 读取 -- 关闭>>> f = open('/tmp/test.txt') >>> f.read() 'hello python! h ...

  9. python 打开当前目录的txt文件-Python - 读取其他文件夹/目录中的文本文件

    这是我的情况:我有一些.txt文件在我可以运行脚本的不同目录中.Python - 读取其他文件夹/目录中的文本文件 mainDir/ -face/ -57268-face-_tracker.txt - ...

最新文章

  1. 2017/10/12 表格与表单
  2. hduoj4092 Yummy Triangular Pizza(打表)
  3. 人工智能终于能像人类一样学习,并通过了图灵测试
  4. Mybatis传入参数类型为ListIntergert作为条件进行查询
  5. js监听只读文本框_js 动态控制 input 框 的只读属性
  6. pytorch —— 模型容器与AlexNet构建
  7. 线段树入门 (zz)
  8. Scrapy框架学习(二)
  9. Lucene Automaton(二)
  10. 磁盘被写保护,请去掉写保护或另一张磁盘
  11. 计算机网络压线实验,实验一双绞线的制作山东大学计算机网络自考作业
  12. springboot多线程等待所有结果返回
  13. cosmos官方scavenger_hunt_game测试项目部署
  14. linux系统用中文怎么说,Linux系统的Linux中文怎么读?
  15. Hough Transform Tutorial
  16. wps:如表:自动编号
  17. BS架构和CS架构 + Tomcat安装及配置
  18. creator 跳跃弧线_CocosCreator零基础制作游戏《极限跳跃》
  19. Fido无密码认证示例部署运行
  20. 【瑞模网】3dmax如何贴图

热门文章

  1. 安装 Nexus——war版本
  2. navicat工具把SQL Server数据库转换MySQL数据库
  3. Java描述设计模式(08):桥接模式
  4. Spring+SpringMVC+MyBatis深入学习及搭建(五)——动态sql
  5. 单一指责原则(Single Responsibility Principle) SRP
  6. Coursera 机器学习笔记(五)
  7. openstack havana vlan安装成功
  8. ssh的详细链接过程
  9. C语言——二分法查找一个数_数组
  10. C语言——确定char、short、int和short变量有符号和无符号时的取值范围