| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- import os.path as ops
- import json
- import cv2
- import numpy as np
- import os
- import glob
- import shutil
- def process_json_file(json_root,image_root,des_root):
- color_map = {"drivable": 1, "alternative": 2}
- if not os.path.exists(des_root):
- os.makedirs(des_root)
- images = des_root + '/images'
- labels = des_root + '/labels'
- if not os.path.exists(images):
- os.makedirs(images)
- if not os.path.exists(labels):
- os.makedirs(labels)
- i =0
- for js in glob.glob(json_root+'/**/*.json', recursive=True):
- path = js.split(json_root)[1][1:-5] # 4-5000\7\5183.png
- img_path = image_root+'/'+path
- rename = (path.replace('\\','-')).replace('/', '-') # 4-5000-7-5183.png
- with open(js, 'r') as f:
- dict = json.load(f)
- area_list = dict["annotations"]["area"]
- map = np.zeros([1080, 1920], dtype=np.uint8)
- for area in area_list:
- if area["points"]:
- a = [area["points"]]
- else:
- continue
- cv2.fillPoly(map, np.array(a).astype(int), color_map[area["category"]])
- label_name = rename.replace('.png', '_drivable.png') # 4-5000-7-5183_drivable.png
- label_dir = des_root + '/' + 'labels'
- if not os.path.exists(label_dir):
- os.makedirs(label_dir)
- image_dir = des_root + '/' + 'images'
- if not os.path.exists(image_dir):
- os.makedirs(image_dir)
- label_path = label_dir + '/' + label_name
- image_path = image_dir + '/' + rename
- #resize_map = cv2.resize(map, (1280, 720), interpolation=cv2.INTER_AREA)
- cv2.imwrite(label_path, map)
- img = cv2.imread(img_path)
- #resize_img = cv2.resize(img, (1280,720), interpolation=cv2.INTER_AREA)
- cv2.imwrite(image_path,img)
- i+=1
- if i%500==0:
- print('完成'+str(i)+'张')
- import random
- def generate_train_val_test(des_root):
- images_dir=des_root+'/images'
- labels_dir = des_root + '/labels'
- images_list = os.listdir(images_dir)
- #split source file into 0.9, 0.05 , 0.05 for training, validation and testing
- random.shuffle(images_list)
- size = len(images_list)
- train = images_list[:int(size*0.9)]
- val = images_list[int(size * 0.9):int(size * 0.95)]
- test = images_list[int(size * 0.95):]
- random.shuffle(train)
- random.shuffle(val)
- random.shuffle(test)
- train_img_dir = des_root + '/dataset/images/train'
- val_img_dir = des_root + '/dataset/images/val'
- test_img_dir = des_root + '/dataset/images/test'
- train_lbl_dir = des_root + '/dataset/labels/train'
- val_lbl_dir = des_root + '/dataset/labels/val'
- test_lbl_dir = des_root + '/dataset/labels/test'
- if not os.path.exists(train_img_dir):
- os.makedirs(train_img_dir)
- if not os.path.exists(val_img_dir):
- os.makedirs(val_img_dir)
- if not os.path.exists(test_img_dir):
- os.makedirs(test_img_dir)
- if not os.path.exists(train_lbl_dir):
- os.makedirs(train_lbl_dir)
- if not os.path.exists(val_lbl_dir):
- os.makedirs(val_lbl_dir)
- if not os.path.exists(test_lbl_dir):
- os.makedirs(test_lbl_dir)
- for img in train:
- src_path = images_dir+'/'+img
- des_path = train_img_dir+'/'+img
- shutil.copy(src_path, des_path)
- lbl = img.replace('.png','_drivable.png')
- src_path = labels_dir+'/'+lbl
- des_path = train_lbl_dir+'/'+lbl
- shutil.copy(src_path, des_path)
- print('train done')
- for img in val:
- src_path = images_dir+'/'+img
- des_path = val_img_dir+'/'+img
- shutil.copy(src_path, des_path)
- lbl = img.replace('.png', '_drivable.png')
- src_path = labels_dir+'/'+lbl
- des_path = val_lbl_dir+'/'+lbl
- shutil.copy(src_path, des_path)
- print('val done')
- for img in test:
- src_path = images_dir+'/'+img
- des_path = test_img_dir+'/'+img
- shutil.copy(src_path, des_path)
- lbl = img.replace('.png', '_drivable.png')
- src_path = labels_dir+'/'+lbl
- des_path = test_lbl_dir+'/'+lbl
- shutil.copy(src_path, des_path)
- print('test done')
- if __name__ == '__main__':
- json_root = '/media/adc/Elements/drivable/drivable_json'
- des_root = '/media/adc/Elements/drivable_dataset'
- image_root = '/media/adc/Elements/drivable/images'
- #合并并生成数据集图片
- process_json_file(json_root,image_root,des_root)
- #随机分配train\val\test
- generate_train_val_test(des_root)
|