This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from flask import Flask, render_template, Response | |
from camera import VideoCamera | |
app = Flask(__name__) | |
@app.route('/') | |
def index(): | |
return render_template('index.html') | |
def gen(camera): |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from keras.models import model_from_json | |
import numpy as np | |
class FacialExpressionModel(object): | |
EMOTIONS_LIST = ["Angry", "Disgust", | |
"Fear", "Happy", | |
"Neutral", "Sad", | |
"Surprise"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
from model import FacialExpressionModel | |
import numpy as np | |
facec = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') | |
model = FacialExpressionModel("model.json", "model_weights.h5") | |
font = cv2.FONT_HERSHEY_SIMPLEX | |
class VideoCamera(object): | |
def __init__(self): |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# show the confusion matrix of our predictions | |
# compute predictions | |
predictions = model.predict_generator(generator=validation_generator) | |
y_pred = [np.argmax(probas) for probas in predictions] | |
y_test = validation_generator.classes | |
class_names = validation_generator.class_indices.keys() | |
from sklearn.metrics import confusion_matrix | |
import itertools |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# plot the evolution of Loss and Acuracy on the train and validation sets | |
import matplotlib.pyplot as plt | |
plt.figure(figsize=(20,10)) | |
plt.subplot(1, 2, 1) | |
plt.suptitle('Optimizer : Adam', fontsize=10) | |
plt.ylabel('Loss', fontsize=16) | |
plt.plot(history.history['loss'], label='Training Loss') | |
plt.plot(history.history['val_loss'], label='Validation Loss') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# serialize model structure to JSON | |
model_json = model.to_json() | |
with open("model.json", "w") as json_file: | |
json_file.write(model_json) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# number of epochs to train the NN | |
epochs = 50 | |
from keras.callbacks import ModelCheckpoint | |
checkpoint = ModelCheckpoint("model_weights.h5", monitor='val_acc', verbose=1, save_best_only=True, mode='max') | |
callbacks_list = [checkpoint] | |
history = model.fit_generator(generator=train_generator, | |
steps_per_epoch=train_generator.n//train_generator.batch_size, |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from keras.layers import Dense, Input, Dropout, GlobalAveragePooling2D, Flatten, Conv2D, BatchNormalization, Activation, MaxPooling2D | |
from keras.models import Model, Sequential | |
from keras.optimizers import Adam | |
# number of possible label values | |
nb_classes = 7 | |
# Initialising the CNN | |
model = Sequential() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from keras.preprocessing.image import ImageDataGenerator | |
# number of images to feed into the NN for every batch | |
batch_size = 128 | |
datagen_train = ImageDataGenerator() | |
datagen_validation = ImageDataGenerator() | |
train_generator = datagen_train.flow_from_directory(base_path + "train", | |
target_size=(pic_size,pic_size), |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# count number of train images for each expression | |
for expression in os.listdir(base_path + "train"): | |
print(str(len(os.listdir(base_path + "train/" + expression))) + " " + expression + " images") |
NewerOlder