对voc2007数据集进行person的单类数据抽取

使用方式
ython tovoc.py VOC2007 VOC 14 1
4个参数分别为
VOC2007原始数据集路径
新数据集路径
标签下标
新标签下标
tovoc.py
'''
@文件 :tovoc.py
@说明 :python tovoc.py VOC2007 VOC 14 1
@时间 :2022/03/21 16:43:49
@作者 :刘子沫
@邮箱 :spiritai@qq.com
@版本 :1.0
'''
from __future__ import print_function
import argparse
import glob
import os
import os.path as osp
import sys
import shutil
def main():
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter
)
parser.add_argument("input_dir", help="input annotated directory")
parser.add_argument("output_dir", help="output dataset directory")
parser.add_argument("inclass", help="labels num")
parser.add_argument("outclass", help="labels num")
args = parser.parse_args()
if osp.exists(args.output_dir):
print("Output directory already exists:", args.output_dir)
sys.exit(1)
os.makedirs(args.output_dir)
os.makedirs(osp.join(args.output_dir, "JPEGImages"))
os.makedirs(osp.join(args.output_dir, "SegmentationClassPNG"))
os.makedirs(osp.join(args.output_dir, "SegmentationObjectPNG"))
os.makedirs(osp.join(args.output_dir, "labels"))
print("Creating dataset:", args.output_dir)
for filename in glob.glob(osp.join(args.input_dir,"labels", "*.txt")):
print("Generating dataset from:", filename)
base = osp.splitext(osp.basename(filename))[0]
in_txt_file = osp.join(
args.input_dir, "labels", base + ".txt"
)
out_txt_file = osp.join(
args.output_dir, "labels", base + ".txt"
)
datas = []
nwedatas = []
flag = True
with open(in_txt_file, "r") as f1:
datas = f1.readlines()
for dt in datas:
a,b,c,d,e = dt.replace("\n","").split(" ")
if a==str(args.inclass):
a = args.outclass
else:
flag=False
break
nwedatas.append([a,b,c,d,e])
if not flag:
continue
try:
shutil.copy(osp.join(args.input_dir, "SegmentationClass", base + ".png"), osp.join(args.output_dir, "SegmentationClassPNG", base + ".png"))
shutil.copy(osp.join(args.input_dir, "SegmentationObject", base + ".png"), osp.join(args.output_dir, "SegmentationObjectPNG", base + ".png"))
except:
continue
with open(out_txt_file, "w+") as f2:
for cls_id,x, y, w, h in nwedatas:
f2.write("%s %s %s %s %s\n"%(cls_id,x, y, w, h))
shutil.copy(osp.join(args.input_dir, "JPEGImages", base + ".jpg"), osp.join(args.output_dir, "JPEGImages", base + ".jpg"))
if __name__ == "__main__":
main()