mirror of https://github.com/opencv/opencv.git
Open Source Computer Vision Library
https://opencv.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.0 KiB
80 lines
2.0 KiB
#!/usr/bin/env python |
|
|
|
''' |
|
Tracker demo |
|
|
|
USAGE: |
|
tracker.py [<video_source>] |
|
''' |
|
|
|
# Python 2/3 compatibility |
|
from __future__ import print_function |
|
|
|
import sys |
|
|
|
import numpy as np |
|
import cv2 as cv |
|
|
|
from video import create_capture, presets |
|
|
|
class App(object): |
|
|
|
def initializeTracker(self, image): |
|
while True: |
|
print('==> Select object ROI for tracker ...') |
|
bbox = cv.selectROI('tracking', image) |
|
print('ROI: {}'.format(bbox)) |
|
|
|
tracker = cv.TrackerMIL_create() |
|
try: |
|
tracker.init(image, bbox) |
|
except Exception as e: |
|
print('Unable to initialize tracker with requested bounding box. Is there any object?') |
|
print(e) |
|
print('Try again ...') |
|
continue |
|
|
|
return tracker |
|
|
|
def run(self): |
|
videoPath = sys.argv[1] if len(sys.argv) >= 2 else 'vtest.avi' |
|
camera = create_capture(videoPath, presets['cube']) |
|
if not camera.isOpened(): |
|
sys.exit("Can't open video stream: {}".format(videoPath)) |
|
|
|
ok, image = camera.read() |
|
if not ok: |
|
sys.exit("Can't read first frame") |
|
assert image is not None |
|
|
|
cv.namedWindow('tracking') |
|
tracker = self.initializeTracker(image) |
|
|
|
print("==> Tracking is started. Press 'SPACE' to re-initialize tracker or 'ESC' for exit...") |
|
|
|
while camera.isOpened(): |
|
ok, image = camera.read() |
|
if not ok: |
|
print("Can't read frame") |
|
break |
|
|
|
ok, newbox = tracker.update(image) |
|
#print(ok, newbox) |
|
|
|
if ok: |
|
cv.rectangle(image, newbox, (200,0,0)) |
|
|
|
cv.imshow("tracking", image) |
|
k = cv.waitKey(1) |
|
if k == 32: # SPACE |
|
tracker = self.initializeTracker(image) |
|
if k == 27: # ESC |
|
break |
|
|
|
print('Done') |
|
|
|
|
|
if __name__ == '__main__': |
|
print(__doc__) |
|
App().run() |
|
cv.destroyAllWindows()
|
|
|