-
Notifications
You must be signed in to change notification settings - Fork 1
/
tracking_APIs.py
76 lines (59 loc) · 2.27 KB
/
tracking_APIs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import cv2
import numpy as np
def ask_for_tracker():
print('Welcome! What Tracker API would you like to use?')
print('Enter 0 for Boosting: ')
print('Enter 1 for MIL: ')
print('Enter 2 for KCF: ')
print('Enter 3 for TLD: ')
print('Enter 4 for MedianFlow: ')
choice = input("Please select your tracker: ")
if choice == '0':
tracker = cv2.legacy.TrackerBoosting_create()
if choice == '1':
tracker = cv2.legacy.TrackerMIL_create()
if choice == '2':
tracker = cv2.legacy.TrackerKCF_create()
if choice == '3':
tracker = cv2.legacy.TrackerTLD_create()
if choice == '4':
tracker = cv2.legacy.TrackerMedianFlow_create()
return tracker
tracker = ask_for_tracker()
tracker_name = str(tracker).split()[0][1:]
#read video
cap = cv2.VideoCapture(r'I:\downloadly\Udemy – Python for Computer Vision with OpenCV and Deep Learning 2021-3\Udemy - Python for Computer Vision with OpenCV and Deep Learning 2021-3\1 - Course Overview and Introduction\Computer-Vision-with-Python\DATA\video_capture.mp4')
#read first frame
ret,frame = cap.read()
#special function allows us to draw on the very first frame our desired ROI
roi = cv2.selectROI(frame,False)
# Initialize tracker with first frame and bounding box
ret = tracker.init(frame,roi)
while True:
#read a new frame
ret,frame = cap.read()
#update tracker
success,roi = tracker.update(frame)
#roi variable is a tuple of 4 floats
#we need each value and we them as integers
(x,y,w,h) = tuple(map(int,roi))
#Draw rectangle as tracker moves
if success:
# tracking success
p1= (x,y)
p2 = (x+w,y+h)
cv2.rectangle(frame,p1,p2,(0,255,0),3)
else:
#tracking failure
cv2.putText(frame,'Failure to Detect tracking!!',
(100,200),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)
#display tracker type on frame
cv2.putText(frame,tracker_name,
(20,400),cv2.FONT_HERSHEY_SIMPLEX,1,(255,0,0),3)
#display result
cv2.imshow(tracker_name,frame)
k = cv2.waitKey(1) & 0xFF
if k == 27:
break
cv2.destroyAllWindows()
cap.release()