File size: 1,383 Bytes
d02fd5f
 
4e4a30c
8ff40df
d02fd5f
 
 
 
 
 
4e4a30c
 
 
 
 
 
 
 
 
 
 
d02fd5f
a2a302d
d02fd5f
4e4a30c
 
 
 
 
d02fd5f
4e4a30c
d02fd5f
 
4e4a30c
 
 
 
 
d02fd5f
4e4a30c
 
 
 
d02fd5f
 
4e4a30c
d02fd5f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
from fastai.vision.all import *
import gradio as gr
import cv2
classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml')

def label_func(fname):
    if int(str(fname)[str(fname).index('_')+1]) == 0:
        return "Male"
    return "Female"

def get_age(fname):
    return int(str(fname).split('/')[1].split('_')[0])

def detect_face(img):
    faces = classifier.detectMultiScale(img)
    x, y, w, h = faces[0]
    cropped_img = img[y:y+h, x:x+w]
    return cropped_img

learn_gender = load_learner('gender.pkl')
learn_age = load_learner('age.pkl')

categories = ('Female', 'Male')

def predict_age(img):
    detected_face = detect_face(img)
    pred,_,_ = learn_age.predict(detected_face)
    return str(pred[0]), detected_face

def classify_image(img):
    pred, idx, probs = learn_gender.predict(img)
    return dict(zip(categories, map(float, probs)))

def process_image(img):
    gender = classify_image(img)
    age, face = predict_age(img)
    return gender, age, face

image = gr.inputs.Image(shape=(192,192))
gender_output = gr.outputs.Label()
age_output = gr.outputs.Textbox(label='Predicted Age')
detected_face_output = gr.outputs.Image(type='numpy', label='Detected Face')
examples = ['Male.jpg', 'Female.png']


iface = gr.Interface(fn=process_image, inputs=image, outputs=[gender_output, age_output, detected_face_output], examples=examples)
iface.launch()