'''from pathlib import Path import shutil import itertools import os, cv2, numpy as np''' import gradio as gr import torch from transformers import AutoModelForImageClassification from optimum.pipelines import pipeline from PIL import Image import numpy as np device = 1 if torch.cuda.is_available() else "cpu" # chk_point = "kdhht2334/autotrain-diffusion-emotion-facial-expression-recognition-40429105176" model = AutoModelForImageClassification.from_pretrained("./autotrain-diffusion-emotion-facial-expression-recognition-40429105176") ##Add face detector from facenet_pytorch import MTCNN, InceptionResnetV1 mtcnn = MTCNN(image_size=300, margin=0, min_face_size=20, thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True) resnet = InceptionResnetV1(pretrained='vggface2').eval() emotion_dict = { 'neutral': '0', 'happy': '1', 'sad' :'2', 'surprise': '3', 'fear': '4', 'disgust': '5', 'angry': '6', 'uncertain': '7', 'nonface': '8', } output_img_size = (2100, 700) try: pipe = pipeline( "image-classification", model, accelerator="bettertransformer", device=device, ) except NotImplementedError: from transformers import pipeline pipe = pipeline("image-classification", model, device=device) def face_detector(input_img): img = Image.fromarray(input_img) bbox, _ = mtcnn.detect(img) bbox = bbox.squeeze().tolist() crop = img.crop(bbox) return crop def predict(image): cropped_face = face_detector(image) face_w, face_h = cropped_face.size face_re_w = int(face_w * (700 / face_h)) resized_face = cropped_face.resize((face_re_w, 700)) output_img = Image.new("RGBA", output_img_size) output_img.paste(resized_face, (1050 - int(face_re_w/2), 0)) predictions = pipe(cropped_face) return output_img, {p["label"]: p["score"] for p in predictions} gr.Interface( predict, inputs=gr.inputs.Image(label="Upload image"), outputs=["image", "label"], examples=[["examples/happy.png"], ["examples/angry.png"], ["examples/surprise.png"]], title="Demo - DiffusionFER", ).launch()