In [1]:
# These are all the modules we'll be using later. Make sure you can import them
# before proceeding further.
from __future__ import print_function
import matplotlib.pyplot as plt
import numpy as np
import os
import sys
from scipy import ndimage
from PIL import Image
import matplotlib.image as img
import scipy.ndimage as ndimage
from scipy import ndimage as nimg
import numpy as np


# Config the matplotlib backend as plotting inline in IPython
%matplotlib inline

In [2]:
imwheel1 = img.imread('./324.png')
gflt = nimg.gaussian_filter(imwheel1, sigma=5)
sflt = imwheel1-gflt
flt = ndimage.median_filter(sflt, size=10, mode='reflect', cval=0.0, origin=0)

fig = plt.figure(figsize=(15,10))
plt.subplot(141)
plt.imshow(gflt,cmap='gray')
plt.subplot(142)
plt.imshow(imwheel1,cmap='gray')
plt.subplot(143)
plt.imshow(sflt,cmap='gray')
plt.subplot(144)
plt.imshow(flt,cmap='gray')
plt.show()



In [3]:
imhead = img.imread('./552.png')
gflt = nimg.gaussian_filter(imhead, sigma=5)
sflt = imhead-gflt
flt = ndimage.median_filter(sflt, size=10, mode='reflect', cval=0.0, origin=0)

fig = plt.figure(figsize=(15,10))
plt.subplot(141)
plt.imshow(gflt,cmap='gray')
plt.subplot(142)
plt.imshow(imhead,cmap='gray')
plt.subplot(143)
plt.imshow(sflt,cmap='gray')
plt.subplot(144)
plt.imshow(flt,cmap='gray')
plt.show()



In [5]:
imleg = img.imread('./868.png')
gflt = nimg.gaussian_filter(imleg, sigma=5)
sflt = imleg-gflt
flt = ndimage.median_filter(sflt, size=10, mode='reflect', cval=0.0, origin=0)

fig = plt.figure(figsize=(15,10))
plt.subplot(141)
plt.imshow(gflt,cmap='gray')
plt.subplot(142)
plt.imshow(imleg,cmap='gray')
plt.subplot(143)
plt.imshow(sflt,cmap='gray')
plt.subplot(144)
plt.imshow(flt,cmap='gray')
plt.show()



In [4]:
imarm = img.imread('./1322.png')
gflt = nimg.gaussian_filter(imarm, sigma=5)
sflt = imarm-gflt
flt = ndimage.median_filter(sflt, size=10, mode='reflect', cval=0.0, origin=0)

fig = plt.figure(figsize=(15,10))
plt.subplot(141)
plt.imshow(gflt,cmap='gray')
plt.subplot(142)
plt.imshow(imarm,cmap='gray')
plt.subplot(143)
plt.imshow(sflt,cmap='gray')
plt.subplot(144)
plt.imshow(flt,cmap='gray')
plt.show()



In [15]:
image_size = 50 # Pixel width and height.
size = image_size,image_size
pixel_depth = 255.0 # Number of levels per pixel.
sizes = [782,621,221,472]
folders = [
    r'data2//Arms//',
    r'data2//Figure_normal_legs//',
    r'data2//FigureWheels//',
    r'data2//Head//',
]

def load_letter(folder, min_num_images):
  """Load the data for a single label."""
  image_files = os.listdir(folder)
  dataset = np.ndarray(shape=(len(image_files), image_size, image_size),
                         dtype=np.float32)
  print(folder)
  num_images = 0
  for image in image_files:
    image_file = os.path.join(folder, image)
    try:
      img = Image.open(image_file)
      newImg = img.resize(size, Image.ANTIALIAS)
      image_data = (np.array(newImg).astype(float) - 
                    pixel_depth / 2) / pixel_depth
      if image_data.shape != (image_size, image_size):
        raise Exception('Unexpected image shape: %s' % str(image_data.shape))
      dataset[num_images, :, :] = image_data
      num_images = num_images + 1
    except IOError as e:
      print('Could not read:', image_file, ':', e, '- it\'s ok, skipping.')
    
  dataset = dataset[0:num_images, :, :]
  if num_images < min_num_images:
    raise Exception('Many fewer images than expected: %d < %d' %
                    (num_images, min_num_images))
    
  print('Full dataset tensor:', dataset.shape)
  print('Mean:', np.mean(dataset))
  print('Standard deviation:', np.std(dataset))
  return dataset

X_datasets = list()
print(X_datasets)
Y_datasets = list()
for idx in range(len(folders)):
    folder = folders[idx] 
    X_datasets.append(load_letter(folder, sizes[idx]))
    labels = np.zeros((X_datasets[-1].shape[0],len(folders)))
    labels[:,idx] = 1
    Y_datasets.append(labels)


[]
data2//Arms//
Could not read: data2//Arms//Thumbs.db : cannot identify image file 'data2//Arms//Thumbs.db' - it's ok, skipping.
Full dataset tensor: (782, 50, 50)
Mean: 0.112784
Standard deviation: 0.159394
data2//Figure_normal_legs//
Could not read: data2//Figure_normal_legs//Thumbs.db : cannot identify image file 'data2//Figure_normal_legs//Thumbs.db' - it's ok, skipping.
Full dataset tensor: (621, 50, 50)
Mean: 0.0887179
Standard deviation: 0.17895
data2//FigureWheels//
Could not read: data2//FigureWheels//Thumbs.db : cannot identify image file 'data2//FigureWheels//Thumbs.db' - it's ok, skipping.
Full dataset tensor: (221, 50, 50)
Mean: 0.0751223
Standard deviation: 0.18484
data2//Head//
Could not read: data2//Head//Thumbs.db : cannot identify image file 'data2//Head//Thumbs.db' - it's ok, skipping.
Full dataset tensor: (472, 50, 50)
Mean: 0.0374206
Standard deviation: 0.210797

In [5]:
imwheel = img.imread('./1480.png')
gflt = nimg.gaussian_filter(imwheel, sigma=5)
sflt = imwheel-gflt
flt = ndimage.median_filter(sflt, size=10, mode='reflect', cval=0.0, origin=0)

fig = plt.figure(figsize=(15,10))
plt.subplot(141)
plt.imshow(gflt,cmap='gray')
plt.subplot(142)
plt.imshow(imwheel,cmap='gray')
plt.subplot(143)
plt.imshow(sflt,cmap='gray')
plt.subplot(144)
plt.imshow(flt,cmap='gray')
plt.show()



In [ ]:
from sklearn.model_selection import train_test_split

X_datasets2 = np.concatenate(X_datasets)
Y_datasets2 = np.concatenate(Y_datasets)
print("Total samples number:",X_datasets2.shape)
X_trains,X_tests,Y_trains,Y_tests = train_test_split(X_datasets2,Y_datasets2,test_size=0.25)
print("Samples for tests:",Y_tests.shape[0])
print("Samples for trains:",Y_trains.shape[0])
plt.imshow(X_tests[0],cmap='gray')


Total samples number: (2101, 50, 50)
Samples for tests: 526
Samples for trains: 1575
Out[ ]:
<matplotlib.image.AxesImage at 0x11be47080>

In [ ]:
# Create first network with Keras
from keras.models import Sequential
from keras.layers import Dense,Activation,Reshape
from keras.callbacks import EarlyStopping,ModelCheckpoint
import numpy

callbacks = [
    EarlyStopping(monitor='val_loss', min_delta=0.00001, verbose=1),
    # EarlyStopping(monitor='val_loss', patience=2, verbose=0),
    ModelCheckpoint(filepath='./weights.net', verbose=1, save_best_only=True),
    
]

# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)

input_dim = X_trains[0].shape[0]*X_trains[0].shape[1]
print((X_trains[0].shape[0],X_trains[0].shape[1]))
print(Y_trains[0].shape[0])
# create model
model = Sequential()
model.add(Reshape((input_dim,), input_shape=(X_trains[0].shape[0],X_trains[0].shape[1])))
model.add(Dense(input_dim, input_shape = (input_dim,), init='uniform', activation='relu'))
model.add(Dense(int(input_dim/2), init='uniform', activation='relu'))
model.add(Dense(int(input_dim), init='uniform', activation='relu'))
model.add(Dense(Y_trains[0].shape[0],init='uniform', name="output"))
model.add(Activation('softmax', name="softmax"))
model.summary()

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Fit the model
model.fit(X_trains, 
          Y_trains, 
          epochs=20, 
          batch_size=10, 
            )
