2024-06-28 01:19:00 -07:00
|
|
|
from keras.models import load_model
|
|
|
|
import numpy as np
|
|
|
|
import cv2
|
|
|
|
|
|
|
|
|
|
|
|
class GenderPrediction:
|
|
|
|
def __init__(self):
|
|
|
|
self.model = load_model("gender_v1.0.h5")
|
|
|
|
|
|
|
|
def predict_gender(self, image):
|
|
|
|
|
|
|
|
# chuyển ảnh về mức xám
|
|
|
|
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
|
|
|
|
|
|
|
# resize ảnh phủ hợp với model
|
|
|
|
target_size = (48, 48)
|
|
|
|
resized_face = cv2.resize(gray, target_size)
|
|
|
|
|
|
|
|
# normalize ảnh
|
|
|
|
normalize_face = resized_face / 255.0
|
|
|
|
|
|
|
|
# chuyển về cùng shape với input tensror (1,48,48)
|
|
|
|
normalize_face = np.expand_dims(normalize_face, axis=0)
|
|
|
|
|
|
|
|
# model output 'probabilities': array([[0.019824,0.98018]], dtype=float32)
|
|
|
|
predictions = self.model.predict(normalize_face)
|
|
|
|
threshold = 0.5
|
|
|
|
predicted_class = 'Male' if predictions[0][1] >= threshold else 'Female'
|
|
|
|
|
|
|
|
return predicted_class
|