In [1]:
# Import necessary libraries
import numpy as np
np.random.seed(1337)  # for reproducibility

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K


Using TensorFlow backend.

In [2]:
%matplotlib inline

from matplotlib.pyplot import imshow
import matplotlib.pyplot as plt

from scipy import misc

import os
import random
import pickle

In [3]:
#know which Keras library is being used Theano or Tenserflow
print "using ordering:", K.image_dim_ordering()


using ordering: tf

In [4]:
imageFolder = "-images"

image_dim = 3 #RGB
image_size = 64

imgs = {}

for fileName in ["Cairo_North_2000.jpg", "Cairo_North_2005.jpg", "Cairo_North_2010.jpg", "Cairo_North_2016.jpg"]:
    img = misc.imread("/".join([imageFolder, fileName]))

    if image_dim == 1 and len(img.shape) > 2: 
        img = img[:,:,0]
        
    img = img / 255.0
    imgs[fileName] = img

print "Load data complete"


Load data complete

In [5]:
img = imgs["Cairo_North_2000.jpg"]
print "image dimensions:", img.shape

imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1,  interpolation='nearest')
plt.axis('off')
plt.show()


image dimensions: (1757, 3024, 3)

In [6]:
import math

targetRes = 50

img = imgs["Cairo_North_2000.jpg"] 
xStep = int( math.floor( float(img.shape[0]) / targetRes ) )
yStep = int( math.floor( float(img.shape[1]) / targetRes ) )

data = []

for y in range(yStep):
    for x in range(xStep):
        
        sample = []
        
        crop = imgs["Cairo_North_2000.jpg"][x * targetRes : (x + 1) * targetRes, y * targetRes : (y + 1) * targetRes]
        sample.append(crop)

        for layer in ["Cairo_North_2000.jpg", "Cairo_North_2005.jpg", "Cairo_North_2010.jpg", "Cairo_North_2016.jpg"]:
            target = imgs[layer][x * targetRes : (x + 1) * targetRes, y * targetRes : (y + 1) * targetRes]
            target_val = int ( round( np.mean(target) ) )
            sample.append(target_val)

        data.append(sample)

In [7]:
img_index = 100

img = data[img_index][0]
print "image dimensions:", img.shape
print "Value at time 0:", (data[img_index][1])
print "Value at time 1:", (data[img_index][2])
print "Value at time 2:", (data[img_index][3])
print "Value at time 3:", (data[img_index][4])

imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1,  interpolation='nearest')
plt.axis('off')
plt.show()


image dimensions: (50, 50, 3)
Value at time 0: 0
Value at time 1: 0
Value at time 2: 0
Value at time 3: 0

In [8]:
recomp = {}

for i, layer in enumerate(["2000.jpg", "2005.jpg", "2010.jpg", "2016.jpg"]):

    recomp[layer] = np.ndarray((targetRes * xStep, targetRes * yStep), dtype=np.float32)

    for y in range(yStep):
        for x in range(xStep):
            recomp[layer][x * targetRes : (x + 1) * targetRes, y * targetRes : (y + 1) * targetRes] = data[ y * xStep + x ][i+1]

        
for layer in ["2000.jpg", "2005.jpg", "2010.jpg", "2016.jpg"]:
    
    print layer
    imshow(recomp[layer], cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1,  interpolation='nearest')
    plt.axis('off')
    plt.show()


2000.jpg
2005.jpg
2010.jpg
---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
/home/vagrant/anaconda2/lib/python2.7/site-packages/IPython/core/formatters.pyc in __call__(self, obj)
    305                 pass
    306             else:
--> 307                 return printer(obj)
    308             # Finally look for special method names
    309             method = get_real_method(obj, self.print_method)

/home/vagrant/anaconda2/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in <lambda>(fig)
    225 
    226     if 'png' in formats:
--> 227         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
    228     if 'retina' in formats or 'png2x' in formats:
    229         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))

/home/vagrant/anaconda2/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in print_figure(fig, fmt, bbox_inches, **kwargs)
    117 
    118     bytes_io = BytesIO()
--> 119     fig.canvas.print_figure(bytes_io, **kw)
    120     data = bytes_io.getvalue()
    121     if fmt == 'svg':

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
   2178                     orientation=orientation,
   2179                     dryrun=True,
