Untitled
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