DataScience_Project / predict.py
Reacher's picture
initial commit
e27c378
import cv2
from utils import read_image,get_valid_augs
import torch
import torch.nn.functional as F
from model import ResNet50Model
import numpy as np
CKPT_EMOTION = 'emotion_resnet_model'
CKPT_CELEBRITY = 'celebrity_resnet_model'
FaceInverseTargetMapper = {0: 'Tom Hanks',1: 'Sandra Bullock',2: 'Natalie Portman',3: 'Scarlett Johansson',4: 'Robert Downey Jr',5: 'Nicole Kidman',6: 'Brad Pitt',
7: 'Hugh Jackman',8: 'Tom Cruise',9: 'Leonardo DiCaprio',10: 'Megan Fox',11: 'Johnny Depp',12: 'Will Smith',13: 'Denzel Washington',14: 'Jennifer Lawrence',15: 'Kate Winslet',16: 'Angelina Jolie'}
EmotionMapper = {0: 'sadness',1: 'contempt',2: 'happiness',3: 'surprise',
4: 'fear',5: 'anger',6: 'disgust',7: 'neutrality'}
def predict_one_image(path) :
image = read_image(path)
image = get_valid_augs()(image=image)['image']
image = torch.tensor(image,dtype=torch.float)
image = image.reshape((1,3,224,224))
emotion_model = ResNet50Model('emotion')
#loading ckpt
emotion_model.load_state_dict(torch.load(CKPT_EMOTION,map_location=torch.device('cpu')))
celebrity_model = ResNet50Model('celebrity')
#loading ckpt
celebrity_model.load_state_dict(torch.load(CKPT_CELEBRITY,map_location=torch.device('cpu')))
with torch.no_grad() :
#emotion
outputs = emotion_model(image)
outputs = torch.nn.functional.softmax(outputs).cpu().detach().numpy()
print(outputs.shape)
emotion = np.argmax(outputs,axis=1)[0]
emotion_proba = np.max(outputs,axis=1)[0]
print(emotion_proba)
#celebrity
outputs = celebrity_model(image)
outputs = torch.nn.functional.softmax(outputs).cpu().detach().numpy()
print(outputs.shape)
celebrity = np.argmax(outputs,axis=1)[0]
celebrity_proba = np.max(outputs,axis=1)[0]
print(celebrity_proba)
if celebrity_proba<0.45 :
return f"Unkonwn Person Detected with emotion {EmotionMapper[emotion]} "
return f"Detected {FaceInverseTargetMapper[celebrity]} with emotion {EmotionMapper[emotion]} "