doanh25032004's picture
Upload folder using huggingface_hub
872b0a0 verified
Raw
History Blame Contribute Delete
2.97 kB
import os
import sys
import re
import numpy as np
from PIL import Image
from ..core.data import Data
from ..util import tryremove
from shutil import copyfile, rmtree
from urllib.request import urlretrieve
class ChairsData(Data):
URL = 'http://lmb.informatik.uni-freiburg.de/data/FlyingChairs/FlyingChairs.zip'
TRAIN_VAL_URL = 'http://lmb.informatik.uni-freiburg.de/resources/datasets/FlyingChairs/FlyingChairs_train_val.txt'
dirs = ['flying_chairs']
def __init__(self, data_dir, stat_log_dir=None,
development=True, fast_dir=None):
super().__init__(data_dir, stat_log_dir,
development=development,
fast_dir=fast_dir)
def _fetch_if_missing(self):
local_path = os.path.join(self.data_dir, 'flying_chairs')
train_val_path = os.path.join(local_path, 'FlyingChairs_train_val.txt')
if not os.path.isdir(local_path):
did_download = True
self._download_and_extract(self.URL, local_path)
urlretrieve(self.TRAIN_VAL_URL, train_val_path)
else:
did_download = False
data_path = os.path.join(local_path, 'FlyingChairs_release', 'data')
os.makedirs(os.path.join(local_path, 'image'), exist_ok=True)
os.makedirs(os.path.join(local_path, 'flow'), exist_ok=True)
os.makedirs(os.path.join(local_path, 'test_image'), exist_ok=True)
if os.path.isdir(data_path):
print('>> converting chairs data to .png')
train_val_repeated = []
train_val = []
with open(train_val_path) as f:
for line in f:
training = int(line.strip()) == 1
train_val_repeated.extend([training, training])
train_val.extend([training])
# Convert .ppm to .png and split data into image and flow directory
im_files = [f for f in os.listdir(data_path) if
re.match(r'[0-9]+.*\.ppm', f)]
im_files.sort()
flow_files = [f for f in os.listdir(data_path) if
re.match(r'[0-9]+.*\.flo', f)]
flow_files.sort()
for t, f in zip(train_val_repeated, im_files):
name, ext = os.path.splitext(f)
path = os.path.join(data_path, f)
im = Image.open(path)
folder = 'image' if t else 'test_image'
im.save(os.path.join(local_path, folder, name + '.png'),
'PNG')
for t, f in zip(train_val, flow_files):
path = os.path.join(data_path, f)
if not t:
copyfile(path, os.path.join(local_path, 'flow', f))
if did_download:
rmtree(data_path)
print('>> processed chairs data')
def get_raw_dirs(self):
return [os.path.join(self.current_dir, 'flying_chairs', 'image')]