Skip to content

Commit 86fe093

Browse files
author
lcosicnus
committed
openCV tracker
1 parent 709eb14 commit 86fe093

File tree

4 files changed

+216
-10
lines changed

4 files changed

+216
-10
lines changed

CMS.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,4 +144,4 @@ def trackMultipleObjects():
144144
cv2.destroyAllWindows()
145145

146146
if __name__ == '__main__':
147-
trackMultipleObjects()
147+
trackMultipleObjects()

CMS_camshift.py

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
import cv2
2+
import numpy as np
3+
4+
video = 'video//prvi.mkv'
5+
cascade_src = 'myhaar.xml'
6+
width = 854
7+
height = 480
8+
red = (0, 0, 200)
9+
10+
cap = cv2.VideoCapture(video)
11+
cascade = cv2.CascadeClassifier(cascade_src)
12+
termination = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)
13+
14+
def resize(frame):
15+
resized_frame = cv2.resize(frame, (width, height), interpolation = cv2.INTER_AREA)
16+
return resized_frame
17+
18+
def rgb2gray(frame):
19+
gray_frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY)
20+
return gray_frame
21+
22+
def detect(frame):
23+
all_roi = []
24+
gray_frame = rgb2gray(frame)
25+
cars = cascade.detectMultiScale(gray_frame, 1.1, 13, 0, (24,24))
26+
for x, y, w, h in cars:
27+
all_roi.append((x, y, x + w, y + h))
28+
29+
cv2.imshow('video', frame)
30+
cv2.waitKey(1)
31+
return all_roi
32+
33+
def track(all_roi, all_roi_hist):
34+
for k in range(0, 30):
35+
ret, frame = cap.read()
36+
if type(frame) == type(None):
37+
return -1
38+
i = 0
39+
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
40+
41+
for roi_hist in all_roi_hist:
42+
back_proj = cv2.calcBackProject([hsv], [0], roi_hist, [0, 180], 1)
43+
(r, all_roi[i]) = cv2.CamShift(back_proj, all_roi[i], termination)
44+
45+
for j in range(0, 4):
46+
if all_roi[i][j] < 0:
47+
return -1
48+
pts = np.int32(cv2.cv.BoxPoints(r))
49+
cv2.polylines(frame, [pts], True, red, 2)
50+
i += 1
51+
52+
cv2.imshow('video', frame)
53+
cv2.waitKey(1)
54+
return 1
55+
56+
57+
def calc_hist(frame, all_roi):
58+
all_roi_hist = []
59+
for pts in all_roi:
60+
roi = frame[pts[1]:pts[-1], pts[0]:pts[2]]
61+
roi = cv2.cvtColor(roi, cv2.COLOR_BGR2HSV)
62+
roiHist = cv2.calcHist([roi], [0], None, [16], [0, 180])
63+
roiHist = cv2.normalize(roiHist, roiHist, 0, 255, cv2.NORM_MINMAX)
64+
all_roi_hist.append(roiHist)
65+
return all_roi_hist
66+
67+
def show():
68+
for k in range(0, 2):
69+
ret, frame = cap.read()
70+
if type(frame) == type(None):
71+
break
72+
cv2.imshow('video', frame)
73+
if cv2.waitKey(1) == 27:
74+
break
75+
def main():
76+
i = 0
77+
while True:
78+
if i % 2 == 0:
79+
all_roi = []
80+
all_hsv_roi = []
81+
ret, frame = cap.read()
82+
if type(frame) == type(None):
83+
cap.release()
84+
cv2.destroyAllWindows()
85+
return
86+
87+
frame = resize(frame)
88+
all_roi = detect(frame)
89+
90+
if len(all_roi) != 0:
91+
all_roi_hist = calc_hist(frame, all_roi)
92+
i += 1
93+
else:
94+
show()
95+
else:
96+
error = track(all_roi, all_roi_hist)
97+
if error == -1:
98+
cap.release()
99+
cv2.destroyAllWindows()
100+
return
101+
i += 1
102+
if cv2.waitKey(1) & 0xFF == ord('q'):
103+
break
104+
if __name__ == '__main__':
105+
main()

carDet.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
#path to classifier
66
#path to video file
7-
cascade_src = 'myhaar6.xml'
7+
cascade_src = 'myhaar.xml'
88
video_src = 'video//drugi.mkv'
99

1010
#read video
@@ -39,17 +39,12 @@
3939
#Detect objects with different dimensions in frame
4040
#output of function is list of rectangles
4141
#parameters: image, scaleFactior, minNeighbors, flags, minSize, maxSize
42-
cars = car_cascade.detectMultiScale(gray, 1.1, 7, 0, (24, 24))
42+
cars = car_cascade.detectMultiScale(gray, 1.1, 13, 0, (24, 24))
4343

