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)