├── 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 | 
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 | 
33 |
34 | 
35 | 
36 |
37 | 
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 | " pixel1 \n",
40 | " pixel2 \n",
41 | " pixel3 \n",
42 | " pixel4 \n",
43 | " pixel5 \n",
44 | " pixel6 \n",
45 | " pixel7 \n",
46 | " pixel8 \n",
47 | " pixel9 \n",
48 | " pixel10 \n",
49 | " ... \n",
50 | " pixel775 \n",
51 | " pixel776 \n",
52 | " pixel777 \n",
53 | " pixel778 \n",
54 | " pixel779 \n",
55 | " pixel780 \n",
56 | " pixel781 \n",
57 | " pixel782 \n",
58 | " pixel783 \n",
59 | " pixel784 \n",
60 | " \n",
61 | " \n",
62 | " \n",
63 | " \n",
64 | " 0 \n",
65 | " 149 \n",
66 | " 149 \n",
67 | " 150 \n",
68 | " 150 \n",
69 | " 150 \n",
70 | " 151 \n",
71 | " 151 \n",
72 | " 150 \n",
73 | " 151 \n",
74 | " 152 \n",
75 | " ... \n",
76 | " 138 \n",
77 | " 148 \n",
78 | " 127 \n",
79 | " 89 \n",
80 | " 82 \n",
81 | " 96 \n",
82 | " 106 \n",
83 | " 112 \n",
84 | " 120 \n",
85 | " 107 \n",
86 | " \n",
87 | " \n",
88 | " 1 \n",
89 | " 126 \n",
90 | " 128 \n",
91 | " 131 \n",
92 | " 132 \n",
93 | " 133 \n",
94 | " 134 \n",
95 | " 135 \n",
96 | " 135 \n",
97 | " 136 \n",
98 | " 138 \n",
99 | " ... \n",
100 | " 47 \n",
101 | " 104 \n",
102 | " 194 \n",
103 | " 183 \n",
104 | " 186 \n",
105 | " 184 \n",
106 | " 184 \n",
107 | " 184 \n",
108 | " 182 \n",
109 | " 180 \n",
110 | " \n",
111 | " \n",
112 | " 2 \n",
113 | " 85 \n",
114 | " 88 \n",
115 | " 92 \n",
116 | " 96 \n",
117 | " 105 \n",
118 | " 123 \n",
119 | " 135 \n",
120 | " 143 \n",
121 | " 147 \n",
122 | " 152 \n",
123 | " ... \n",
124 | " 68 \n",
125 | " 166 \n",
126 | " 242 \n",
127 | " 227 \n",
128 | " 230 \n",
129 | " 227 \n",
130 | " 226 \n",
131 | " 225 \n",
132 | " 224 \n",
133 | " 222 \n",
134 | " \n",
135 | " \n",
136 | " 3 \n",
137 | " 203 \n",
138 | " 205 \n",
139 | " 207 \n",
140 | " 206 \n",
141 | " 207 \n",
142 | " 209 \n",
143 | " 210 \n",
144 | " 209 \n",
145 | " 210 \n",
146 | " 209 \n",
147 | " ... \n",
148 | " 154 \n",
149 | " 248 \n",
150 | " 247 \n",
151 | " 248 \n",
152 | " 253 \n",
153 | " 236 \n",
154 | " 230 \n",
155 | " 240 \n",
156 | " 253 \n",
157 | " 255 \n",
158 | " \n",
159 | " \n",
160 | " 4 \n",
161 | " 188 \n",
162 | " 191 \n",
163 | " 193 \n",
164 | " 195 \n",
165 | " 199 \n",
166 | " 201 \n",
167 | " 202 \n",
168 | " 203 \n",
169 | " 203 \n",
170 | " 203 \n",
171 | " ... \n",
172 | " 26 \n",
173 | " 40 \n",
174 | " 64 \n",
175 | " 48 \n",
176 | " 29 \n",
177 | " 46 \n",
178 | " 49 \n",
179 | " 46 \n",
180 | " 46 \n",
181 | " 53 \n",
182 | " \n",
183 | " \n",
184 | "
\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
--------------------------------------------------------------------------------