├── data ├── test │ ├── 021002_004.png │ ├── 021003_004.png │ └── 021011_004.png └── train │ ├── A │ ├── 021001_001.png │ ├── 021001_002.png │ ├── 021001_003.png │ └── 021001_004.png │ ├── B │ ├── 021005_000.png │ ├── 021005_001.png │ ├── 021005_002.png │ ├── 021005_003.png │ └── 021005_004.png │ ├── C │ ├── 021010_000.png │ ├── 021010_001.png │ ├── 021010_002.png │ ├── 021010_003.png │ └── 021010_004.png │ ├── D │ ├── 021002_000.png │ ├── 021002_001.png │ └── 021002_003.png │ ├── E │ ├── 021003_000.png │ ├── 021003_001.png │ └── 021003_003.png │ ├── F │ ├── 021004_001.png │ ├── 021004_002.png │ ├── 021004_003.png │ └── 021004_004.png │ ├── G │ ├── 021006_000.png │ ├── 021006_001.png │ ├── 021006_002.png │ └── 021006_003.png │ ├── H │ ├── 021007_000.png │ ├── 021007_001.png │ ├── 021007_002.png │ ├── 021007_003.png │ └── 021007_004.png │ ├── T │ ├── 021008_000.png │ ├── 021008_001.png │ ├── 021008_002.png │ └── 021008_003.png │ ├── U │ ├── 021011_000.png │ ├── 021011_002.png │ └── 021011_003.png │ ├── Y │ ├── 021012_000.png │ ├── 021012_001.png │ ├── 021012_002.png │ ├── 021012_003.png │ └── 021012_004.png │ └── Z │ ├── 021009_000.png │ ├── 021009_001.png │ ├── 021009_002.png │ └── 021009_003.png ├── README.md └── signatue_recognition.py /data/test/021002_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/test/021002_004.png -------------------------------------------------------------------------------- /data/test/021003_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/test/021003_004.png -------------------------------------------------------------------------------- /data/test/021011_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/test/021011_004.png -------------------------------------------------------------------------------- /data/train/A/021001_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/A/021001_001.png -------------------------------------------------------------------------------- /data/train/A/021001_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/A/021001_002.png -------------------------------------------------------------------------------- /data/train/A/021001_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/A/021001_003.png -------------------------------------------------------------------------------- /data/train/A/021001_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/A/021001_004.png -------------------------------------------------------------------------------- /data/train/B/021005_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/B/021005_000.png -------------------------------------------------------------------------------- /data/train/B/021005_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/B/021005_001.png -------------------------------------------------------------------------------- /data/train/B/021005_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/B/021005_002.png -------------------------------------------------------------------------------- /data/train/B/021005_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/B/021005_003.png -------------------------------------------------------------------------------- /data/train/B/021005_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/B/021005_004.png -------------------------------------------------------------------------------- /data/train/C/021010_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/C/021010_000.png -------------------------------------------------------------------------------- /data/train/C/021010_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/C/021010_001.png -------------------------------------------------------------------------------- /data/train/C/021010_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/C/021010_002.png -------------------------------------------------------------------------------- /data/train/C/021010_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/C/021010_003.png -------------------------------------------------------------------------------- /data/train/C/021010_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/C/021010_004.png -------------------------------------------------------------------------------- /data/train/D/021002_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/D/021002_000.png -------------------------------------------------------------------------------- /data/train/D/021002_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/D/021002_001.png -------------------------------------------------------------------------------- /data/train/D/021002_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/D/021002_003.png -------------------------------------------------------------------------------- /data/train/E/021003_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/E/021003_000.png -------------------------------------------------------------------------------- /data/train/E/021003_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/E/021003_001.png -------------------------------------------------------------------------------- /data/train/E/021003_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/E/021003_003.png -------------------------------------------------------------------------------- /data/train/F/021004_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/F/021004_001.png -------------------------------------------------------------------------------- /data/train/F/021004_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/F/021004_002.png -------------------------------------------------------------------------------- /data/train/F/021004_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/F/021004_003.png -------------------------------------------------------------------------------- /data/train/F/021004_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/F/021004_004.png -------------------------------------------------------------------------------- /data/train/G/021006_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/G/021006_000.png -------------------------------------------------------------------------------- /data/train/G/021006_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/G/021006_001.png -------------------------------------------------------------------------------- /data/train/G/021006_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/G/021006_002.png -------------------------------------------------------------------------------- /data/train/G/021006_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/G/021006_003.png -------------------------------------------------------------------------------- /data/train/H/021007_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/H/021007_000.png -------------------------------------------------------------------------------- /data/train/H/021007_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/H/021007_001.png -------------------------------------------------------------------------------- /data/train/H/021007_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/H/021007_002.png -------------------------------------------------------------------------------- /data/train/H/021007_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/H/021007_003.png -------------------------------------------------------------------------------- /data/train/H/021007_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/H/021007_004.png -------------------------------------------------------------------------------- /data/train/T/021008_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/T/021008_000.png -------------------------------------------------------------------------------- /data/train/T/021008_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/T/021008_001.png -------------------------------------------------------------------------------- /data/train/T/021008_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/T/021008_002.png -------------------------------------------------------------------------------- /data/train/T/021008_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/T/021008_003.png -------------------------------------------------------------------------------- /data/train/U/021011_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/U/021011_000.png -------------------------------------------------------------------------------- /data/train/U/021011_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/U/021011_002.png -------------------------------------------------------------------------------- /data/train/U/021011_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/U/021011_003.png -------------------------------------------------------------------------------- /data/train/Y/021012_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Y/021012_000.png -------------------------------------------------------------------------------- /data/train/Y/021012_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Y/021012_001.png -------------------------------------------------------------------------------- /data/train/Y/021012_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Y/021012_002.png -------------------------------------------------------------------------------- /data/train/Y/021012_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Y/021012_003.png -------------------------------------------------------------------------------- /data/train/Y/021012_004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Y/021012_004.png -------------------------------------------------------------------------------- /data/train/Z/021009_000.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Z/021009_000.png -------------------------------------------------------------------------------- /data/train/Z/021009_001.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Z/021009_001.png -------------------------------------------------------------------------------- /data/train/Z/021009_002.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Z/021009_002.png -------------------------------------------------------------------------------- /data/train/Z/021009_003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/beyhangl/Signature_Recognition_DeepLearning/HEAD/data/train/Z/021009_003.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Signature_Recognition_DeepLearning 2 | Signature recognition with Keras,Deep learning 3 | 4 | This repo predict new signature class with %98.04 error rate in 10 epoch 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /signatue_recognition.py: -------------------------------------------------------------------------------- 1 | import keras 2 | from sklearn.model_selection import train_test_split 3 | 4 | TEST_DIR='/home/kafein/Downloads/test/' 5 | 6 | SIGNATURE_CLASSES = ['A', 'B', 'C','D','E','F','K','L','M','N','O','P'] 7 | 8 | import os, random 9 | import numpy as np 10 | import pandas as pd 11 | from sklearn.model_selection import train_test_split 12 | from sklearn.metrics import log_loss 13 | from sklearn.preprocessing import LabelEncoder 14 | 15 | import matplotlib.pyplot as plt 16 | from matplotlib import ticker 17 | #import seaborn as sns 18 | #%matplotlib inline 19 | 20 | from keras.models import Sequential 21 | from keras.layers import Dropout, Flatten, Convolution2D, MaxPooling2D, ZeroPadding2D, Dense, Activation 22 | from keras.optimizers import SGD, Adagrad 23 | from keras.callbacks import EarlyStopping 24 | from keras.utils import np_utils 25 | from keras.optimizers import RMSprop, Adam 26 | from keras import backend as K 27 | ROWS = 190 28 | COLS = 160 29 | CHANNELS = 3 30 | TRAIN_DIR="/home/kafein/Downloads/data/" 31 | 32 | def root_mean_squared_error(y_true, y_pred): 33 | """ 34 | RMSE loss function 35 | """ 36 | return K.sqrt(K.mean(K.square(y_pred - y_true), axis=-1)) 37 | 38 | 39 | def get_images(fish): 40 | """Load files from train folder""" 41 | fish_dir = TRAIN_DIR+'{}'.format(fish) 42 | images = [fish+'/'+im for im in os.listdir(fish_dir)] 43 | return images 44 | 45 | #def read_image(src): 46 | # """Read and resize individual images""" 47 | # im = cv2.imread(src, cv2.IMREAD_COLOR) 48 | # im = cv2.resize(im, (COLS, ROWS), interpolation=cv2.INTER_CUBIC) 49 | # return im 50 | def read_image(src): 51 | import os 52 | from scipy import misc 53 | filepath=src 54 | im=misc.imread(filepath) 55 | import scipy.misc as mc 56 | 57 | return mc.imresize(im,(ROWS,COLS)) 58 | #grandPadre=read_gray_scale() 59 | 60 | 61 | files = [] 62 | y_all = [] 63 | 64 | for fish in SIGNATURE_CLASSES: 65 | fish_files = get_images(fish) 66 | files.extend(fish_files) 67 | 68 | y_fish = np.tile(fish, len(fish_files)) 69 | y_all.extend(y_fish) 70 | print("{0} photos of {1}".format(len(fish_files), fish)) 71 | 72 | y_all = np.array(y_all) 73 | print(len(files)) 74 | print(len(y_all)) 75 | 76 | 77 | 78 | 79 | X_all = np.ndarray((len(files), ROWS, COLS, CHANNELS), dtype=np.uint8) 80 | 81 | for i, im in enumerate(files): 82 | X_all[i] = read_image(TRAIN_DIR+im) 83 | if i%1000 == 0: print('Processed {} of {}'.format(i, len(files))) 84 | 85 | print(X_all.shape) 86 | # One Hot Encoding Labels 87 | y_all = LabelEncoder().fit_transform(y_all) 88 | y_all = np_utils.to_categorical(y_all) 89 | 90 | 91 | 92 | 93 | from sklearn.model_selection import train_test_split 94 | 95 | X_train, X_valid, y_train, y_valid = train_test_split(X_all, y_all, 96 | test_size=0.1, random_state=23, 97 | stratify=y_all) 98 | 99 | 100 | 101 | optimizer = RMSprop(lr=1e-4) 102 | objective = 'categorical_crossentropy' 103 | def center_normalize(x): 104 | return (x - K.mean(x)) / K.std(x) 105 | print('1') 106 | model = Sequential() 107 | 108 | model.add(Activation(activation=center_normalize, input_shape=(ROWS, COLS, CHANNELS))) 109 | 110 | model.add(Convolution2D(64, 3, 3, border_mode='same')) 111 | model.add(Activation('relu')) 112 | model.add(Convolution2D(64, 3, 3, border_mode='valid')) 113 | model.add(Activation('relu')) 114 | model.add(ZeroPadding2D(padding=(1, 1))) 115 | model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 116 | model.add(Dropout(0.25)) 117 | 118 | model.add(Convolution2D(96, 3, 3, border_mode='same')) 119 | model.add(Activation('relu')) 120 | model.add(Convolution2D(96, 3, 3, border_mode='valid')) 121 | model.add(Activation('relu')) 122 | model.add(ZeroPadding2D(padding=(1, 1))) 123 | model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 124 | model.add(Dropout(0.25)) 125 | 126 | model.add(Convolution2D(128, 2, 2, border_mode='same')) 127 | model.add(Activation('relu')) 128 | model.add(Convolution2D(128, 2, 2, border_mode='same')) 129 | model.add(Activation('relu')) 130 | model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2))) 131 | model.add(Dropout(0.25)) 132 | 133 | model.add(Flatten()) 134 | model.add(Dense(1024)) 135 | model.add(Activation('relu')) 136 | model.add(Dropout(0.5)) 137 | 138 | 139 | model.add(Dense(len(SIGNATURE_CLASSES))) 140 | model.add(Activation('sigmoid')) 141 | 142 | adam = Adam(lr=0.0001) 143 | model.compile(optimizer=adam, loss=root_mean_squared_error) 144 | 145 | 146 | early_stopping = EarlyStopping(monitor='val_loss', patience=4, verbose=1, mode='auto') 147 | 148 | model.fit(X_train, y_train, batch_size=64, nb_epoch=3, 149 | validation_split=0.1, verbose=1, shuffle=True, callbacks=[early_stopping]) 150 | preds = model.predict(X_valid, verbose=1) 151 | print("Validation Log Loss: {}".format(log_loss(y_valid, preds))) 152 | 153 | 154 | 155 | 156 | test_files = [im for im in os.listdir(TEST_DIR)] 157 | test = np.ndarray((len(test_files), ROWS, COLS, CHANNELS), dtype=np.uint8) 158 | 159 | for i, im in enumerate(test_files): 160 | test[i] = read_image(TEST_DIR+im) 161 | 162 | test_preds = model.predict(test, verbose=1) 163 | submission = pd.DataFrame(test_preds, columns=SIGNATURE_CLASSES) 164 | submission.insert(0, 'image', test_files) 165 | submission.head() 166 | 167 | submission.to_csv('/home/kafein/Downloads/signatureResults.csv',index=False) --------------------------------------------------------------------------------