# calculate predictions
results = model.evaluate(X_tests, Y_tests, batch_size=32, verbose=1, sample_weight=None)
# round predictions
print(results)


Using TensorFlow backend.
/Applications/anaconda/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
  return f(*args, **kwds)
(50, 50)
4
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
reshape_1 (Reshape)          (None, 2500)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 2500)              6252500   
_________________________________________________________________
dense_2 (Dense)              (None, 1250)              3126250   
_________________________________________________________________
dense_3 (Dense)              (None, 2500)              3127500   
_________________________________________________________________
output (Dense)               (None, 4)                 10004     
_________________________________________________________________
softmax (Activation)         (None, 4)                 0         
=================================================================
Total params: 12,516,254
Trainable params: 12,516,254
Non-trainable params: 0
_________________________________________________________________
/Applications/anaconda/lib/python3.6/site-packages/ipykernel_launcher.py:24: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(2500, input_shape=(2500,), activation="relu", kernel_initializer="uniform")`
/Applications/anaconda/lib/python3.6/site-packages/ipykernel_launcher.py:25: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(1250, activation="relu", kernel_initializer="uniform")`
/Applications/anaconda/lib/python3.6/site-packages/ipykernel_launcher.py:26: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(2500, activation="relu", kernel_initializer="uniform")`
/Applications/anaconda/lib/python3.6/site-packages/ipykernel_launcher.py:27: UserWarning: Update your `Dense` call to the Keras 2 API: `Dense(4, name="output", kernel_initializer="uniform")`
Epoch 1/20
1575/1575 [==============================] - 29s 19ms/step - loss: 0.3305 - acc: 0.8756
Epoch 2/20
1575/1575 [==============================] - 26s 17ms/step - loss: 0.2301 - acc: 0.9130
Epoch 3/20
1575/1575 [==============================] - 27s 17ms/step - loss: 0.1900 - acc: 0.9322
Epoch 4/20
1575/1575 [==============================] - 26s 17ms/step - loss: 0.1194 - acc: 0.9548
Epoch 5/20
1575/1575 [==============================] - 29s 19ms/step - loss: 0.1093 - acc: 0.9592
Epoch 6/20
1575/1575 [==============================] - 33s 21ms/step - loss: 0.1270 - acc: 0.9679
Epoch 7/20
1575/1575 [==============================] - 36s 23ms/step - loss: 0.1046 - acc: 0.9656
Epoch 8/20
1575/1575 [==============================] - 32s 21ms/step - loss: 0.0956 - acc: 0.9708
Epoch 9/20
1575/1575 [==============================] - 34s 21ms/step - loss: 0.0875 - acc: 0.9765
Epoch 10/20
1575/1575 [==============================] - 31s 20ms/step - loss: 0.0710 - acc: 0.9763
Epoch 11/20
1575/1575 [==============================] - 30s 19ms/step - loss: 0.1362 - acc: 0.9767
Epoch 12/20
1575/1575 [==============================] - 31s 20ms/step - loss: 0.0920 - acc: 0.9773
Epoch 13/20
1575/1575 [==============================] - 31s 20ms/step - loss: 0.1301 - acc: 0.9792
Epoch 14/20
1575/1575 [==============================] - 32s 20ms/step - loss: 0.0910 - acc: 0.9849
Epoch 15/20
1575/1575 [==============================] - 32s 20ms/step - loss: 0.0694 - acc: 0.9854
Epoch 16/20
1575/1575 [==============================] - 35s 22ms/step - loss: 0.0586 - acc: 0.9917
Epoch 17/20
1575/1575 [==============================] - 29s 18ms/step - loss: 0.0549 - acc: 0.9927
Epoch 18/20
 320/1575 [=====>........................] - ETA: 27s - loss: 0.0815 - acc: 0.9820

In [ ]:


In [ ]: