In [10]:
root = '/data/vision/torralba/health-habits/other/enes/'
%matplotlib inline
import matplotlib.pyplot as plt
import os
import sys
import random
import json
import math
import fnmatch
import os
import scipy.misc
sys.path.append( root + 'Utils/')
import pandas as pd
import numpy as np
import tensorflow as tf
from PIL import Image
from IPython.display import display
from pprint import pprint
from notebook_utils import *
from skimage import color, io
In [2]:
with open('all_paths.txt') as f:
all_paths = [line.rstrip('\n') for line in f.readlines()]
print len(all_paths)
In [3]:
with open('quantized_colors.json') as f:
quantized_colors = json.load(f)
print len(quantized_colors)
In [4]:
def gaussian( x, var ):
return np.exp( -(x**2) / (2 * var**2))
In [5]:
gaussian(np.array([1.,1.]), 5)
Out[5]:
In [6]:
def distance(x0,x1):
return np.sqrt( (x0[0]-x1[0])**2 + (x0[1] - x1[1])**2 )
In [7]:
def quantize_and_soft_encode( ab ):
distances = []
for i in range(len(quantized_colors)):
distances.append( (distance(ab,quantized_colors[str(i)]),i) )
a = sorted(distances)[:5]
encoding = np.zeros(313)
for i in range(5):
encoding[a[i][1]] = gaussian( a[i][0], 5 )
encoding /= np.sum(encoding)
return encoding
In [8]:
def get_data(path):
img = io.imread(path)
img = color.rgb2lab(img)
assert img.shape == (256,256,3)
image = np.zeros((256,256))
output = np.zeros((64,64,313))
image = img[:,:,0]
img = scipy.misc.imresize(img, (64,64))
for i in xrange(64):
for j in xrange(64):
output[i,j,:] = quantize_and_soft_encode( img[i,j,1:3] )
return image, output
In [11]:
image, output = get_data(all_paths[0])
In [82]:
%timeit get_data(all_paths[0])
In [12]:
output[0,0]
Out[12]:
In [49]:
quantized_array = np.zeros((313,2))
for i in range(313):
quantized_array[i] = quantized_colors[str(i)]
In [76]:
def get_data_new(path):
img = io.imread(path)
img = color.rgb2lab(img)
assert img.shape == (256,256,3)
image = img[:,:,0:1]
img = scipy.misc.imresize(img, (64,64))
colors = img[:,:,1:3]
colors = np.tile( colors.reshape((64,64,1,2)), (1,1,313,1))
big_quantized = np.tile( quantized_array, (64,64,1,1))
distances = np.linalg.norm(colors - big_quantized, axis = 3)
d = distances.copy()
d.sort(axis = 2)
low_values = (distances > np.tile( d[:,:,4:5], (1,1,313) ))
gaussian_distances = gaussian(distances, 5)
gaussian_distances[low_values] = 0
output = gaussian_distances / np.sum(gaussian_distances, axis = 2).reshape((64,64,1))
return image, output
In [77]:
image, output = get_data_new(all_paths[0])
In [90]:
output[0,6]
Out[90]:
In [81]:
%timeit get_data_new(all_paths[0])
In [79]:
def get_batch(path_list):
n = len(path_list)
batch_image = np.zeros((n,256,256,1))
batch_output = np.zeros((n,64,64,313))
for i in range(n):
image, output = get_data_new( path_list[i] )
batch_image[i] = image
batch_output[i] = output
return batch_image, batch_output
In [84]:
%timeit get_batch(all_paths[:10])
In [ ]: