Spaces:
Running
Running
import cv2 | |
import yaml | |
import numpy as np | |
import os | |
from typing import Tuple | |
from src.cv_utils import get_image | |
with open("parameters.yml", "r") as stream: | |
try: | |
parameters = yaml.safe_load(stream) | |
except yaml.YAMLError as exc: | |
print(exc) | |
class GetFaceDemographics: | |
def __init__(self): | |
pass | |
def get_age(blob) -> Tuple: | |
age_net = cv2.dnn.readNet(parameters["face_age"]["config"], parameters["face_age"]["model"]) | |
age_list = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)'] | |
age_net.setInput(blob) | |
age_preds = age_net.forward() | |
i = age_preds[0].argmax() | |
age = age_list[i] | |
age_confidence_score = age_preds[0][i] | |
return age, age_confidence_score | |
def get_gender(blob) -> Tuple: | |
gender_net = cv2.dnn.readNet(parameters["face_gender"]["config"], parameters["face_gender"]["model"]) | |
gender_list = ['Male', 'Female'] | |
gender_net.setInput(blob) | |
gender_preds = gender_net.forward() | |
i = gender_preds[0].argmax() | |
gender = gender_list[i] | |
gender_confidence_score = gender_preds[0][i] | |
return gender, gender_confidence_score | |
def main(self, image_input) -> dict: | |
image = get_image(image_input) | |
model_mean = (78.4263377603, 87.7689143744, 114.895847746) # taken from the model page on Caffe | |
blob = cv2.dnn.blobFromImage(image, 1.0, (227, 227), model_mean, swapRB=False) | |
age, age_confidence_score = self.get_age(blob) | |
gender, gender_confidence_score = self.get_gender(blob) | |
d = { | |
"age_range": age, | |
"age_confidence": age_confidence_score, | |
"gender": gender, | |
"gender_confidence": gender_confidence_score | |
} | |
return d | |
if __name__ == "__main__": | |
path_to_images = "data/" | |
image_files = os.listdir(path_to_images) | |
for image in image_files: | |
print(image) | |
results = GetFaceDemographics().main(path_to_images + image) | |
print(results) |