22
22
help = "Whether or not frames should be displayed" )
23
23
args = vars (ap .parse_args ())
24
24
25
- def getPosFromRect (rect ):
25
+ def get_pos_from_rect (rect ):
26
26
return (rect .left (), rect .top (), rect .right (), rect .bottom ())
27
27
28
28
def get_result (X ):
@@ -33,17 +33,20 @@ def main():
33
33
print ("[INFO] sampling frames..." )
34
34
detector = dlib .get_frontal_face_detector ()
35
35
predictor = dlib .shape_predictor ('model/shape_predictor_5_face_landmarks.dat' )
36
- time .sleep (1 .0 )
37
- stream = cv2 .VideoCapture ("data/[MV] Fortune Cookie in Love (Fortune Cookie Yang Mencinta) - JKT48 .mp4" )
36
+ time .sleep (2 .0 )
37
+ stream = cv2 .VideoCapture ("data/nogizaka46_live .mp4" )
38
38
# stream = WebcamVideoStream("data/[MV] Fortune Cookie in Love (Fortune Cookie Yang Mencinta) - JKT48.mp4").start()
39
+
39
40
fps = FPS ().start ()
40
- # frame = stream.read()
41
41
start = time .time ()
42
- mot_tracker = Sort ()
42
+ mot_tracker = Sort (max_age = 5 )
43
43
while fps ._numFrames < args ['num_frames' ]:
44
44
grabbed , frame = stream .read ()
45
45
frame = cv2 .resize (frame , (640 , 360 ))
46
46
rects = detector (frame , 0 )
47
+ dets = np .array ([get_pos_from_rect (rect ) for rect in rects ])
48
+ ages = np .empty ((len (dets )))
49
+ genders = np .empty ((len (dets )))
47
50
if len (rects ) > 0 :
48
51
shapes = dlib .full_object_detections ()
49
52
for rect in rects :
@@ -53,11 +56,15 @@ def main():
53
56
faces = model .prep_image (faces )
54
57
result = get_result (faces )
55
58
genders , ages = model .decode_prediction (result )
56
- genders = np .where (genders == 0 , 'F' , 'M' )
57
- for (i , rect ) in enumerate (rects ):
58
- (left , top , right , bottom ) = getPosFromRect (rect )
59
- cv2 .rectangle (frame , (left , top ), (right , bottom ), (0 , 255 , 0 ), 2 )
60
- cv2 .putText (frame , "{:.0f}, {}" .format (ages [i ], genders [i ]), (left - 10 , top - 10 ), cv2 .FONT_HERSHEY_SIMPLEX , 0.5 , (0 , 255 , 0 ), 2 )
59
+
60
+ mot_tracker .update (dets , ages , genders )
61
+ for tracker in mot_tracker .trackers :
62
+ (left , top , right , bottom ) = convert_x_to_bbox (tracker .kf .x [:4 , :]).astype ('int' ).flatten ()
63
+ cv2 .rectangle (frame , (left , top ), (right , bottom ), (0 , 255 , 0 ), 2 )
64
+ age = tracker .smooth_age ()
65
+ gender = 'M' if tracker .smooth_gender () == 1 else 'F'
66
+ cv2 .putText (frame , "id: {} {} {}" .format (tracker .id , gender , age ), (left - 10 , top - 10 ), cv2 .FONT_HERSHEY_SIMPLEX , 0.45 , (0 , 255 , 0 ), 2 )
67
+ # print('bbox', tracker.kf.x[:4, :].flatten())
61
68
62
69
if args ["display" ] > 0 :
63
70
cv2 .imshow ("Frame" , frame )
0 commit comments