|
|
|
import tensorflow as tf |
|
import tensorflow.keras as keras |
|
import numpy as np |
|
import matplotlib.pyplot as plt |
|
import math |
|
from datetime import datetime |
|
from numpy import save, load, asarray |
|
import csv |
|
from skimage.io import imread |
|
from skimage.transform import resize |
|
import pickle |
|
from PIL import Image |
|
|
|
import os |
|
|
|
|
|
|
|
class TestModels: |
|
def __init__(self, h5_address:str, GPU=True): |
|
self.exps = ['Neutral', 'Happy', 'Sad', 'Surprise', 'Fear', 'Disgust', 'Anger'] |
|
|
|
if GPU: |
|
physical_devices = tf.config.list_physical_devices('GPU') |
|
tf.config.experimental.set_memory_growth(physical_devices[0], True) |
|
|
|
self.model = self.load_model(h5_address=h5_address) |
|
|
|
def load_model(self, h5_address: str): |
|
"load weight file and create the model once" |
|
model = tf.keras.models.load_model(h5_address, custom_objects={'tf': tf}) |
|
return model |
|
|
|
def recognize_fer(self, img_path:str): |
|
"create and image from the path and recognize expression" |
|
img = imread(img_path) |
|
|
|
img = resize(img, (224, 224,3)) |
|
img = np.expand_dims(img, axis=0) |
|
|
|
prediction = self.model.predict_on_batch([img]) |
|
exp = np.array(prediction[0]) |
|
'''in case you need the embeddings''' |
|
|
|
print(self.exps[np.argmax(exp)]) |
|
|
|
|
|
|