In [341]:
import os.path
In [38]:
import numpy as np
In [147]:
import numpy.linalg as LA
In [20]:
from PIL import Image
In [26]:
from random import shuffle
In [19]:
def show_normals(npnorms):
return Image.fromarray(((npnorms+1)/2*254).astype(np.uint8))
In [339]:
Indices = list(range(1,33));
In [33]:
Indices.remove(8)
In [61]:
shuffle(Indices)
In [324]:
Indices = [1,2,3,4,100,101,102,103,1500,1574,347,90]
In [108]:
bool(len(Indices))
Out[108]:
In [140]:
norm = np.asarray(Image.open('./DataSet/NORM/'+str(1).zfill(6)+'.png'))
In [141]:
Image.fromarray(norm)
Out[141]:
In [323]:
def get_batch(batch_size=32):
images = np.zeros([batch_size, 240, 320, 3], dtype=np.float32)
normals = np.zeros([batch_size, 240, 320, 3], dtype=np.float32)
for i in range(batch_size):
if len(Indices):
ni = Indices.pop()
images[i,:,:,:] = np.asarray(Image.open('./DataSet/RGB/'+str(ni).zfill(6)+'.png'))
normals[i,:,:,:] = np.asarray(Image.open('./DataSet/NORM/'+str(ni).zfill(6)+'.png'))
# Convert to range [-1,+1]
normals = ((normals / 254)*2)-1
# Mask of valid normals
norml2 = LA.norm(normals,axis=3)
mask = (norml2 > 0.5).astype(np.float32)
mask3 = np.repeat(np.expand_dims(mask,3),3,3)
# Normalise
normals = np.divide(normals,np.expand_dims(norml2,3))
normals = np.nan_to_num(normals)
# Apply mask
normals = np.multiply(normals,mask3)
return images,normals
In [340]:
img,norm = get_batch(32)
In [334]:
img.shape
Out[334]:
In [338]:
Image.fromarray(img[1].astype(np.uint8))
Out[338]:
In [337]:
show_normals(norm[1])
Out[337]:
In [285]:
norm = np.nan_to_num(np.divide(norm,np.reshape(LA.norm(norm,axis=3), (5,240,320,1))))
In [204]:
np.unique(norm)
Out[204]:
In [299]:
np.unique(LA.norm(norm,axis=3))
Out[299]:
In [281]:
mask = (LA.norm(norm,axis=3) > 0.5).astype(np.float)
In [282]:
mask3 = np.repeat(np.expand_dims(mask,3),3,3)
In [287]:
temp = np.multiply(norm,mask3)
In [288]:
show_normals(temp[2])
Out[288]:
In [353]:
def init():
Indices = []
for i in range(3000):
rgb = './DataSet/RGB/'+str(i).zfill(6)+'.png'
norm = './DataSet/NORM/'+str(i).zfill(6)+'.png'
if os.path.isfile(rgb) and os.path.isfile(norm):
Indices.append(i)
else:
print(str(i),' MISSING')
return Indices
In [354]:
ii = init()
In [358]:
shuffle(ii)
In [360]:
ii.pop()
Out[360]:
In [22]:
%%writefile ../Code/DataSets/NYURaw.py
import os.path
import random
import numpy as np
import numpy.linalg as LA
from PIL import Image
path = '../Code/DataSets/NYURaw/'
class Dataset:
def __init__(self,subset=1.0):
self.Indices = []
for i in range(1,252885):
rgb = path+'RGB/'+str(i).zfill(6)+'.png'
norm = path+'NORM/'+str(i).zfill(6)+'.png'
if os.path.isfile(rgb) and os.path.isfile(norm):
self.Indices.append(i)
#else:
# print('Frame No. ',str(i),' IS MISSING')
random.seed(7)
random.shuffle(self.Indices)
self.size = int(subset*len(self.Indices))
def get_batch(self,batch_size=32):
# Initialisation
images = np.zeros([batch_size, 240, 320, 3], dtype=np.float32)
normals = np.zeros([batch_size, 240, 320, 3], dtype=np.float32)
# Loading images
for i in range(batch_size):
if len(self.Indices):
ni = self.Indices.pop()
images[i,:,:,:] = np.asarray(Image.open(path+'RGB/'+str(ni).zfill(6)+'.png'))
normals[i,:,:,:] = np.asarray(Image.open(path+'NORM/'+str(ni).zfill(6)+'.png'))
# Convert to range [-1,+1]
normals = ((normals / 254)*2)-1
# Mask of valid normals
norml2 = LA.norm(normals,axis=3)
mask = (norml2 > 0.5).astype(np.float32)
mask3 = np.repeat(np.expand_dims(mask,3),3,3)
# Normalise
normals = np.divide(normals,np.expand_dims(norml2,3))
normals = np.nan_to_num(normals)
# Apply mask
normals = np.multiply(normals,mask3)
return images,normals
In [11]:
dataset = Dataset()
In [12]:
len(dataset.Indices)
Out[12]:
In [13]:
dataset.size
Out[13]:
In [14]:
from math import ceil
In [15]:
ceil(dataset.size/32)
Out[15]:
In [23]:
7903*32
Out[23]:
In [16]:
img, norm = dataset.get_batch()
In [17]:
Image.fromarray(img[0].astype(np.uint8))
Out[17]:
In [21]:
show_normals(norm[0])
Out[21]:
In [26]:
list(range(1,int(5*0.5)))
Out[26]:
In [ ]: