doanh25032004's picture
Upload folder using huggingface_hub
872b0a0 verified
Raw
History Blame Contribute Delete
4.64 kB
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')
# Note. the os.listdir method returns arbitary order of list. We need correct order.
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, '%.5d'%s_idx)+'.png')
#middle_image = cv2.imread(os.path.join(image_path, '%.5d'%m_idx)+'.png')
#next_image = cv2.imread(os.path.join(image_path, '%.5d'%e_idx)+'.png')
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'))
# Write training files
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)
#f = open(os.path.join(output_dir, 'train.txt'), 'w')
print('Preparing sequence data....')
if not os.path.isdir(self.data_dir):
raise NotImplementedError
dirlist = os.listdir(self.data_dir)
total_dirlist = []
# Get the different folders of images
for d in dirlist:
if os.path.isdir(os.path.join(self.data_dir, d)):
total_dirlist.append(d)
q.put(d)
# Process every folder
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()
# Collect the training frames.
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 = []
# Get the different folders of images
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)