-> 2180                     **kwargs)
   2181                 renderer = self.figure._cachedRenderer
   2182                 bbox_inches = self.figure.get_tightbbox(renderer)

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_png(self, filename_or_obj, *args, **kwargs)
    525 
    526     def print_png(self, filename_or_obj, *args, **kwargs):
--> 527         FigureCanvasAgg.draw(self)
    528         renderer = self.get_renderer()
    529         original_dpi = renderer.dpi

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self)
    472 
    473         try:
--> 474             self.figure.draw(self.renderer)
    475         finally:
    476             RendererAgg.lock.release()

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     60     def draw_wrapper(artist, renderer, *args, **kwargs):
     61         before(artist, renderer)
---> 62         draw(artist, renderer, *args, **kwargs)
     63         after(artist, renderer)
     64 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer)
   1157         dsu.sort(key=itemgetter(0))
   1158         for zorder, a, func, args in dsu:
-> 1159             func(*args)
   1160 
   1161         renderer.close_group('figure')

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     60     def draw_wrapper(artist, renderer, *args, **kwargs):
     61         before(artist, renderer)
---> 62         draw(artist, renderer, *args, **kwargs)
     63         after(artist, renderer)
     64 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_base.pyc in draw(self, renderer, inframe)
   2317 
   2318         for zorder, a in dsu:
-> 2319             a.draw(renderer)
   2320 
   2321         renderer.close_group('axes')

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     60     def draw_wrapper(artist, renderer, *args, **kwargs):
     61         before(artist, renderer)
---> 62         draw(artist, renderer, *args, **kwargs)
     63         after(artist, renderer)
     64 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in draw(self, renderer, *args, **kwargs)
    387                               " correctly with this backend.")
    388 
--> 389             im = self.make_image(renderer.get_image_magnification())
    390             if im is None:
    391                 return

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in make_image(self, magnification)
    622         im, xmin, ymin, dxintv, dyintv, sx, sy = \
    623             self._get_unsampled_image(self._A, [_x1, _x2, _y1, _y2],
--> 624                                       transformed_viewLim)
    625 
    626         fc = self.axes.patch.get_facecolor()

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in _get_unsampled_image(self, A, image_extents, viewlim)
    229             else:
    230                 if self._rgbacache is None:
--> 231                     x = self.to_rgba(A, bytes=False)
    232                     # Avoid side effects: to_rgba can return its argument
    233                     # unchanged.

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/cm.pyc in to_rgba(self, x, alpha, bytes)
    260         x = ma.asarray(x)
    261         x = self.norm(x)
--> 262         x = self.cmap(x, alpha=alpha, bytes=bytes)
    263         return x
    264 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/colors.pyc in __call__(self, X, alpha, bytes)
    610                 # override its alpha just as for any other value.
    611 
--> 612         rgba = np.empty(shape=xa.shape + (4,), dtype=lut.dtype)
    613         lut.take(xa, axis=0, mode='clip', out=rgba)
    614         if vtype == 'scalar':

MemoryError: 
<matplotlib.figure.Figure at 0x7f565432fd50>
2016.jpg
---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
/home/vagrant/anaconda2/lib/python2.7/site-packages/IPython/core/formatters.pyc in __call__(self, obj)
    305                 pass
    306             else:
--> 307                 return printer(obj)
    308             # Finally look for special method names
    309             method = get_real_method(obj, self.print_method)

/home/vagrant/anaconda2/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in <lambda>(fig)
    225 
    226     if 'png' in formats:
--> 227         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
    228     if 'retina' in formats or 'png2x' in formats:
    229         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))

/home/vagrant/anaconda2/lib/python2.7/site-packages/IPython/core/pylabtools.pyc in print_figure(fig, fmt, bbox_inches, **kwargs)
    117 
    118     bytes_io = BytesIO()
--> 119     fig.canvas.print_figure(bytes_io, **kw)
    120     data = bytes_io.getvalue()
    121     if fmt == 'svg':

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/backend_bases.pyc in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
   2178                     orientation=orientation,
   2179                     dryrun=True,
-> 2180                     **kwargs)
   2181                 renderer = self.figure._cachedRenderer
   2182                 bbox_inches = self.figure.get_tightbbox(renderer)

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in print_png(self, filename_or_obj, *args, **kwargs)
    525 
    526     def print_png(self, filename_or_obj, *args, **kwargs):
--> 527         FigureCanvasAgg.draw(self)
    528         renderer = self.get_renderer()
    529         original_dpi = renderer.dpi

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/backends/backend_agg.pyc in draw(self)
    472 
    473         try:
