# Model recognition ## Training source code: ```python import cv2 import numpy as np from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout # Load dataset of images with desired output (facial expressions) data_dir = 'path/to/dataset' image_paths = [f for f in os.listdir(data_dir) if f.endswith('.jpg')] # Create a list to hold our image data and labels X_train = [] y_train = [] for i, img_path in enumerate(image_paths): # Load image from disk using OpenCV img = cv2.imread(os.path.join(data_dir, img_path)) # Resize image to 224x224 pixels (standard for VGG16) img = cv2.resize(img, (224, 224)) # Convert image to grayscale and normalize pixel values img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_norm = img_gray / 255.0 # Add image data to list X_train.append(np.array(img_norm)) # Assign label for current facial expression (e.g., happy, sad, angry) if i % 3 == 0: # Label for 'happy' expression y_train.append(1) elif i % 3 == 1: # Label for 'sad' expression y_train.append(2) else: # Label for 'angry' expression y_train.append(3) else: # Label for 'angry' expression y_train.append(3) # Create a TensorFlow model using the VGG16 architecture as base model = Sequential() model.add(Dense(64, activation='relu', input_shape=(224*224,))) model.add(Dropout(0.2)) model.add(Dense(32, activation='relu')) model.add(Dropout(0.2)) model.add(Dense(3)) # Output layer for 3 facial expressions # Compile the model with suitable loss function and optimizer model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # Train the model using our dataset model.fit(np.array(X_train), np.array(y_train), epochs=10, batch_size=32) print("Model trained!") ``` ## Using the recognition model ```python import cv2 from tensorflow.keras.models import load_model # Load trained model from disk model_path = 'path/to/trained/model.h5' model = load_model(model_path) # Capture video from webcam or load pre-existing image cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() if not ret: break # Convert frame to grayscale and resize to 224x224 pixels gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) resized_frame = cv2.resize(gray_frame, (224, 224)) # Add batch dimension for prediction input_data = np.array([resized_frame]) # Get output probabilities for each facial expression output_probabilities = model.predict(input_data) # Print the top 3 predicted expressions with their probabilities print(np.argsort(-output_probabilities[0])[:3], output_probabilities[0][:3]) # Release^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A resources^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A^[[A and^[[A^[[A^[[A exit cap.release() cv2.destroyAllWindows() ```