# DESC: 标注单类数据后,生成voc训练格式脚本
import os
import random
import glob
import shutil
trainval_percent = 0.66
train_percent = 0.5
base_path = r'C:\Users\wzauw\Desktop\cougar_body'
xml_path = r''
img_path = r''
total_xml = []
def mk_data_folder(*args, cur=None):
if not cur:
cur = base_path
for idx, arg in enumerate(args, 1):
cur = os.path.join(cur, arg)
if idx == len(args):
if not os.path.exists(cur):
os.makedirs(cur)
return cur
if __name__ == '__main__':
# 创建文件目录
folder_path = {}
voc2007 = mk_data_folder('VOCdevkit', 'VOC2007')
for foldername in ['Annotations', 'ImageSets', 'JPEGImages']:
folder_path[foldername] = mk_data_folder(foldername, cur=voc2007)
for imgsetname in ['Action', 'Layout', 'Main', 'Segmentation']:
folder_path[imgsetname] = mk_data_folder(imgsetname, cur=folder_path['ImageSets'])
if not img_path:
img_path = base_path
for file in glob.glob(img_path + '/*.*[gG]'):
if os.path.exists(os.path.join(folder_path['JPEGImages'], os.path.basename(file))):
os.remove(file)
else:
shutil.move(file, folder_path['JPEGImages'])
if not xml_path:
xml_path = base_path
for file in glob.glob(xml_path + '/*.xml'):
total_xml.append(os.path.basename(file))
if os.path.exists(os.path.join(folder_path['Annotations'], os.path.basename(file))):
os.remove(file)
else:
shutil.move(file, folder_path['Annotations'])
num = len(total_xml)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(range(num), tv)
train = random.sample(trainval, tr)
ftrainval = open(os.path.join(folder_path['Main'], 'trainval.txt'), 'w')
ftest = open(os.path.join(folder_path['Main'], 'test.txt'), 'w')
ftrain = open(os.path.join(folder_path['Main'], 'train.txt'), 'w')
fval = open(os.path.join(folder_path['Main'], 'val.txt'), 'w')
for i in range(num):
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训练格式脚本
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- “定投课堂”听Liuda老师讲解,并写下听后感: 共读《反脆弱》的原因:这本书是核心,通过这本书可以在最短的时间了...