mirror of
https://github.com/opencv/opencv.git
synced 2024-11-27 04:36:36 +08:00
aab6362705
Tracking API: move to video/tracking.hpp * video(tracking): moved code from opencv_contrib/tracking module - Tracker API - MIL, GOTURN trackers - applied clang-format * video(tracking): cleanup unused code * samples: add tracker.py sample * video(tracking): avoid div by zero * static analyzer
81 lines
2.0 KiB
Python
81 lines
2.0 KiB
Python
#!/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()
|