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.
81 lines
2.0 KiB
81 lines
2.0 KiB
4 years ago
|
#!/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()
|