Spaces:
Build error
Build error
import cv2 | |
import gradio as gr | |
import numpy as np | |
from tensorflow.keras.preprocessing.image import img_to_array | |
from tensorflow.keras.models import load_model | |
import os | |
face_detection = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') | |
emotion_classifier = load_model('emotion_model_predict.h5', compile=False) | |
EMOTIONS = ["Tuc gian" ,"Kinh tom","So hai", "Hanh phuc", "Buon ba", "Bat ngo", "Binh thuong"] | |
def classify(img): | |
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
faces = face_detection.detectMultiScale(gray, | |
scaleFactor=1.1, | |
minNeighbors=5, | |
minSize=(30,30)) | |
# Chỉ thực hiện nhận biết cảm xúc khi phát hiện được có khuôn mặt trong hình | |
if len(faces) > 0: | |
# Chỉ thực hiện với khuôn mặt chính trong hình (khuôn mặt có diện tích lớn nhất) | |
face = sorted(faces, reverse=True, key=lambda x: (x[2] - x[0]) * (x[3] - x[1]))[0] | |
(fX, fY, fW, fH) = face | |
# Tách phần khuôn mặt vừa tìm được và resize về kích thước 48x48, vì mạng mình train có đầu vào là 48x48 | |
roi = gray[fY:fY + fH, fX:fX + fW] | |
roi = cv2.resize(roi, (48, 48)) | |
roi = roi.astype("float") / 255.0 | |
roi = img_to_array(roi) | |
roi = np.expand_dims(roi, axis=0) | |
preds = emotion_classifier.predict(roi)[0] | |
label = EMOTIONS[preds.argmax()] | |
return label | |
# print(label) | |
# img = cv2.imread('./files/1.jpg') | |
# classify(img) | |
iface = gr.Interface( | |
classify, | |
# gr.inputs.Image(shape=(224, 224)), | |
gr.inputs.Image(source="webcam", shape=(224,224), tool=None), | |
gr.outputs.Label(), | |
capture_session=True, | |
examples=[ | |
["6.jpg"], | |
["7.jpg"], | |
]) | |
if __name__ == "__main__": | |
iface.launch(share=True) |