Jamin252 commited on
Commit
e4facfd
·
1 Parent(s): 70d4d77

add app.py

Browse files
Files changed (2) hide show
  1. age_deploy.prototxt +175 -0
  2. app.py +72 -0
age_deploy.prototxt ADDED
@@ -0,0 +1,175 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name: "CaffeNet"
2
+ input: "data"
3
+ input_dim: 1
4
+ input_dim: 3
5
+ input_dim: 227
6
+ input_dim: 227
7
+ layers {
8
+ name: "conv1"
9
+ type: CONVOLUTION
10
+ bottom: "data"
11
+ top: "conv1"
12
+ convolution_param {
13
+ num_output: 96
14
+ kernel_size: 7
15
+ stride: 4
16
+ }
17
+ }
18
+ layers {
19
+ name: "relu1"
20
+ type: RELU
21
+ bottom: "conv1"
22
+ top: "conv1"
23
+ }
24
+ layers {
25
+ name: "pool1"
26
+ type: POOLING
27
+ bottom: "conv1"
28
+ top: "pool1"
29
+ pooling_param {
30
+ pool: MAX
31
+ kernel_size: 3
32
+ stride: 2
33
+ }
34
+ }
35
+ layers {
36
+ name: "norm1"
37
+ type: LRN
38
+ bottom: "pool1"
39
+ top: "norm1"
40
+ lrn_param {
41
+ local_size: 5
42
+ alpha: 0.0001
43
+ beta: 0.75
44
+ }
45
+ }
46
+ layers {
47
+ name: "conv2"
48
+ type: CONVOLUTION
49
+ bottom: "norm1"
50
+ top: "conv2"
51
+ convolution_param {
52
+ num_output: 256
53
+ pad: 2
54
+ kernel_size: 5
55
+ }
56
+ }
57
+ layers {
58
+ name: "relu2"
59
+ type: RELU
60
+ bottom: "conv2"
61
+ top: "conv2"
62
+ }
63
+ layers {
64
+ name: "pool2"
65
+ type: POOLING
66
+ bottom: "conv2"
67
+ top: "pool2"
68
+ pooling_param {
69
+ pool: MAX
70
+ kernel_size: 3
71
+ stride: 2
72
+ }
73
+ }
74
+ layers {
75
+ name: "norm2"
76
+ type: LRN
77
+ bottom: "pool2"
78
+ top: "norm2"
79
+ lrn_param {
80
+ local_size: 5
81
+ alpha: 0.0001
82
+ beta: 0.75
83
+ }
84
+ }
85
+ layers {
86
+ name: "conv3"
87
+ type: CONVOLUTION
88
+ bottom: "norm2"
89
+ top: "conv3"
90
+ convolution_param {
91
+ num_output: 384
92
+ pad: 1
93
+ kernel_size: 3
94
+ }
95
+ }
96
+ layers{
97
+ name: "relu3"
98
+ type: RELU
99
+ bottom: "conv3"
100
+ top: "conv3"
101
+ }
102
+ layers {
103
+ name: "pool5"
104
+ type: POOLING
105
+ bottom: "conv3"
106
+ top: "pool5"
107
+ pooling_param {
108
+ pool: MAX
109
+ kernel_size: 3
110
+ stride: 2
111
+ }
112
+ }
113
+ layers {
114
+ name: "fc6"
115
+ type: INNER_PRODUCT
116
+ bottom: "pool5"
117
+ top: "fc6"
118
+ inner_product_param {
119
+ num_output: 512
120
+ }
121
+ }
122
+ layers {
123
+ name: "relu6"
124
+ type: RELU
125
+ bottom: "fc6"
126
+ top: "fc6"
127
+ }
128
+ layers {
129
+ name: "drop6"
130
+ type: DROPOUT
131
+ bottom: "fc6"
132
+ top: "fc6"
133
+ dropout_param {
134
+ dropout_ratio: 0.5
135
+ }
136
+ }
137
+ layers {
138
+ name: "fc7"
139
+ type: INNER_PRODUCT
140
+ bottom: "fc6"
141
+ top: "fc7"
142
+ inner_product_param {
143
+ num_output: 512
144
+ }
145
+ }
146
+ layers {
147
+ name: "relu7"
148
+ type: RELU
149
+ bottom: "fc7"
150
+ top: "fc7"
151
+ }
152
+ layers {
153
+ name: "drop7"
154
+ type: DROPOUT
155
+ bottom: "fc7"
156
+ top: "fc7"
157
+ dropout_param {
158
+ dropout_ratio: 0.5
159
+ }
160
+ }
161
+ layers {
162
+ name: "fc8"
163
+ type: INNER_PRODUCT
164
+ bottom: "fc7"
165
+ top: "fc8"
166
+ inner_product_param {
167
+ num_output: 8
168
+ }
169
+ }
170
+ layers {
171
+ name: "prob"
172
+ type: SOFTMAX
173
+ bottom: "fc8"
174
+ top: "prob"
175
+ }
app.py ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import cv2
3
+ import dlib
4
+
5
+ def age_predict(photo):
6
+
7
+ # photo = "face_age/001/16.png"
8
+
9
+ img = cv2.imread(photo)
10
+ img = cv2.resize(img, (720, 640))
11
+ frame = img.copy()
12
+
13
+ # Model for Age detection
14
+ age_weights = "age_deploy.prototxt"
15
+ age_config = "age_net.caffemodel"
16
+ age_Net = cv2.dnn.readNet(age_config, age_weights)
17
+
18
+ # Model requirements for image
19
+ ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
20
+ model_mean = (78.4263377603, 87.7689143744, 114.895847746) # Taken from the official site
21
+
22
+ # Storing the image dimensions
23
+ fH = img.shape[0]
24
+ fW = img.shape[1]
25
+
26
+ Boxes = [] # to store the face co-ordinates
27
+ mssg = 'Face Detected'
28
+
29
+ # Model for face detection
30
+ face_detector = dlib.get_frontal_face_detector()
31
+ # converting to grayscale
32
+ img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
33
+
34
+ # Detecting the faces
35
+ faces = face_detector(img_gray)
36
+
37
+ # If no faces are detected
38
+ if not faces:
39
+ mssg = 'No face detected'
40
+ # cv2.putText(img, f'{mssg}', (40,40), cv2.FONT_HERSHEY_SIMPLEX, 2, (200), 2)
41
+ # cv2.imshow('image',img)
42
+ # cv2.waitKey(0)
43
+ return mssg
44
+ else:
45
+ # Bounding face
46
+ for face in faces:
47
+ x = face.left() # extracting the face coordinates
48
+ y = face.top()
49
+ x2 = face.right()
50
+ y2 = face.bottom()
51
+
52
+ # Rescaling those coordinates for our image
53
+ box = [x, y, x2, y2]
54
+ Boxes.append(box)
55
+ cv2.rectangle(frame, (x,y), (x2, y2), (00, 200, 200), 2)
56
+
57
+ for box in Boxes:
58
+ face = frame[box[1]:box[3], box[0]:box[2]]
59
+
60
+ # Image preprocessing
61
+ blob = cv2.dnn.blobFromImage(face, 1.0, (227, 227), model_mean, swapRB = False)
62
+
63
+ # Age Prediction
64
+ age_Net.setInput(blob)
65
+ age_preds = age_Net.forward()
66
+ age = ageList[age_preds[0].argmax()]
67
+
68
+ # cv2.putText(frame, f'{mssg}:{age}', (box[0], box[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,255),2,cv2.LINE_AA)
69
+
70
+ # cv2.imshow('image', frame)
71
+ # cv2.waitKey(0)
72
+ return f'{mssg}:{age}'