init - 初始化项目
This commit is contained in:
80
samples/python/tracker.py
Normal file
80
samples/python/tracker.py
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/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()
|
||||
Reference in New Issue
Block a user