| import os, sys |
| import numpy as np |
| import cv2 |
| from tqdm import tqdm |
| import torch.multiprocessing as mp |
| import pdb |
|
|
| def process_folder(q, data_dir, output_dir, stride=1): |
| while True: |
| if q.empty(): |
| break |
| folder = q.get() |
| image_path = os.path.join(data_dir, folder) |
| dump_image_path = os.path.join(output_dir, folder) |
| if not os.path.isdir(dump_image_path): |
| os.makedirs(dump_image_path) |
| f = open(os.path.join(dump_image_path, 'train.txt'), 'w') |
| |
| |
| numbers = len(os.listdir(image_path)) |
| names = list(os.listdir(image_path)) |
| names.sort() |
| if numbers < 3: |
| print("this folder do not have enough image, numbers < 3!") |
| for n in range(numbers - 2*stride): |
| s_idx = n |
| m_idx = s_idx + stride |
| e_idx = s_idx + 2*stride |
| |
| |
| |
| |
| curr_image = cv2.imread(os.path.join(image_path, names[s_idx])) |
| middle_image = cv2.imread(os.path.join(image_path, names[m_idx])) |
| next_image = cv2.imread(os.path.join(image_path, names[e_idx])) |
|
|
| if curr_image is None: |
| print(os.path.join(image_path, '%.5d'%s_idx)+'.png') |
| continue |
|
|
| if middle_image is None: |
| print(os.path.join(image_path, '%.5d'%m_idx)+'.png') |
| continue |
|
|
| if next_image is None: |
| print(os.path.join(image_path, '%.5d'%e_idx)+'.png') |
| continue |
|
|
| seq_images = np.concatenate([curr_image, middle_image, next_image], axis=0) |
| cv2.imwrite(os.path.join(dump_image_path, '%.10d'%s_idx)+'.png', seq_images.astype('uint8')) |
|
|
| |
| f.write('%s\n' % (os.path.join(folder, '%.10d'%s_idx)+'.png')) |
| print(folder) |
|
|
|
|
| class SINTEL(object): |
| def __init__(self, data_dir): |
| self.data_dir = data_dir |
|
|
| def __len__(self): |
| raise NotImplementedError |
|
|
|
|
| def prepare_data_mp(self, output_dir, stride=1): |
| num_processes = 8 |
| processes = [] |
| q = mp.Queue() |
| if not os.path.isfile(os.path.join(output_dir, 'train.txt')): |
| os.makedirs(output_dir) |
| |
| print('Preparing sequence data....') |
| if not os.path.isdir(self.data_dir): |
| raise NotImplementedError |
| dirlist = os.listdir(self.data_dir) |
| total_dirlist = [] |
| |
| for d in dirlist: |
| if os.path.isdir(os.path.join(self.data_dir, d)): |
| total_dirlist.append(d) |
| q.put(d) |
| |
| for rank in range(num_processes): |
| p = mp.Process(target=process_folder, args=(q, self.data_dir, output_dir, stride)) |
| p.start() |
| processes.append(p) |
| for p in processes: |
| p.join() |
| |
| |
| f = open(os.path.join(output_dir, 'train.txt'), 'w') |
| for date in os.listdir(output_dir): |
| if os.path.isdir(os.path.join(output_dir, date)): |
| train_file = open(os.path.join(output_dir, date, 'train.txt'), 'r') |
| for l in train_file.readlines(): |
| f.write(l) |
| |
| |
| print('Data Preparation Finished.') |
|
|
|
|
| def __getitem__(self, idx): |
| raise NotImplementedError |
|
|
|
|
| if __name__ == '__main__': |
| data_dir = '/home/ljf/Dataset/Sintel/scene' |
| dirlist = os.listdir('/home4/zhaow/data/kitti') |
| output_dir = '/home4/zhaow/data/kitti_seq/data_generated_s2' |
| total_dirlist = [] |
| |
| for d in dirlist: |
| seclist = os.listdir(os.path.join(data_dir, d)) |
| for s in seclist: |
| if os.path.isdir(os.path.join(data_dir, d, s)): |
| total_dirlist.append(os.path.join(d, s)) |
| |
| F = open(os.path.join(output_dir, 'train.txt'), 'w') |
| for p in total_dirlist: |
| traintxt = os.path.join(os.path.join(output_dir, p), 'train.txt') |
| f = open(traintxt, 'r') |
| for line in f.readlines(): |
| F.write(line) |
| print(traintxt) |
|
|
|
|
|
|
|
|
|
|
|
|