--> 474             self.figure.draw(self.renderer)
    475         finally:
    476             RendererAgg.lock.release()

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     60     def draw_wrapper(artist, renderer, *args, **kwargs):
     61         before(artist, renderer)
---> 62         draw(artist, renderer, *args, **kwargs)
     63         after(artist, renderer)
     64 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer)
   1157         dsu.sort(key=itemgetter(0))
   1158         for zorder, a, func, args in dsu:
-> 1159             func(*args)
   1160 
   1161         renderer.close_group('figure')

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     60     def draw_wrapper(artist, renderer, *args, **kwargs):
     61         before(artist, renderer)
---> 62         draw(artist, renderer, *args, **kwargs)
     63         after(artist, renderer)
     64 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/axes/_base.pyc in draw(self, renderer, inframe)
   2317 
   2318         for zorder, a in dsu:
-> 2319             a.draw(renderer)
   2320 
   2321         renderer.close_group('axes')

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     60     def draw_wrapper(artist, renderer, *args, **kwargs):
     61         before(artist, renderer)
---> 62         draw(artist, renderer, *args, **kwargs)
     63         after(artist, renderer)
     64 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in draw(self, renderer, *args, **kwargs)
    387                               " correctly with this backend.")
    388 
--> 389             im = self.make_image(renderer.get_image_magnification())
    390             if im is None:
    391                 return

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in make_image(self, magnification)
    622         im, xmin, ymin, dxintv, dyintv, sx, sy = \
    623             self._get_unsampled_image(self._A, [_x1, _x2, _y1, _y2],
--> 624                                       transformed_viewLim)
    625 
    626         fc = self.axes.patch.get_facecolor()

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/image.pyc in _get_unsampled_image(self, A, image_extents, viewlim)
    229             else:
    230                 if self._rgbacache is None:
--> 231                     x = self.to_rgba(A, bytes=False)
    232                     # Avoid side effects: to_rgba can return its argument
    233                     # unchanged.

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/cm.pyc in to_rgba(self, x, alpha, bytes)
    260         x = ma.asarray(x)
    261         x = self.norm(x)
--> 262         x = self.cmap(x, alpha=alpha, bytes=bytes)
    263         return x
    264 

/home/vagrant/anaconda2/lib/python2.7/site-packages/matplotlib/colors.pyc in __call__(self, X, alpha, bytes)
    610                 # override its alpha just as for any other value.
    611 
--> 612         rgba = np.empty(shape=xa.shape + (4,), dtype=lut.dtype)
    613         lut.take(xa, axis=0, mode='clip', out=rgba)
    614         if vtype == 'scalar':

MemoryError: 
<matplotlib.figure.Figure at 0x7f56542fa110>

In [9]:
random.shuffle(data)

In [10]:
image_size = 50
image_dim = 3 #RGB


X = np.ndarray((len(data), image_size, image_size, image_dim), dtype=np.float32)
y = np.ndarray((len(data), 1), dtype=np.int32)


for i, d in enumerate(data):
    X[i] = d[0]
    y[i] = d[1]
    
img_index = 2


img = X[img_index]
print "image dimensions:", img.shape
print "target category:", (['urban', 'nonurban'][y[img_index][0]])


imshow(img, cmap = plt.get_cmap('gray'), vmin = 0, vmax = 1,  interpolation='nearest')
plt.axis('off')
plt.show()


image dimensions: (50, 50, 3)
target category: urban

In [13]:
# build up a training set of image pixels as the feature data

trainingSplit = int(.7 * X.shape[0])

X_train = X[:trainingSplit]
y_train = y[:trainingSplit]
X_test = X[trainingSplit:]
y_test = y[trainingSplit:]

X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_train /= 50.0
X_test /= 50.0

In [15]:
pickle_file = imageFolder + '.pickle'

try:
    f = open(pickle_file, 'wb')
    save = {
        'X_train': X_train,
        'y_train': y_train,
        'X_test': X_test,
        'y_test': y_test,
    }
    pickle.dump(save, f, pickle.HIGHEST_PROTOCOL)
    f.close()
except Exception as e:
    print 'Unable to save data to', pickle_file, ':', e
    raise
    
statinfo = os.stat(pickle_file)
print 'Saved data to', pickle_file
print 'Compressed pickle size:', statinfo.st_size


Saved data to -images.pickle
Compressed pickle size: 63008781