Skip to content
This repository was archived by the owner on Apr 11, 2024. It is now read-only.

Commit 769b3fc

Browse files
committed
integrating SORT tracker
1 parent 4aa2850 commit 769b3fc

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

video.py

+17-10
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
help="Whether or not frames should be displayed")
2323
args = vars(ap.parse_args())
2424

25-
def getPosFromRect(rect):
25+
def get_pos_from_rect(rect):
2626
return (rect.left(), rect.top(), rect.right(), rect.bottom())
2727

2828
def get_result(X):
@@ -33,17 +33,20 @@ def main():
3333
print("[INFO] sampling frames...")
3434
detector = dlib.get_frontal_face_detector()
3535
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")
3838
# stream = WebcamVideoStream("data/[MV] Fortune Cookie in Love (Fortune Cookie Yang Mencinta) - JKT48.mp4").start()
39+
3940
fps = FPS().start()
40-
# frame = stream.read()
4141
start = time.time()
42-
mot_tracker = Sort()
42+
mot_tracker = Sort(max_age=5)
4343
while fps._numFrames < args['num_frames']:
4444
grabbed, frame = stream.read()
4545
frame = cv2.resize(frame, (640, 360))
4646
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)))
4750
if len(rects) > 0 :
4851
shapes = dlib.full_object_detections()
4952
for rect in rects:
@@ -53,11 +56,15 @@ def main():
5356
faces = model.prep_image(faces)
5457
result = get_result(faces)
5558
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())
6168

6269
if args["display"] > 0:
6370
cv2.imshow("Frame", frame)

0 commit comments

Comments
 (0)