├── README.md ├── preprocessing_and_training.ipynb ├── real_time.ipynb └── sign_language /README.md: -------------------------------------------------------------------------------- 1 | # American-Sign-Language-Recognition 2 | Real time American Sign Language Recognition 3 | 4 | ![amer_sign2](https://user-images.githubusercontent.com/34737471/55292500-52acb580-5409-11e9-9a78-7cdc0d8da8b6.png) 5 | 6 | ## Files in this repository 7 | preprocessing_and_training.ipynb contains the preporcessing and model and the real_time.ipynb is for real time Real time American Sign Language Recognition the third file is the trained file obtained from training the model on Gpu 8 | 9 | ### Requirements 10 | Python3
11 | Tensorflow
12 | Keras
13 | opencv
14 | Matplotlib
15 | Cuda 9.0
16 | 17 | ### sign2text 18 | In this project I have used the kaggle American Language Recognition dataset.The model takes live video from the webcam and predicts the alphabet based on the hand gesture made by the user using a Convolutional Neural Network . There a total of 24 classes in the dataset. 19 | 20 | 21 | ### Real Time Prediction using webcam 22 | The user has to put his hand inside the green box which is the region of interest and make the gesture the model predicts the alphabet made by the user 23 | 24 | ### Neural Network 25 | CONV2D->RELU->MAXPOOLING->CONV2D->RELU->MAXPOOLING->DROPOUT->CONV2D->RELU->MAXPOOLING->DROPOUT->FLATTEN->DENSE->DROPOUT-> DENSE->SOFTMAX 26 | 27 | 28 | ### Training Accuracy = 99.64% 29 | ### Test Accuracy = 97.02% 30 | 31 | ### Results 32 | ![1](https://user-images.githubusercontent.com/34737471/64022970-f20adb80-cb54-11e9-8343-01b2b6a540a0.PNG) 33 | 34 | ![2](https://user-images.githubusercontent.com/34737471/64023090-326a5980-cb55-11e9-8eda-e44398928fbf.PNG) 35 | ![3](https://user-images.githubusercontent.com/34737471/64023173-5af25380-cb55-11e9-8f99-40afee9a9656.PNG) 36 | 37 | ![download](https://user-images.githubusercontent.com/34737471/55292483-1c6f3600-5409-11e9-9bea-b5420129243c.png) 38 | 39 | The trained model can be downloaded from this link [model](https://drive.google.com/open?id=1K-Nx2T7xTPAbsJ7DGE_rLhpHNshuHbRo) 40 | ## References 41 | Dataset link https://www.kaggle.com/datamunge/sign-language-mnist 42 | -------------------------------------------------------------------------------- /preprocessing_and_training.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import pandas as pd\n", 10 | "import numpy as np" 11 | ] 12 | }, 13 | { 14 | "cell_type": "code", 15 | "execution_count": 2, 16 | "metadata": {}, 17 | "outputs": [ 18 | { 19 | "data": { 20 | "text/html": [ 21 | "
\n", 22 | "\n", 35 | "\n", 36 | " \n", 37 | " \n", 38 | " \n", 39 | " \n", 40 | " \n", 41 | " \n", 42 | " \n", 43 | " \n", 44 | " \n", 45 | " \n", 46 | " \n", 47 | " \n", 48 | " \n", 49 | " \n", 50 | " \n", 51 | " \n", 52 | " \n", 53 | " \n", 54 | " \n", 55 | " \n", 56 | " \n", 57 | " \n", 58 | " \n", 59 | " \n", 60 | " \n", 61 | " \n", 62 | " \n", 63 | " \n", 64 | " \n", 65 | " \n", 66 | " \n", 67 | " \n", 68 | " \n", 69 | " \n", 70 | " \n", 71 | " \n", 72 | " \n", 73 | " \n", 74 | " \n", 75 | " \n", 76 | " \n", 77 | " \n", 78 | " \n", 79 | " \n", 80 | " \n", 81 | " \n", 82 | " \n", 83 | " \n", 84 | " \n", 85 | " \n", 86 | " \n", 87 | " \n", 88 | " \n", 89 | " \n", 90 | " \n", 91 | " \n", 92 | " \n", 93 | " \n", 94 | " \n", 95 | " \n", 96 | " \n", 97 | " \n", 98 | " \n", 99 | " \n", 100 | " \n", 101 | " \n", 102 | " \n", 103 | " \n", 104 | " \n", 105 | " \n", 106 | " \n", 107 | " \n", 108 | " \n", 109 | " \n", 110 | " \n", 111 | " \n", 112 | " \n", 113 | " \n", 114 | " \n", 115 | " \n", 116 | " \n", 117 | " \n", 118 | " \n", 119 | " \n", 120 | " \n", 121 | " \n", 122 | " \n", 123 | " \n", 124 | " \n", 125 | " \n", 126 | " \n", 127 | " \n", 128 | " \n", 129 | " \n", 130 | " \n", 131 | " \n", 132 | " \n", 133 | " \n", 134 | " \n", 135 | " \n", 136 | " \n", 137 | " \n", 138 | " \n", 139 | " \n", 140 | " \n", 141 | " \n", 142 | " \n", 143 | " \n", 144 | " \n", 145 | " \n", 146 | " \n", 147 | " \n", 148 | " \n", 149 | " \n", 150 | " \n", 151 | " \n", 152 | " \n", 153 | " \n", 154 | " \n", 155 | " \n", 156 | " \n", 157 | " \n", 158 | " \n", 159 | " \n", 160 | " \n", 161 | " \n", 162 | " \n", 163 | " \n", 164 | " \n", 165 | " \n", 166 | " \n", 167 | " \n", 168 | " \n", 169 | " \n", 170 | " \n", 171 | " \n", 172 | " \n", 173 | " \n", 174 | " \n", 175 | " \n", 176 | " \n", 177 | " \n", 178 | " \n", 179 | " \n", 180 | " \n", 181 | " \n", 182 | " \n", 183 | " \n", 184 | "
pixel1pixel2pixel3pixel4pixel5pixel6pixel7pixel8pixel9pixel10...pixel775pixel776pixel777pixel778pixel779pixel780pixel781pixel782pixel783pixel784
0149149150150150151151150151152...138148127898296106112120107
1126128131132133134135135136138...47104194183186184184184182180
285889296105123135143147152...68166242227230227226225224222
3203205207206207209210209210209...154248247248253236230240253255
4188191193195199201202203203203...26406448294649464653
\n", 185 | "

