diff options
| author | zhang <zch921005@126.com> | 2022-06-04 08:48:54 +0800 |
|---|---|---|
| committer | zhang <zch921005@126.com> | 2022-06-04 08:48:54 +0800 |
| commit | 44097da7288042e988bcb89f1c6cc817a8e1eec9 (patch) | |
| tree | 7c28da29f31ca429b8d27ed7441d650f1195812d /cv/tracker/object_tracker.py | |
| parent | 0f885b830ac552bfd357dec74c70e1349434b58b (diff) | |
0604
Diffstat (limited to 'cv/tracker/object_tracker.py')
| -rw-r--r-- | cv/tracker/object_tracker.py | 106 |
1 files changed, 83 insertions, 23 deletions
diff --git a/cv/tracker/object_tracker.py b/cv/tracker/object_tracker.py index 315ffa3..7c99145 100644 --- a/cv/tracker/object_tracker.py +++ b/cv/tracker/object_tracker.py @@ -1,35 +1,95 @@ import cv2 +import sys -cap = cv2.VideoCapture(0) +(major_ver, minor_ver, subminor_ver) = (cv2.__version__).split('.') -tracker = cv2.TrackerGOTURN_create() -success, img = cap.read() +if __name__ == '__main__': -# select a bounding box ( ROI ) -bbox = cv2.selectROI("Tracking", img, False) -tracker.init(img, bbox) + # Set up tracker. + # Instead of MIL, you can also use + tracker_types = ['BOOSTING', 'MIL', 'KCF', 'TLD', 'MEDIANFLOW', 'GOTURN', 'MOSSE', 'CSRT'] + tracker_type = tracker_types[2] -def drawBox(img, bbox): - x, y, w, h = int(bbox[0]), int(bbox[1]), int(bbox[2]), int(bbox[3]) - cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 3, 1) - cv2.putText(img, "Tracking", (75, 75), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2) + if int(minor_ver) < 3: + tracker = cv2.Tracker_create(tracker_type) + else: + if tracker_type == 'BOOSTING': + tracker = cv2.TrackerBoosting_create() + if tracker_type == 'MIL': + tracker = cv2.TrackerMIL_create() + if tracker_type == 'KCF': + tracker = cv2.TrackerKCF_create() + if tracker_type == 'TLD': + tracker = cv2.TrackerTLD_create() + if tracker_type == 'MEDIANFLOW': + tracker = cv2.TrackerMedianFlow_create() + if tracker_type == 'GOTURN': + tracker = cv2.TrackerGOTURN_create() + if tracker_type == 'MOSSE': + tracker = cv2.TrackerMOSSE_create() + if tracker_type == "CSRT": + tracker = cv2.TrackerCSRT_create() + # Read video + video = cv2.VideoCapture("./video.avi") -while True: - timer = cv2.getTickCount() - success, img = cap.read() + # Exit if video not opened. + if not video.isOpened(): + print + "Could not open video" + sys.exit() - success, bbox = tracker.update(img) + # Read first frame. + ok, frame = video.read() + if not ok: + print + 'Cannot read video file' + sys.exit() - if success: - drawBox(img, bbox) - else: - cv2.putText(img, "Loss", (75, 75), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) + # Define an initial bounding box + bbox = (287, 23, 86, 320) + + # Uncomment the line below to select a different bounding box + bbox = cv2.selectROI(frame, False) + + # Initialize tracker with first frame and bounding box + ok = tracker.init(frame, bbox) + + while True: + # Read a new frame + ok, frame = video.read() + if not ok: + break + + # Start timer + timer = cv2.getTickCount() + + # Update tracker + ok, bbox = tracker.update(frame) + + # Calculate Frames per second (FPS) + fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer); + + # Draw bounding box + if ok: + # Tracking success + p1 = (int(bbox[0]), int(bbox[1])) + p2 = (int(bbox[0] + bbox[2]), int(bbox[1] + bbox[3])) + cv2.rectangle(frame, p1, p2, (255, 0, 0), 2, 1) + else: + # Tracking failure + cv2.putText(frame, "Tracking failure detected", (100, 80), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 0, 255), 2) + + # Display tracker type on frame + cv2.putText(frame, tracker_type + " Tracker", (100, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2); + + # Display FPS on frame + cv2.putText(frame, "FPS : " + str(int(fps)), (100, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2); - fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer) - cv2.putText(img, str(int(fps)), (75, 50), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2) - cv2.imshow("Tracking", img) + # Display result + cv2.imshow("Tracking", frame) - if cv2.waitKey(1) & 0xff == ord('q'): - break
\ No newline at end of file + # Exit if ESC pressed + k = cv2.waitKey(1) & 0xff + if k == 27: break |
