Untitled

 avatar
unknown
plain_text
a month ago
4.7 kB
2
Indexable
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
import os
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from sklearn.model_selection import train_test_split
from tensorflow.keras.utils import to_categorical
import cv2
import pydot
def load_dataset(directory):
 images = []
 labels = []
 for idx, label in enumerate(uniq_labels):
 for file in os.listdir(directory+'/'+label):
 filepath = directory + '/' +label +'/' +file
 img = cv2.resize(cv2.imread(filepath), (50, 50))
63
 images.append(img)
 labels.append(idx)
 images = np.asarray(images)
 labels = np.asarray(labels)
 return images, labels
def display_images(x_data, y_data, title, display_label = True):
 x, y = x_data, y_data
 fig, axes = plt.subplots(5, 8, figsize = (18, 5))
 fig.subplots_adjust(hspace= 0.5, wspace=0.5)
 fig.suptitle(title, fontsize=18)
 for i, ax in enumerate(axes.flat):
 ax.imshow(cv2.cvtColor(x[i], cv2.COLOR_BGR2RGB))
 if display_label:
 ax.set_xlabel(uniq_labels[y[i]])
 ax.set_xticks([])
 ax.set_yticks([])
 plt.show()
#loading_dataset into X_pre and Y_pre
data_dir = r'D:\final year main project\1Indian sign Language\sample_creation'
uniq_labels = sorted(os.listdir(data_dir))
X_pre, Y_pre = load_dataset(data_dir)
print(X_pre.shape, Y_pre.shape)
#spliting dataset into 80% train, 10% validation and 10% test data
X_train, X_test, Y_train, Y_test = train_test_split(X_pre, Y_pre, test_size = 0.8)
X_test, X_eval, Y_test, Y_eval = train_test_split(X_test, Y_test, test_size = 0.5)
64
print("Train images shape", X_train.shape, Y_train.shape)
print("Test images shape", X_test.shape, Y_test.shape)
print("Evaluate image shape", X_eval.shape, Y_eval.shape)
display_images(X_train, Y_train, 'Samples from Train Set')
display_images(X_test, Y_test, 'Samples from Test set')
display_images(X_eval, Y_eval, 'Samples from validation set')
Y_train = to_categorical(Y_train)
Y_test = to_categorical(Y_test)
Y_eval = to_categorical(Y_eval)
X_train = X_train / 255
X_test = X_test/255
X_eval = X_eval/255
model = tf.keras.Sequential([
 tf.keras.layers.Conv2D(16, (3,3), activation = 'relu', input_shape=(50, 50, 3)),
 tf.keras.layers.Conv2D(16, (3,3), activation = 'relu'),
 tf.keras.layers.Conv2D(16, (3,3), activation= 'relu'),
 tf.keras.layers.MaxPool2D((2,2)),
 tf.keras.layers.Conv2D(32, (3,3), activation = 'relu'),
 tf.keras.layers.Conv2D(32, (3,3), activation = 'relu'),
 tf.keras.layers.Conv2D(32, (3,3), activation = 'relu'),
 tf.keras.layers.MaxPool2D((2,2)),
 tf.keras.layers.Conv2D(64, (3,3), activation = 'relu'),
 tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
 tf.keras.layers.Conv2D(64, (3, 3), activation='relu'),
 tf.keras.layers.Flatten(),
65
 tf.keras.layers.Dense(128, activation='relu'),
 tf.keras.layers.Dense(1, activation='softmax')
 ])
model.summary()
model.compile(optimizer = 'adam', loss = 'categorical_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, Y_train, epochs=20, validation_data=(X_eval, Y_eval))
#testing
model.evaluate(X_test, Y_test)
model.save(r'D:\final year main project\1Indian sign Language\test_train.h5')
#summarize history for accuracy
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
main.py
import cv2
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import os
66
model = tf.keras.models.load_model(r'D:\final year main project\1Indian sign
Language\test_train.h5')
model.summary()
data_dir = r'D:\final year main project\1Indian sign Language\dataset'
labels = sorted(os.listdir(data_dir))
labels[-1] = 'Nothing'
print(labels)
cap = cv2.VideoCapture(0)
while(True):
 _ , frame = cap.read()
 cv2.rectangle(frame, (100, 100), (400, 400), (0, 255, 0), 5)
 roi = frame[100:400, 100:400]
 img = cv2.resize(roi, (50, 50))
 cv2.imshow('Output', roi)
 img = img/255
 prediction = model.predict(img.reshape(1, 50, 50, 3))
 char_index = np.argmax(prediction)
 confidence = round(prediction[0, char_index]*100, 1)
 predicted_char = labels[char_index]
 font = cv2.FONT_HERSHEY_TRIPLEX
 fontScale = 1
 color = (0, 255, 255)
 thickness = 2
 if confidence > 98:
67
 msg = predicted_char +', Conf: '+str(confidence) +' %'
 cv2.putText(frame, msg, (80, 80), font, fontScale, color, thickness)
 print(predicted_char)
 cv2.imshow('Output1', frame)
 if cv2.waitKey(2) & 0xFF == ord('q'):
 break
cap.release()
cv2.destroyAllWindows()
Leave a Comment