-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathag.prx
More file actions
86 lines (73 loc) · 2.84 KB
/
ag.prx
File metadata and controls
86 lines (73 loc) · 2.84 KB
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import copy
import argparse
import cv2 as cv
import numpy as np
import os
import math
import time
import random
import tkinter as tk
import datetime
from colorama import init, Fore
def getFaceBox(net, frame, conf_threshold=0.7):
frameOpencvDnn = frame.copy()
frameHeight = frameOpencvDnn.shape[0]
frameWidth = frameOpencvDnn.shape[1]
blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)
net.setInput(blob)
detections = net.forward()
bboxes = []
for i in range(detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > conf_threshold:
x1 = int(detections[0, 0, i, 3] * frameWidth)
y1 = int(detections[0, 0, i, 4] * frameHeight)
x2 = int(detections[0, 0, i, 5] * frameWidth)
y2 = int(detections[0, 0, i, 6] * frameHeight)
bboxes.append([x1, y1, x2, y2])
return frameOpencvDnn, bboxes
faceProto = "data/ag/ag_models/opencv_face_detector.pbtxt"
faceModel = "data/ag/ag_models/opencv_face_detector_uint8.pb"
ageProto = "data/ag/ag_models/age_deploy.prototxt"
ageModel = "data/ag/ag_models/age_net.caffemodel"
genderProto = "data/ag/ag_models/gender_deploy.prototxt"
genderModel = "data/ag/ag_models/gender_net.caffemodel"
MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
genderList = ['Male', 'Female']
ageNet = cv.dnn.readNet(ageModel, ageProto)
genderNet = cv.dnn.readNet(genderModel, genderProto)
faceNet = cv.dnn.readNet(faceModel, faceProto)
cap = cv.VideoCapture(0)
padding = 20
os.chdir("data/ag")
while cv.waitKey(1) < 0:
t = time.time()
hasFrame, frame = cap.read()
if not hasFrame:
cv.waitKey()
break
frameFace, bboxes = getFaceBox(faceNet, frame)
count = 0
if not bboxes:
print("No face Detected, try again")
continue
for bbox in bboxes:
face = frame[max(0,bbox[1]-padding):min(bbox[3]+padding,frame.shape[0]-1),max(0,bbox[0]-padding):min(bbox[2]+padding, frame.shape[1]-1)]
blob = cv.dnn.blobFromImage(face, 1.0, (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()]
global label
label = "{},{}".format(gender, age)
current_time = datetime.datetime.now()
with open("{}{}.prx".format(current_time.day, current_time.hour), 'w') as f:
f.write("Age: {} Gender: {}".format(age, gender))
break
pd = os.path.dirname(os.getcwd())
os.chdir(pd)
pd = os.path.dirname(os.getcwd())
os.chdir(pd)