4444
#drawing rectangle around detected object
4545
#defining regions where object will show up
4646
for (x, y, w, h) in cars:
47-
if x > 135 and x < 295:
48-
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
49-
if x >= 190 and x < 505:
50-
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
51-
if x >= 260 and x < 719:
52-
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
47+
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 0, 255), 2)
5348

5449
#calculation of frame rate
5550
fps = 1.0/(time.time() - start_time)
@@ -63,4 +58,4 @@
6358
break;
6459

6560
cv2.destroyAllWindows()
66-
cap.release()
61+
cap.release()

opencv_tracker.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
import cv2
2+
3+
carCascade = cv2.CascadeClassifier('myhaar.xml')
4+
video = cv2.VideoCapture('video//prvi.mkv')
5+
6+
#WIDTH = 854
7+
#HEIGHT = 480
8+
9+
#def distance(x1, y1, x2, y2):
10+
11+
12+
13+
def tracker():
14+
rectangleColor = (0, 0, 255)
15+
frameCounter = 0
16+
currentCarID = 0
17+
18+
carTracker = {}
19+
20+
while True:
21+
rc, image = video.read()
22+
if type(image) == type(None):
23+
break
24+
25+
# image = cv2.resize(image, (WIDTH, HEIGHT))
26+
image = image[150:720, 0:1000]
27+
resultImage = image.copy()
28+
29+
frameCounter = frameCounter + 1
30+
31+
carIDtoDelete = []
32+
33+
for carID in carTracker.keys():
34+
trackedPosition = carTracker[carID].update(image)
35+
#print(trackedPosition)
36+
t_x, t_y, t_w, t_h = trackedPosition[1]
37+
t_x = int(t_x)
38+
t_y = int(t_y)
39+
t_w = int(t_w)
40+
t_h = int(t_h)
41+
42+
if t_x + t_w >= 800:
43+
carIDtoDelete.append(carID)
44+
if t_y <= 0:
45+
carIDtoDelete.append(carID)
46+
47+
48+
for carID in carIDtoDelete:
49+
print('Tracker deleted: ' + str(carID) + '.')
50+
carTracker.pop(carID, None)
51+
52+
if not (frameCounter % 10):
53+
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
54+
cars = carCascade.detectMultiScale(gray, 1.1, 13)
55+
for (_x, _y, _w, _h) in cars:
56+
x = int(_x) + 5
57+
y = int(_y) + 5
58+
w = int(_w) - 5
59+
h = int(_h) - 5
60+
61+
x_bar = x + 0.5 * w
62+
y_bar = y + 0.5 * h
63+
64+
matchCarID = None
65+
66+
for carID in carTracker.keys():
67+
trackedPosition = carTracker[carID].update(image)
68+
t_x, t_y, t_w, t_h = trackedPosition[1]
69+
t_x = int(t_x)
70+
t_y = int(t_y)
71+
t_w = int(t_w)
72+
t_h = int(t_h)
73+
74+
t_x_bar = t_x + 0.5 * t_w
75+
t_y_bar = t_y + 0.5 * t_h
76+
77+
if ((t_x <= x_bar <= (t_x + t_w)) and (t_y <= y_bar <= (t_y + t_h)) and (x <= t_x_bar <= (x + w)) and (y <= t_y_bar <= (y + h))):
78+
matchCarID = carID
79+
80+
if matchCarID is None:
81+
bbox = (x, y, w, h)
82+
#tracker = cv2.Tracker_create('BOOSTING') #tracker
83+
#tracker = cv2.TrackerBoosting_create() #tracker
84+
tracker = cv2.TrackerMedianFlow_create() #tracker
85+
tracker.init(image, bbox)
86+
carTracker[currentCarID] = tracker
87+
currentCarID = currentCarID + 1
88+
89+
for carID in carTracker.keys():
90+
trackedPosition = carTracker[carID].update(image)
91+
t_x, t_y, t_w, t_h = trackedPosition[1]
92+
t_x = int(t_x)
93+
t_y = int(t_y)
94+
t_w = int(t_w)
95+
t_h = int(t_h)
96+
97+
cv2.rectangle(resultImage, (t_x, t_y), (t_x + t_w, t_y + t_h), rectangleColor, 2)
98+
cv2.imshow('image', resultImage)
99+
100+
if cv2.waitKey(33) == 27:
101+
break
102+
103+
cv2.destroyAllWindows()
104+
105+
if __name__ == '__main__':
106+
tracker()

0 commit comments

Comments
 (0)