-
Notifications
You must be signed in to change notification settings - Fork 1
/
ageGenderDetect.py
48 lines (31 loc) · 1.42 KB
/
ageGenderDetect.py
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
48
import cv2
import numpy as np
MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
genderList = ['Male', 'Female']
ageList = ['(4 - 6)', '(8 - 12)', '(15 - 20)', '(25 - 32)', '(25 - 32)', '(38 - 43)', '(48 - 53)', '(60 - 100)']
peerGroupList = ['New to the World', 'Starting Adult Life', 'Established Adult Life']
ageProto = "models/age_deploy.prototxt"
ageModel = "models/age_net.caffemodel"
genderProto = "models/gender_deploy.prototxt"
genderModel = "models/gender_net.caffemodel"
ageNet = cv2.dnn.readNet(ageModel, ageProto)
genderNet = cv2.dnn.readNet(genderModel, genderProto)
def detectAgeGender(face):
blob = cv2.dnn.blobFromImage(face, 1, (227, 227), MODEL_MEAN_VALUES, swapRB=False)
genderNet.setInput(blob)
genderPreds = genderNet.forward()
gender = genderList[genderPreds[0].argmax()]
ageNet.setInput(blob)
agePreds = ageNet.forward()
age = ageList[agePreds[0].argmax()]
return gender, age
def ageGenderDisplay(detected_gender_list, detected_age_list):
genderDisplay = max(set(detected_gender_list), key=detected_gender_list.count)
ageDisplay = max(set(detected_age_list), key=detected_age_list.count)
if int(ageDisplay[-3:-1]) < 10:
peerGroupDisplay = peerGroupList[0]
elif int(ageDisplay[-3:-1]) < 40:
peerGroupDisplay = peerGroupList[1]
else:
peerGroupDisplay = peerGroupList[2]
return genderDisplay, ageDisplay, peerGroupDisplay