5 rows × 784 columns

\n", 186 | "
" 187 | ], 188 | "text/plain": [ 189 | " pixel1 pixel2 pixel3 pixel4 pixel5 pixel6 pixel7 pixel8 pixel9 \\\n", 190 | "0 149 149 150 150 150 151 151 150 151 \n", 191 | "1 126 128 131 132 133 134 135 135 136 \n", 192 | "2 85 88 92 96 105 123 135 143 147 \n", 193 | "3 203 205 207 206 207 209 210 209 210 \n", 194 | "4 188 191 193 195 199 201 202 203 203 \n", 195 | "\n", 196 | " pixel10 ... pixel775 pixel776 pixel777 pixel778 pixel779 \\\n", 197 | "0 152 ... 138 148 127 89 82 \n", 198 | "1 138 ... 47 104 194 183 186 \n", 199 | "2 152 ... 68 166 242 227 230 \n", 200 | "3 209 ... 154 248 247 248 253 \n", 201 | "4 203 ... 26 40 64 48 29 \n", 202 | "\n", 203 | " pixel780 pixel781 pixel782 pixel783 pixel784 \n", 204 | "0 96 106 112 120 107 \n", 205 | "1 184 184 184 182 180 \n", 206 | "2 227 226 225 224 222 \n", 207 | "3 236 230 240 253 255 \n", 208 | "4 46 49 46 46 53 \n", 209 | "\n", 210 | "[5 rows x 784 columns]" 211 | ] 212 | }, 213 | "execution_count": 2, 214 | "metadata": {}, 215 | "output_type": "execute_result" 216 | } 217 | ], 218 | "source": [ 219 | "df_train=pd.read_csv('sign_mnist_train.csv')\n", 220 | "df_test=pd.read_csv('sign_mnist_test.csv')\n", 221 | "y_train=df_train['label'].values\n", 222 | "y_test=df_test['label'].values\n", 223 | "df_train.drop('label',axis=1,inplace=True)\n", 224 | "df_test.drop('label',axis=1,inplace=True)\n", 225 | "df_test.head()" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 3, 231 | "metadata": {}, 232 | "outputs": [ 233 | { 234 | "data": { 235 | "text/plain": [ 236 | "array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17,\n", 237 | " 18, 19, 20, 21, 22, 23, 24], dtype=int64)" 238 | ] 239 | }, 240 | "execution_count": 3, 241 | "metadata": {}, 242 | "output_type": "execute_result" 243 | } 244 | ], 245 | "source": [ 246 | "x_train=df_train.values\n", 247 | "x_test=df_test.values\n", 248 | "unique_val = np.array(y_train)\n", 249 | "np.unique(unique_val)" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": 4, 255 | "metadata": {}, 256 | "outputs": [], 257 | "source": [ 258 | "x_train=np.array(x_train.reshape(-1,28,28,1))\n", 259 | "x_test=np.array(x_test.reshape(-1,28,28,1))" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 5, 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "name": "stdout", 269 | "output_type": "stream", 270 | "text": [ 271 | "(27455, 28, 28, 1)\n", 272 | "(7172, 28, 28, 1)\n" 273 | ] 274 | } 275 | ], 276 | "source": [ 277 | "print(x_train.shape)\n", 278 | "print(x_test.shape)" 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "execution_count": 6, 284 | "metadata": {}, 285 | "outputs": [], 286 | "source": [ 287 | "from sklearn.preprocessing import LabelBinarizer\n", 288 | "lb_train= LabelBinarizer()\n", 289 | "lb_test=LabelBinarizer()\n", 290 | "y_train=lb_train.fit_transform(y_train)\n", 291 | "y_test=lb_test.fit_transform(y_test)" 292 | ] 293 | }, 294 | { 295 | "cell_type": "code", 296 | "execution_count": 7, 297 | "metadata": {}, 298 | "outputs": [ 299 | { 300 | "name": "stdout", 301 | "output_type": "stream", 302 | "text": [ 303 | "[[0 0 0 ... 0 0 0]\n", 304 | " [0 0 0 ... 0 0 0]\n", 305 | " [0 0 1 ... 0 0 0]\n", 306 | " ...\n", 307 | " [0 0 0 ... 0 0 0]\n", 308 | " [0 0 0 ... 0 0 0]\n", 309 | " [0 0 0 ... 0 1 0]]\n", 310 | "[[0 0 0 ... 0 0 0]\n", 311 | " [0 0 0 ... 0 0 0]\n", 312 | " [0 0 0 ... 0 0 0]\n", 313 | " ...\n", 314 | " [0 0 1 ... 0 0 0]\n", 315 | " [0 0 0 ... 0 0 0]\n", 316 | " [0 0 1 ... 0 0 0]]\n" 317 | ] 318 | } 319 | ], 320 | "source": [ 321 | "print(y_train)\n", 322 | "print(y_test)" 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 9, 328 | "metadata": {}, 329 | "outputs": [ 330 | { 331 | "data": { 332 | "text/plain": [ 333 | "" 334 | ] 335 | }, 336 | "execution_count": 9, 337 | "metadata": {}, 338 | "output_type": "execute_result" 339 | }, 340 | { 341 | "data": { 342 | "image/png": "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\n", 343 | "text/plain": [ 344 | "
" 345 | ] 346 | }, 347 | "metadata": { 348 | "needs_background": "light" 349 | }, 350 | "output_type": "display_data" 351 | } 352 | ], 353 | "source": [ 354 | "import matplotlib.pyplot as plt\n", 355 | "plt.imshow(x_train[10].reshape(28,28),cmap='gray')" 356 | ] 357 | }, 358 | { 359 | "cell_type": "code", 360 | "execution_count": 10, 361 | "metadata": {}, 362 | "outputs": [], 363 | "source": [ 364 | "x_train=x_train/255\n", 365 | "x_test=x_test/255" 366 | ] 367 | }, 368 | { 369 | "cell_type": "code", 370 | "execution_count": 11, 371 | "metadata": {}, 372 | "outputs": [ 373 | { 374 | "name": "stderr", 375 | "output_type": "stream", 376 | "text": [ 377 | "Using TensorFlow backend.\n" 378 | ] 379 | } 380 | ], 381 | "source": [ 382 | "import keras\n", 383 | "from keras.models import Sequential\n", 384 | "from keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Dropout" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 12, 390 | "metadata": {}, 391 | "outputs": [], 392 | "source": [ 393 | "batch_size = 128\n", 394 | "num_classes = 24\n", 395 | "epochs = 100\n" 396 | ] 397 | }, 398 | { 399 | "cell_type": "code", 400 | "execution_count": 13, 401 | "metadata": {}, 402 | "outputs": [], 403 | "source": [ 404 | "model = Sequential()\n", 405 | "model.add(Conv2D(64, kernel_size=(3,3), activation = 'relu', input_shape=(28, 28 ,1) ))\n", 406 | "model.add(MaxPooling2D(pool_size = (2, 2)))\n", 407 | "\n", 408 | "model.add(Conv2D(64, kernel_size = (3, 3), activation = 'relu'))\n", 409 | "model.add(MaxPooling2D(pool_size = (2, 2)))\n", 410 | "model.add(Dropout(0.20))\n", 411 | "\n", 412 | "model.add(Conv2D(64, kernel_size = (3, 3), activation = 'relu'))\n", 413 | "model.add(MaxPooling2D(pool_size = (2, 2)))\n", 414 | "model.add(Dropout(0.20))\n", 415 | "\n", 416 | "model.add(Flatten())\n", 417 | "model.add(Dense(128, activation = 'relu'))\n", 418 | "model.add(Dropout(0.20))\n", 419 | "model.add(Dense(num_classes, activation = 'softmax'))" 420 | ] 421 | }, 422 | { 423 | "cell_type": "code", 424 | "execution_count": 14, 425 | "metadata": {}, 426 | "outputs": [], 427 | "source": [ 428 | "model.compile(loss = keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adam(),\n", 429 | " metrics=['accuracy'])\n" 430 | ] 431 | }, 432 | { 433 | "cell_type": "code", 434 | "execution_count": 15, 435 | "metadata": {}, 436 | "outputs": [ 437 | { 438 | "name": "stdout", 439 | "output_type": "stream", 440 | "text": [ 441 | "Train on 27455 samples, validate on 7172 samples\n", 442 | "Epoch 1/100\n", 443 | "27455/27455 [==============================] - 7s 262us/step - loss: 2.5675 - acc: 0.2091 - val_loss: 1.3706 - val_acc: 0.5710\n", 444 | "Epoch 2/100\n", 445 | "27455/27455 [==============================] - 4s 128us/step - loss: 1.1583 - acc: 0.6036 - val_loss: 0.7412 - val_acc: 0.7546s - loss: 1.4433 - acc\n", 446 | "Epoch 3/100\n", 447 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.7274 - acc: 0.7483 - val_loss: 0.5387 - val_acc: 0.8077.7565 - a - ETA: 0s - loss: 0.7334 - acc: 0.7\n", 448 | "Epoch 4/100\n", 449 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.5138 - acc: 0.8244 - val_loss: 0.3936 - val_acc: 0.8728\n", 450 | "Epoch 5/100\n", 451 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.3764 - acc: 0.8711 - val_loss: 0.3196 - val_acc: 0.8957\n", 452 | "Epoch 6/100\n", 453 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.2944 - acc: 0.9008 - val_loss: 0.2757 - val_acc: 0.9028\n", 454 | "Epoch 7/100\n", 455 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.2337 - acc: 0.9205 - val_loss: 0.2260 - val_acc: 0.9197oss: 0.2341 - a\n", 456 | "Epoch 8/100\n", 457 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.1967 - acc: 0.9339 - val_loss: 0.2225 - val_acc: 0.9207\n", 458 | "Epoch 9/100\n", 459 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.1596 - acc: 0.9483 - val_loss: 0.1929 - val_acc: 0.9329\n", 460 | "Epoch 10/100\n", 461 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.1410 - acc: 0.9531 - val_loss: 0.1965 - val_acc: 0.93840s - loss: 0.1417 - acc: 0.9\n", 462 | "Epoch 11/100\n", 463 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.1186 - acc: 0.9614 - val_loss: 0.1774 - val_acc: 0.9525\n", 464 | "Epoch 12/100\n", 465 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.1090 - acc: 0.9638 - val_loss: 0.1911 - val_acc: 0.9322\n", 466 | "Epoch 13/100\n", 467 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0954 - acc: 0.9691 - val_loss: 0.1507 - val_acc: 0.9536\n", 468 | "Epoch 14/100\n", 469 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0854 - acc: 0.9725 - val_loss: 0.1717 - val_acc: 0.9403\n", 470 | "Epoch 15/100\n", 471 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0765 - acc: 0.9746 - val_loss: 0.1624 - val_acc: 0.9453\n", 472 | "Epoch 16/100\n", 473 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0659 - acc: 0.9799 - val_loss: 0.1687 - val_acc: 0.9551\n", 474 | "Epoch 17/100\n", 475 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0661 - acc: 0.9796 - val_loss: 0.1381 - val_acc: 0.9557\n", 476 | "Epoch 18/100\n", 477 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0619 - acc: 0.9801 - val_loss: 0.1482 - val_acc: 0.9483\n", 478 | "Epoch 19/100\n", 479 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0591 - acc: 0.9813 - val_loss: 0.1657 - val_acc: 0.9551\n", 480 | "Epoch 20/100\n", 481 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0540 - acc: 0.9829 - val_loss: 0.1244 - val_acc: 0.9590\n", 482 | "Epoch 21/100\n", 483 | "27455/27455 [==============================] - 4s 135us/step - loss: 0.0481 - acc: 0.9857 - val_loss: 0.1511 - val_acc: 0.9594\n", 484 | "Epoch 22/100\n", 485 | "27455/27455 [==============================] - 4s 136us/step - loss: 0.0456 - acc: 0.9859 - val_loss: 0.1253 - val_acc: 0.9603\n", 486 | "Epoch 23/100\n", 487 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0475 - acc: 0.9854 - val_loss: 0.1333 - val_acc: 0.9558\n", 488 | "Epoch 24/100\n", 489 | "27455/27455 [==============================] - 4s 139us/step - loss: 0.0468 - acc: 0.9850 - val_loss: 0.1280 - val_acc: 0.9668\n", 490 | "Epoch 25/100\n", 491 | "27455/27455 [==============================] - 4s 135us/step - loss: 0.0404 - acc: 0.9875 - val_loss: 0.1234 - val_acc: 0.9622\n", 492 | "Epoch 26/100\n", 493 | "27455/27455 [==============================] - 4s 141us/step - loss: 0.0378 - acc: 0.9881 - val_loss: 0.1645 - val_acc: 0.9515\n", 494 | "Epoch 27/100\n", 495 | "27455/27455 [==============================] - 4s 135us/step - loss: 0.0379 - acc: 0.9884 - val_loss: 0.1216 - val_acc: 0.95910s - loss: 0.0380 - ac\n", 496 | "Epoch 28/100\n", 497 | "27455/27455 [==============================] - 4s 137us/step - loss: 0.0361 - acc: 0.9887 - val_loss: 0.1318 - val_acc: 0.9573s - ETA: 0s - loss: 0.0368 - a - ETA: 0s - loss: 0.0361 - acc: 0.988\n", 498 | "Epoch 29/100\n", 499 | "27455/27455 [==============================] - 4s 133us/step - loss: 0.0372 - acc: 0.9879 - val_loss: 0.1541 - val_acc: 0.9557\n", 500 | "Epoch 30/100\n", 501 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0370 - acc: 0.9883 - val_loss: 0.1257 - val_acc: 0.9568A: 0s - loss: 0.0386 - acc: 0.9 - ETA: 0s - loss: 0.0384 - acc: - ETA: 0s - loss: 0.0370 - acc: 0.988\n", 502 | "Epoch 31/100\n", 503 | "27455/27455 [==============================] - 4s 135us/step - loss: 0.0325 - acc: 0.9892 - val_loss: 0.1668 - val_acc: 0.9561\n", 504 | "Epoch 32/100\n", 505 | "27455/27455 [==============================] - 4s 136us/step - loss: 0.0345 - acc: 0.9884 - val_loss: 0.1382 - val_acc: 0.9598s - loss: 0.0386 - - ETA: 1s - loss: 0.0 - ETA: 0s - loss: 0.035\n", 506 | "Epoch 33/100\n", 507 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0353 - acc: 0.9882 - val_loss: 0.1450 - val_acc: 0.9610\n", 508 | "Epoch 34/100\n", 509 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0271 - acc: 0.9915 - val_loss: 0.1320 - val_acc: 0.9596- loss: 0.0293 - acc: 0.99 - ETA: 0s - loss: 0.029\n", 510 | "Epoch 35/100\n", 511 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0285 - acc: 0.9907 - val_loss: 0.1354 - val_acc: 0.9629\n", 512 | "Epoch 36/100\n", 513 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0319 - acc: 0.9901 - val_loss: 0.1126 - val_acc: 0.9629\n", 514 | "Epoch 37/100\n", 515 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0296 - acc: 0.9903 - val_loss: 0.1801 - val_acc: 0.9532\n", 516 | "Epoch 38/100\n", 517 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0290 - acc: 0.9909 - val_loss: 0.1467 - val_acc: 0.9583\n", 518 | "Epoch 39/100\n", 519 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0279 - acc: 0.9910 - val_loss: 0.1020 - val_acc: 0.95910305 - ETA: 1s - loss: 0.0295 - ETA: 0s - loss: 0.0285 - acc: 0\n", 520 | "Epoch 40/100\n", 521 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0218 - acc: 0.9928 - val_loss: 0.1200 - val_acc: 0.9622\n", 522 | "Epoch 41/100\n", 523 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0263 - acc: 0.9913 - val_loss: 0.1476 - val_acc: 0.9509\n", 524 | "Epoch 42/100\n", 525 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0235 - acc: 0.9925 - val_loss: 0.1399 - val_acc: 0.9619\n", 526 | "Epoch 43/100\n", 527 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0238 - acc: 0.9927 - val_loss: 0.1588 - val_acc: 0.9522\n", 528 | "Epoch 44/100\n", 529 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0246 - acc: 0.9921 - val_loss: 0.1477 - val_acc: 0.9596\n", 530 | "Epoch 45/100\n", 531 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0198 - acc: 0.9935 - val_loss: 0.1446 - val_acc: 0.9643\n", 532 | "Epoch 46/100\n", 533 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0243 - acc: 0.9920 - val_loss: 0.1474 - val_acc: 0.9551- acc: 0\n", 534 | "Epoch 47/100\n", 535 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0235 - acc: 0.9921 - val_loss: 0.1023 - val_acc: 0.9677ss: 0.0234 - acc - ETA\n", 536 | "Epoch 48/100\n", 537 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0257 - acc: 0.9917 - val_loss: 0.1561 - val_acc: 0.9644: 0.020 - ETA: 1s - los\n", 538 | "Epoch 49/100\n", 539 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0192 - acc: 0.9937 - val_loss: 0.1458 - val_acc: 0.9508\n", 540 | "Epoch 50/100\n", 541 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0193 - acc: 0.9937 - val_loss: 0.1145 - val_acc: 0.9727\n", 542 | "Epoch 51/100\n", 543 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0216 - acc: 0.9935 - val_loss: 0.1380 - val_acc: 0.9617\n", 544 | "Epoch 52/100\n", 545 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0194 - acc: 0.9938 - val_loss: 0.1198 - val_acc: 0.9700\n", 546 | "Epoch 53/100\n", 547 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0179 - acc: 0.9941 - val_loss: 0.1357 - val_acc: 0.9656\n", 548 | "Epoch 54/100\n", 549 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0213 - acc: 0.9936 - val_loss: 0.1116 - val_acc: 0.9668\n", 550 | "Epoch 55/100\n", 551 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0199 - acc: 0.9934 - val_loss: 0.1280 - val_acc: 0.9575\n", 552 | "Epoch 56/100\n", 553 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0218 - acc: 0.9929 - val_loss: 0.1285 - val_acc: 0.9752\n", 554 | "Epoch 57/100\n", 555 | "27455/27455 [==============================] - 3s 126us/step - loss: 0.0184 - acc: 0.9938 - val_loss: 0.1495 - val_acc: 0.9557\n", 556 | "Epoch 58/100\n", 557 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0165 - acc: 0.9947 - val_loss: 0.1216 - val_acc: 0.9580\n", 558 | "Epoch 59/100\n", 559 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0178 - acc: 0.9942 - val_loss: 0.1359 - val_acc: 0.9571\n", 560 | "Epoch 60/100\n", 561 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0218 - acc: 0.9937 - val_loss: 0.1164 - val_acc: 0.964626 - acc:\n", 562 | "Epoch 61/100\n", 563 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0172 - acc: 0.9940 - val_loss: 0.1570 - val_acc: 0.9568\n", 564 | "Epoch 62/100\n", 565 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0159 - acc: 0.9944 - val_loss: 0.1254 - val_acc: 0.96461\n", 566 | "Epoch 63/100\n", 567 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0167 - acc: 0.9942 - val_loss: 0.1468 - val_acc: 0.9550\n", 568 | "Epoch 64/100\n", 569 | "27455/27455 [==============================] - 4s 135us/step - loss: 0.0184 - acc: 0.9938 - val_loss: 0.1540 - val_acc: 0.9538\n", 570 | "Epoch 65/100\n", 571 | "27455/27455 [==============================] - 4s 135us/step - loss: 0.0179 - acc: 0.9945 - val_loss: 0.1133 - val_acc: 0.9656\n", 572 | "Epoch 66/100\n", 573 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0187 - acc: 0.9940 - val_loss: 0.1674 - val_acc: 0.9619acc: 0 - ETA: 0s - loss: 0.0162 - acc: 0.994 - ETA: 0s - loss: 0.016\n", 574 | "Epoch 67/100\n", 575 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0146 - acc: 0.9953 - val_loss: 0.1640 - val_acc: 0.9625- acc: \n", 576 | "Epoch 68/100\n", 577 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0145 - acc: 0.9956 - val_loss: 0.1142 - val_acc: 0.9723\n", 578 | "Epoch 69/100\n", 579 | "27455/27455 [==============================] - 4s 133us/step - loss: 0.0169 - acc: 0.9943 - val_loss: 0.1467 - val_acc: 0.9607\n", 580 | "Epoch 70/100\n", 581 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0172 - acc: 0.9947 - val_loss: 0.1496 - val_acc: 0.9646- - ETA: 1s - loss: 0.\n", 582 | "Epoch 71/100\n", 583 | "27455/27455 [==============================] - 3s 127us/step - loss: 0.0153 - acc: 0.9953 - val_loss: 0.1226 - val_acc: 0.9718- loss: 0.014 - ETA: 1s - loss: \n", 584 | "Epoch 72/100\n", 585 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0132 - acc: 0.9960 - val_loss: 0.1278 - val_acc: 0.9707\n", 586 | "Epoch 73/100\n", 587 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0136 - acc: 0.9958 - val_loss: 0.1426 - val_acc: 0.9643\n", 588 | "Epoch 74/100\n", 589 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0202 - acc: 0.9940 - val_loss: 0.1509 - val_acc: 0.9633\n", 590 | "Epoch 75/100\n", 591 | "27455/27455 [==============================] - 4s 133us/step - loss: 0.0173 - acc: 0.9947 - val_loss: 0.1193 - val_acc: 0.9720.0154 - acc: 0 - ETA: 1s - lo\n", 592 | "Epoch 76/100\n", 593 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0150 - acc: 0.9948 - val_loss: 0.1461 - val_acc: 0.9597 l - ETA: 0s - loss: 0.0148 - - ETA: 0s - loss: 0.0147 - acc: 0.99\n", 594 | "Epoch 77/100\n", 595 | "27455/27455 [==============================] - 4s 133us/step - loss: 0.0142 - acc: 0.9959 - val_loss: 0.1405 - val_acc: 0.9604\n", 596 | "Epoch 78/100\n", 597 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0180 - acc: 0.9942 - val_loss: 0.1186 - val_acc: 0.9653loss: 0.0199 - acc - ETA: 1s - loss: 0.0196 - acc: 0. - ETA: 1s - loss:\n", 598 | "Epoch 79/100\n", 599 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0153 - acc: 0.9950 - val_loss: 0.1189 - val_acc: 0.9681\n", 600 | "Epoch 80/100\n", 601 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0160 - acc: 0.9949 - val_loss: 0.1748 - val_acc: 0.9593\n", 602 | "Epoch 81/100\n", 603 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0131 - acc: 0.9956 - val_loss: 0.1641 - val_acc: 0.9586: 1\n", 604 | "Epoch 82/100\n", 605 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0154 - acc: 0.9953 - val_loss: 0.1393 - val_acc: 0.9643 0.01\n", 606 | "Epoch 83/100\n", 607 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0139 - acc: 0.9958 - val_loss: 0.1744 - val_acc: 0.9552ETA: 0s - loss: 0.0122 -\n", 608 | "Epoch 84/100\n", 609 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0120 - acc: 0.9959 - val_loss: 0.1522 - val_acc: 0.96850.\n", 610 | "Epoch 85/100\n", 611 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0125 - acc: 0.9958 - val_loss: 0.1274 - val_acc: 0.9654\n", 612 | "Epoch 86/100\n", 613 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0132 - acc: 0.9957 - val_loss: 0.1479 - val_acc: 0.9674loss: 0.0132 - acc: 0.9 - ETA: 2s - loss: 0.0137 - acc - ETA: 1s - loss: 0 - ETA: 0s - loss: 0.0130 - a\n", 614 | "Epoch 87/100\n", 615 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0145 - acc: 0.9956 - val_loss: 0.1045 - val_acc: 0.9696\n", 616 | "Epoch 88/100\n", 617 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0128 - acc: 0.9961 - val_loss: 0.1680 - val_acc: 0.9607\n", 618 | "Epoch 89/100\n", 619 | "27455/27455 [==============================] - 4s 132us/step - loss: 0.0141 - acc: 0.9961 - val_loss: 0.1364 - val_acc: 0.9727 - loss: 0.0154\n", 620 | "Epoch 90/100\n", 621 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0132 - acc: 0.9960 - val_loss: 0.1916 - val_acc: 0.9571\n", 622 | "Epoch 91/100\n", 623 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0107 - acc: 0.9958 - val_loss: 0.1406 - val_acc: 0.9639\n", 624 | "Epoch 92/100\n", 625 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0143 - acc: 0.9953 - val_loss: 0.1746 - val_acc: 0.9584\n", 626 | "Epoch 93/100\n", 627 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0158 - acc: 0.9948 - val_loss: 0.1276 - val_acc: 0.96282 - acc: - ETA: 0s - loss: 0.0153 - acc:\n", 628 | "Epoch 94/100\n", 629 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0128 - acc: 0.9962 - val_loss: 0.1330 - val_acc: 0.9629\n", 630 | "Epoch 95/100\n", 631 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0088 - acc: 0.9971 - val_loss: 0.1199 - val_acc: 0.9665: 1s - loss: 0.0100 - acc - ETA: 1s - loss\n", 632 | "Epoch 96/100\n", 633 | "27455/27455 [==============================] - 4s 131us/step - loss: 0.0127 - acc: 0.9957 - val_loss: 0.1387 - val_acc: 0.9642 -\n", 634 | "Epoch 97/100\n", 635 | "27455/27455 [==============================] - 4s 130us/step - loss: 0.0102 - acc: 0.9967 - val_loss: 0.1208 - val_acc: 0.9696\n", 636 | "Epoch 98/100\n", 637 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0111 - acc: 0.9965 - val_loss: 0.1488 - val_acc: 0.9657 1s - loss: 0.0105 - acc: 0 - ETA: 1s - loss: 0.0104 - acc: 0.996 - ETA: 1s - loss: 0.0103 - acc: 0. - ETA: 0s - loss: 0.0106 - acc - ETA: 0s - loss: 0.0110 - acc:\n", 638 | "Epoch 99/100\n", 639 | "27455/27455 [==============================] - 4s 128us/step - loss: 0.0145 - acc: 0.9956 - val_loss: 0.1608 - val_acc: 0.9643\n", 640 | "Epoch 100/100\n", 641 | "27455/27455 [==============================] - 4s 129us/step - loss: 0.0114 - acc: 0.9964 - val_loss: 0.1004 - val_acc: 0.9702 1s - loss: 0 - ETA: 0s - loss: 0.0107 \n" 642 | ] 643 | } 644 | ], 645 | "source": [ 646 | "history = model.fit(x_train, y_train, validation_data = (x_test, y_test), epochs=epochs, batch_size=batch_size)" 647 | ] 648 | }, 649 | { 650 | "cell_type": "code", 651 | "execution_count": 16, 652 | "metadata": {}, 653 | "outputs": [ 654 | { 655 | "data": { 656 | "image/png": "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\n", 657 | "text/plain": [ 658 | "
" 659 | ] 660 | }, 661 | "metadata": { 662 | "needs_background": "light" 663 | }, 664 | "output_type": "display_data" 665 | } 666 | ], 667 | "source": [ 668 | "plt.plot(history.history['acc'])\n", 669 | "plt.plot(history.history['val_acc'])\n", 670 | "plt.title(\"Accuracy\")\n", 671 | "plt.xlabel('epoch')\n", 672 | "plt.ylabel('accuracy')\n", 673 | "plt.legend(['train','test'])\n", 674 | "plt.show()" 675 | ] 676 | }, 677 | { 678 | "cell_type": "code", 679 | "execution_count": 17, 680 | "metadata": {}, 681 | "outputs": [], 682 | "source": [ 683 | "model.save('sign_language')" 684 | ] 685 | }, 686 | { 687 | "cell_type": "code", 688 | "execution_count": 18, 689 | "metadata": {}, 690 | "outputs": [], 691 | "source": [ 692 | "import cv2\n", 693 | "from keras.preprocessing.image import img_to_array\n", 694 | "alphabet=['A','B','C','D','E','F','G','H','I','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y']\n", 695 | "def classify(image):\n", 696 | " image = cv2.resize(image, (28, 28))\n", 697 | " image = image.astype(\"float\") / 255.0\n", 698 | " image = img_to_array(image)\n", 699 | " image = np.expand_dims(image, axis=0)\n", 700 | " proba=model.predict(image)\n", 701 | " idx = np.argmax(proba)\n", 702 | " return alphabet[idx]" 703 | ] 704 | }, 705 | { 706 | "cell_type": "code", 707 | "execution_count": 19, 708 | "metadata": {}, 709 | "outputs": [ 710 | { 711 | "data": { 712 | "text/plain": [ 713 | "'C'" 714 | ] 715 | }, 716 | "execution_count": 19, 717 | "metadata": {}, 718 | "output_type": "execute_result" 719 | } 720 | ], 721 | "source": [ 722 | "classify(x_train[3]*255)" 723 | ] 724 | }, 725 | { 726 | "cell_type": "code", 727 | "execution_count": 20, 728 | "metadata": {}, 729 | "outputs": [ 730 | { 731 | "name": "stdout", 732 | "output_type": "stream", 733 | "text": [ 734 | "[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n" 735 | ] 736 | } 737 | ], 738 | "source": [ 739 | "print(y_train[3])" 740 | ] 741 | }, 742 | { 743 | "cell_type": "code", 744 | "execution_count": null, 745 | "metadata": {}, 746 | "outputs": [], 747 | "source": [] 748 | } 749 | ], 750 | "metadata": { 751 | "kernelspec": { 752 | "display_name": "Python 3", 753 | "language": "python", 754 | "name": "python3" 755 | }, 756 | "language_info": { 757 | "codemirror_mode": { 758 | "name": "ipython", 759 | "version": 3 760 | }, 761 | "file_extension": ".py", 762 | "mimetype": "text/x-python", 763 | "name": "python", 764 | "nbconvert_exporter": "python", 765 | "pygments_lexer": "ipython3", 766 | "version": "3.5.6" 767 | } 768 | }, 769 | "nbformat": 4, 770 | "nbformat_minor": 2 771 | } 772 | -------------------------------------------------------------------------------- /real_time.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stderr", 10 | "output_type": "stream", 11 | "text": [ 12 | "Using TensorFlow backend.\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "import keras\n", 18 | "import cv2\n", 19 | "import numpy as np\n", 20 | "from keras.preprocessing.image import img_to_array\n", 21 | "import imutils\n", 22 | "import os" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 3, 28 | "metadata": {}, 29 | "outputs": [], 30 | "source": [ 31 | "\n", 32 | "alphabet=['A','B','C','D','E','F','G','H','I','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y']\n", 33 | "model = keras.models.load_model(\"sign_language\")" 34 | ] 35 | }, 36 | { 37 | "cell_type": "code", 38 | "execution_count": 6, 39 | "metadata": {}, 40 | "outputs": [], 41 | "source": [ 42 | "def classify(image):\n", 43 | " image = cv2.resize(image, (28, 28))\n", 44 | " image = image.astype(\"float\") / 255.0\n", 45 | " image = img_to_array(image)\n", 46 | " image = np.expand_dims(image, axis=0)\n", 47 | " proba=model.predict(image)\n", 48 | " idx = np.argmax(proba)\n", 49 | " return alphabet[idx]" 50 | ] 51 | }, 52 | { 53 | "cell_type": "code", 54 | "execution_count": 7, 55 | "metadata": {}, 56 | "outputs": [], 57 | "source": [ 58 | "cap = cv2.VideoCapture(0)\n", 59 | "while 1:\n", 60 | " ret, img = cap.read()\n", 61 | " image = cv2.imread('amer_sign2.png')\n", 62 | " cv2.imshow(\"image\", image)\n", 63 | " img = cv2.flip(img, 1)\n", 64 | " top, right, bottom, left = 75, 350, 300, 590\n", 65 | " roi = img[top:bottom, right:left]\n", 66 | " roi=cv2.flip(roi,1)\n", 67 | " gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)\n", 68 | " gray = cv2.GaussianBlur(gray, (7, 7), 0)\n", 69 | " cv2.imshow('roi',gray)\n", 70 | " alpha=classify(gray)\n", 71 | " cv2.rectangle(img, (left, top), (right, bottom), (0,255,0), 2)\n", 72 | " font=cv2.FONT_HERSHEY_SIMPLEX\n", 73 | " cv2.putText(img,alpha,(0,130),font,5,(0,0,255),2)\n", 74 | " #cv2.resize(img,(1000,1000))\n", 75 | " cv2.imshow('img',img)\n", 76 | " key = cv2.waitKey(1) & 0xFF\n", 77 | " if key==ord('q'):\n", 78 | " break;\n", 79 | "cap.release()\n", 80 | "cv2.destroyAllWindows()" 81 | ] 82 | } 83 | ], 84 | "metadata": { 85 | "kernelspec": { 86 | "display_name": "Python 3", 87 | "language": "python", 88 | "name": "python3" 89 | }, 90 | "language_info": { 91 | "codemirror_mode": { 92 | "name": "ipython", 93 | "version": 3 94 | }, 95 | "file_extension": ".py", 96 | "mimetype": "text/x-python", 97 | "name": "python", 98 | "nbconvert_exporter": "python", 99 | "pygments_lexer": "ipython3", 100 | "version": "3.5.6" 101 | } 102 | }, 103 | "nbformat": 4, 104 | "nbformat_minor": 2 105 | } 106 | -------------------------------------------------------------------------------- /sign_language: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/themechanicalcoder/American-Sign-Language-Recognition/31fd064eb01aeca7b6b3f9ebcea0422a168cf8e7/sign_language --------------------------------------------------------------------------------