Prathamesh1420 commited on
Commit
0dd005e
·
verified ·
1 Parent(s): efe8db3

Upload 12 files

Browse files
model_median_frame.jpg ADDED
other_algorithms.py ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ import sys
4
+ from random import randint
5
+
6
+ TEXT_COLOR = (randint(0, 255), randint(0, 255), randint(0,255))
7
+ #print(TEXT_COLOR)
8
+ BORDER_COLOR = (randint(0, 255), randint(0, 255), randint(0,255))
9
+ #print(BORDER_COLOR)
10
+ FONT = cv2.FONT_HERSHEY_SIMPLEX
11
+ VIDEO_SOURCE = 'videos/Traffic_4.mp4'
12
+
13
+ BGS_TYPES = ['GMG', 'MOG2', 'MOG', 'KNN', 'CNT']
14
+ #print(BGS_TYPES[1])
15
+
16
+ def get_kernel(KERNEL_TYPE):
17
+ if KERNEL_TYPE == 'dilation':
18
+ kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
19
+ if KERNEL_TYPE == 'opening':
20
+ kernel = np.ones((3,3), np.uint8)
21
+ if KERNEL_TYPE == 'closing':
22
+ kernel = np.ones((3,3), np.uint8)
23
+ return kernel
24
+
25
+ #get_kernel('closing')
26
+
27
+ def get_filter(img, filter):
28
+ if filter == 'closing':
29
+ return cv2.morphologyEx(img, cv2.MORPH_CLOSE, get_kernel('closing'), iterations=2)
30
+ if filter == 'opening':
31
+ return cv2.morphologyEx(img, cv2.MORPH_OPEN, get_kernel('opening'), iterations = 2)
32
+ if filter == 'dilation':
33
+ return cv2.dilate(img, get_kernel('dilation'), iterations = 2)
34
+ if filter == 'combine':
35
+ closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, get_kernel('closing'), iterations = 2)
36
+ opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, get_kernel('opening'), iterations = 2)
37
+ dilation = cv2.dilate(opening, get_kernel('dilation'), iterations=2)
38
+ return dilation
39
+
40
+ def get_bgsubtractor(BGS_TYPE):
41
+ # https://docs.opencv.org/3.4/d1/d5c/classcv_1_1bgsegm_1_1BackgroundSubtractorGMG.html
42
+ if BGS_TYPE == 'GMG':
43
+ return cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames = 120,
44
+ decisionThreshold = 0.8)
45
+ # https://docs.opencv.org/3.4/d6/da7/classcv_1_1bgsegm_1_1BackgroundSubtractorMOG.html
46
+ if BGS_TYPE == 'MOG':
47
+ return cv2.bgsegm.createBackgroundSubtractorMOG(history = 200, nmixtures = 5,
48
+ backgroundRatio = 0.7, noiseSigma=0)
49
+ # https://docs.opencv.org/3.4/d7/d7b/classcv_1_1BackgroundSubtractorMOG2.html
50
+ if BGS_TYPE == 'MOG2':
51
+ return cv2.createBackgroundSubtractorMOG2(history = 500, detectShadows = True,
52
+ varThreshold = 100)
53
+ # https://docs.opencv.org/3.4/db/d88/classcv_1_1BackgroundSubtractorKNN.html
54
+ if BGS_TYPE == 'KNN':
55
+ return cv2.createBackgroundSubtractorKNN(history = 500, dist2Threshold=400,
56
+ detectShadows = True)
57
+ # https://docs.opencv.org/3.4/de/dca/classcv_1_1bgsegm_1_1BackgroundSubtractorCNT.html
58
+ if BGS_TYPE == 'CNT':
59
+ return cv2.bgsegm.createBackgroundSubtractorCNT(minPixelStability=15,
60
+ useHistory = True,
61
+ maxPixelStability = 15*60,
62
+ isParallel=True)
63
+ print('Invalid detector!')
64
+ sys.exit(0)
65
+
66
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
67
+ # 0 = GMG, 1 = MOG2, 2 = MOG, 3 = KNN, 4 = CNT
68
+ bg_subtractor = get_bgsubtractor(BGS_TYPES[1])
69
+ BGS_TYPE = BGS_TYPES[1]
70
+
71
+ def main():
72
+ while cap.isOpened():
73
+ ok, frame = cap.read()
74
+ #print(ok)
75
+ #print(frame.shape)
76
+
77
+ frame = cv2.resize(frame, (0,0), fx=0.5, fy=0.5)
78
+ bg_mask = bg_subtractor.apply(frame)
79
+
80
+ fg_mask = get_filter(bg_mask, 'dilation')
81
+ fg_mask_closing = get_filter(bg_mask, 'closing')
82
+ fg_mask_opening = get_filter(bg_mask, 'opening')
83
+ fg_mask_combine = get_filter(bg_mask, 'combine')
84
+ #print(frame.shape)
85
+
86
+ # https://docs.opencv.org/master/d0/d86/tutorial_py_image_arithmetics.html
87
+ # https://www.pyimagesearch.com/2021/01/19/opencv-bitwise-and-or-xor-and-not/
88
+ res = cv2.bitwise_and(frame, frame, mask=fg_mask)
89
+ res_closing = cv2.bitwise_and(frame, frame, mask=fg_mask_closing)
90
+ res_opening = cv2.bitwise_and(frame, frame, mask=fg_mask_opening)
91
+ res_combine = cv2.bitwise_and(frame, frame, mask=fg_mask_combine)
92
+
93
+ cv2.putText(res_combine, 'Background subtractor: ' + BGS_TYPE, (10,50), FONT, 1, BORDER_COLOR, 3, cv2.LINE_AA)
94
+ cv2.putText(res_combine, 'Background subtractor: ' + BGS_TYPE, (10, 50), FONT, 1, BORDER_COLOR, 2, cv2.LINE_AA)
95
+
96
+ if not ok:
97
+ print('End processing the video')
98
+ break
99
+
100
+ if BGS_TYPE != 'MOG' and BGS_TYPE != 'GMG':
101
+ cv2.imshow('Background model', bg_subtractor.getBackgroundImage())
102
+
103
+ cv2.imshow('Frame', frame)
104
+ cv2.imshow('BG mask', bg_mask)
105
+ #cv2.imshow('Dilation', fg_mask)
106
+ cv2.imshow('Dilation final', res)
107
+ cv2.imshow('Closing final', res_closing)
108
+ cv2.imshow('Opening final', res_opening)
109
+ cv2.imshow('Combine final', res_combine)
110
+
111
+ if cv2.waitKey(1) & 0xFF == ord('q'):
112
+ break
113
+
114
+ main()
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
performance_comparison.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import sys
3
+ from random import randint
4
+
5
+ TEXTCOLOR = (randint(0, 255), randint(0, 255), randint(0, 255))
6
+ BORDERCOLOR = (randint(0, 255), randint(0, 255), randint(0, 255))
7
+ FONT = cv2.FONT_HERSHEY_SIMPLEX
8
+ VIDEO_SOURCE = "videos/people.mp4"
9
+ BGS_TYPES = ["GMG", "MOG", "MOG2", "KNN", "CNT"]
10
+ BGS_TYPE = BGS_TYPES[4]
11
+ # GMG 38
12
+ # MOG 28
13
+ # MOG2 18
14
+ # KNN 16
15
+ # CNT 15
16
+
17
+ def getBGSubtractor(BGS_TYPE):
18
+ if BGS_TYPE == "GMG":
19
+ return cv2.bgsegm.createBackgroundSubtractorGMG()
20
+ if BGS_TYPE == "MOG":
21
+ return cv2.bgsegm.createBackgroundSubtractorMOG()
22
+ if BGS_TYPE == "MOG2":
23
+ return cv2.createBackgroundSubtractorMOG2()
24
+ if BGS_TYPE == "KNN":
25
+ return cv2.createBackgroundSubtractorKNN()
26
+ if BGS_TYPE == "CNT":
27
+ return cv2.bgsegm.createBackgroundSubtractorCNT()
28
+ print("Unknown createBackgroundSubtractor type")
29
+ sys.exit(1)
30
+
31
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
32
+ bg_subtractor = getBGSubtractor(BGS_TYPE)
33
+ e1 = cv2.getTickCount()
34
+
35
+ def main():
36
+ frame_number = -1
37
+ while (cap.isOpened):
38
+ ok, frame = cap.read()
39
+
40
+ if not ok:
41
+ print('Finish processing the video')
42
+ break
43
+
44
+ frame_number += 1
45
+
46
+ bg_mask = bg_subtractor.apply(frame)
47
+ res = cv2.bitwise_and(frame, frame, mask=bg_mask)
48
+
49
+ cv2.imshow('Frame', frame)
50
+ cv2.imshow('Mask', res)
51
+
52
+ if cv2.waitKey(1) & 0xFF == ord("q") or frame_number > 250:
53
+ break
54
+
55
+ e2 = cv2.getTickCount()
56
+ t = (e2 - e1) / cv2.getTickFrequency()
57
+ print(t)
58
+
59
+ main()
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
project1.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ import sys
4
+
5
+ TEXT_COLOR = (0, 255, 0)
6
+ TRACKER_COLOR = (255, 0, 0)
7
+ FONT = cv2.FONT_HERSHEY_SIMPLEX
8
+ VIDEO_SOURCE = "videos/Animal_1.mp4"
9
+
10
+ BGS_TYPES = ["GMG", "MOG", "MOG2", "KNN", "CNT"]
11
+ BGS_TYPE = BGS_TYPES[2]
12
+
13
+ def getKernel(KERNEL_TYPE):
14
+ if KERNEL_TYPE == "dilation":
15
+ kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
16
+ if KERNEL_TYPE == "opening":
17
+ kernel = np.ones((3, 3), np.uint8)
18
+ if KERNEL_TYPE == "closing":
19
+ kernel = np.ones((3, 3), np.uint8)
20
+
21
+ return kernel
22
+
23
+ def getFilter(img, filter):
24
+ if filter == 'closing':
25
+ return cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2)
26
+
27
+ if filter == 'opening':
28
+ return cv2.morphologyEx(img, cv2.MORPH_OPEN, getKernel("opening"), iterations=2)
29
+
30
+ if filter == 'dilation':
31
+ return cv2.dilate(img, getKernel("dilation"), iterations=2)
32
+
33
+ if filter == 'combine':
34
+ closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2)
35
+ opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, getKernel("opening"), iterations=2)
36
+ dilation = cv2.dilate(opening, getKernel("dilation"), iterations=2)
37
+
38
+ return dilation
39
+
40
+ def getBGSubtractor(BGS_TYPE):
41
+ if BGS_TYPE == "GMG":
42
+ return cv2.bgsegm.createBackgroundSubtractorGMG()
43
+ if BGS_TYPE == "MOG":
44
+ return cv2.bgsegm.createBackgroundSubtractorMOG()
45
+ if BGS_TYPE == "MOG2":
46
+ return cv2.createBackgroundSubtractorMOG2()
47
+ if BGS_TYPE == "KNN":
48
+ return cv2.createBackgroundSubtractorKNN()
49
+ if BGS_TYPE == "CNT":
50
+ return cv2.bgsegm.createBackgroundSubtractorCNT()
51
+ print("Invalid detector")
52
+ sys.exit(1)
53
+
54
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
55
+ bg_subtractor = getBGSubtractor(BGS_TYPE)
56
+ minArea = 250
57
+
58
+ def main():
59
+ while (cap.isOpened):
60
+ ok, frame = cap.read()
61
+ if not ok:
62
+ print("Finished processing the video")
63
+ break
64
+
65
+ frame = cv2.resize(frame, (0, 0), fx=0.50, fy=0.50)
66
+
67
+ bg_mask = bg_subtractor.apply(frame)
68
+ bg_mask = getFilter(bg_mask, 'combine')
69
+ bg_mask = cv2.medianBlur(bg_mask, 5)
70
+
71
+ (contours, hierarchy) = cv2.findContours(bg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
72
+ #print(contours)
73
+ for cnt in contours:
74
+ area = cv2.contourArea(cnt)
75
+ if area >= minArea:
76
+ x, y, w, h = cv2.boundingRect(cnt)
77
+ cv2.rectangle(frame, (10,30), (250,55), (255,0,0), -1)
78
+ cv2.putText(frame, 'Motion detected!', (10,50), FONT, 0.8, TEXT_COLOR, 2, cv2.LINE_AA)
79
+
80
+ #cv2.drawContours(frame, cnt, -1, TRACKER_COLOR, 3)
81
+ #cv2.drawContours(frame, cnt, -1, (255,255,255), 1)
82
+ #cv2.rectangle(frame, (x,y), (x+w, y+h), TRACKER_COLOR, 3)
83
+ #cv2.rectangle(frame, (x, y), (x + w, y + h), (255,255,255), 1)
84
+
85
+ # https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/
86
+ for alpha in np.arange(0.8, 1.1, 0.9)[::-1]:
87
+ frame_copy = frame.copy()
88
+ output = frame.copy()
89
+ cv2.drawContours(frame_copy, [cnt], -1, TRACKER_COLOR, -1)
90
+ frame = cv2.addWeighted(frame_copy, alpha, output, 1 - alpha, 0, output)
91
+
92
+
93
+ result = cv2.bitwise_and(frame, frame, mask=bg_mask)
94
+ cv2.imshow('Frame', frame)
95
+ cv2.imshow('Mask', result)
96
+
97
+ if cv2.waitKey(1) & 0xFF == ord("q"):
98
+ break
99
+
100
+ main()
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
project2.py ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ import sys
4
+
5
+ TEXT_COLOR = (24, 201, 255)
6
+ TRACKER_COLOR = (255, 128, 0)
7
+ WARNING_COLOR = (24, 201, 255)
8
+ FONT = cv2.FONT_HERSHEY_SIMPLEX
9
+ VIDEO_SOURCE = "videos/Pedestrians_2.mp4"
10
+
11
+ BGS_TYPES = ["GMG", "MOG", "MOG2", "KNN", "CNT"]
12
+ BGS_TYPE = BGS_TYPES[0]
13
+
14
+ def getKernel(KERNEL_TYPE):
15
+ if KERNEL_TYPE == "dilation":
16
+ kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))
17
+ if KERNEL_TYPE == "opening":
18
+ kernel = np.ones((3, 5), np.uint8)
19
+ if KERNEL_TYPE == "closing":
20
+ kernel = np.ones((11, 11), np.uint8)
21
+
22
+ return kernel
23
+
24
+ def getFilter(img, filter):
25
+ if filter == 'closing':
26
+ return cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2)
27
+
28
+ if filter == 'opening':
29
+ return cv2.morphologyEx(img, cv2.MORPH_OPEN, getKernel("opening"), iterations=2)
30
+
31
+ if filter == 'dilation':
32
+ return cv2.dilate(img, getKernel("dilation"), iterations=2)
33
+
34
+ if filter == 'combine':
35
+ closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2)
36
+ opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, getKernel("opening"), iterations=2)
37
+ dilation = cv2.dilate(opening, getKernel("dilation"), iterations=2)
38
+
39
+ return dilation
40
+
41
+ def getBGSubtractor(BGS_TYPE):
42
+ if BGS_TYPE == "GMG":
43
+ return cv2.bgsegm.createBackgroundSubtractorGMG()
44
+ if BGS_TYPE == "MOG":
45
+ return cv2.bgsegm.createBackgroundSubtractorMOG()
46
+ if BGS_TYPE == "MOG2":
47
+ return cv2.createBackgroundSubtractorMOG2(detectShadows=False, varThreshold=100)
48
+ if BGS_TYPE == "KNN":
49
+ return cv2.createBackgroundSubtractorKNN()
50
+ if BGS_TYPE == "CNT":
51
+ return cv2.bgsegm.createBackgroundSubtractorCNT()
52
+ print("Invalid detector")
53
+ sys.exit(1)
54
+
55
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
56
+ bg_subtractor = getBGSubtractor(BGS_TYPE)
57
+ minArea = 400
58
+ maxArea = 3000
59
+
60
+ def main():
61
+ while (cap.isOpened):
62
+ ok, frame = cap.read()
63
+
64
+ if not ok:
65
+ print("Finished processing the video")
66
+ break
67
+
68
+ frame = cv2.resize(frame, (0, 0), fx=0.50, fy=0.50)
69
+ bg_mask = bg_subtractor.apply(frame)
70
+ bg_mask = getFilter(bg_mask, 'combine')
71
+ bg_mask = cv2.medianBlur(bg_mask, 5)
72
+ (contours, hierarchy) = cv2.findContours(bg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
73
+ for cnt in contours:
74
+ area = cv2.contourArea(cnt)
75
+ if area >= minArea:
76
+ x, y, w, h = cv2.boundingRect(cnt)
77
+ cv2.drawContours(frame, cnt, 1, TRACKER_COLOR, 10)
78
+ cv2.drawContours(frame, cnt, 1, (255,255,255), 1)
79
+
80
+ if area >= maxArea:
81
+ cv2.rectangle(frame, (x,y), (x + 120, y - 13), (49,49,49), -1)
82
+ cv2.putText(frame, 'Warning', (x, y - 2), FONT, 0.4, (255,255,255), 1, cv2.LINE_AA)
83
+ cv2.drawContours(frame, [cnt], -1, WARNING_COLOR, 2)
84
+ cv2.drawContours(frame, [cnt], -1, WARNING_COLOR, 1)
85
+
86
+ res = cv2.bitwise_and(frame, frame, mask=bg_mask)
87
+
88
+ cv2.putText(res, BGS_TYPE, (10,50), FONT, 1, (255,255,255), 3, cv2.LINE_AA)
89
+ cv2.putText(res, BGS_TYPE, (10, 50), FONT, 1, TEXT_COLOR, 2, cv2.LINE_AA)
90
+
91
+ cv2.imshow('Frame', frame)
92
+ cv2.imshow('Mask', res)
93
+
94
+
95
+ if cv2.waitKey(1) & 0xFF == ord("q"):
96
+ break
97
+
98
+ main()
99
+
project3.py ADDED
@@ -0,0 +1,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ import sys
4
+ import time
5
+ import validator
6
+ from random import randint
7
+
8
+ LINE_IN_COLOR = (64, 255, 0)
9
+ LINE_OUT_COLOR = (0, 0, 255)
10
+ BOUNDING_BOX_COLOR = (255, 128, 0)
11
+ TRACKER_COLOR = (randint(0, 255), randint(0, 255), randint(0, 255))
12
+ CENTROID_COLOR = (randint(0, 255), randint(0, 255), randint(0, 255))
13
+ TEXT_COLOR = (randint(0, 255), randint(0, 255), randint(0, 255))
14
+ TEXT_POSITION_BGS = (10, 50)
15
+ TEXT_POSITION_COUNT_CARS = (10, 100)
16
+ TEXT_POSITION_COUNT_TRUCKS = (10, 150)
17
+ TEXT_SIZE = 1.2
18
+ FONT = cv2.FONT_HERSHEY_SIMPLEX
19
+ SAVE_IMAGE = True
20
+ IMAGE_DIR = "./vehicles"
21
+ VIDEO_SOURCE = "videos/Traffic_3.mp4"
22
+ VIDEO_OUT = "videos/results/result_traffic.avi"
23
+
24
+ BGS_TYPES = ["GMG", "MOG", "MOG2", "KNN", "CNT"]
25
+ BGS_TYPE = BGS_TYPES[2]
26
+
27
+ def getKernel(KERNEL_TYPE):
28
+ if KERNEL_TYPE == "dilation":
29
+ kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (2, 2))
30
+ if KERNEL_TYPE == "opening":
31
+ kernel = np.ones((3, 3), np.uint8)
32
+ if KERNEL_TYPE == "closing":
33
+ kernel = np.ones((11, 11), np.uint8)
34
+
35
+ return kernel
36
+
37
+ def getFilter(img, filter):
38
+ if filter == 'closing':
39
+ return cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2)
40
+
41
+ if filter == 'opening':
42
+ return cv2.morphologyEx(img, cv2.MORPH_OPEN, getKernel("opening"), iterations=2)
43
+
44
+ if filter == 'dilation':
45
+ return cv2.dilate(img, getKernel("dilation"), iterations=2)
46
+
47
+ if filter == 'combine':
48
+ closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, getKernel("closing"), iterations=2)
49
+ opening = cv2.morphologyEx(closing, cv2.MORPH_OPEN, getKernel("opening"), iterations=2)
50
+ dilation = cv2.dilate(opening, getKernel("dilation"), iterations=2)
51
+
52
+ return dilation
53
+
54
+ def getBGSubtractor(BGS_TYPE):
55
+ if BGS_TYPE == "GMG":
56
+ return cv2.bgsegm.createBackgroundSubtractorGMG(initializationFrames=120, decisionThreshold=.8)
57
+ if BGS_TYPE == "MOG":
58
+ return cv2.bgsegm.createBackgroundSubtractorMOG(history=200, nmixtures=5, backgroundRatio=.7, noiseSigma=0)
59
+ if BGS_TYPE == "MOG2":
60
+ return cv2.createBackgroundSubtractorMOG2(history=50, detectShadows=False, varThreshold=200)
61
+ if BGS_TYPE == "KNN":
62
+ return cv2.createBackgroundSubtractorKNN(history=100, dist2Threshold=400, detectShadows=True)
63
+ if BGS_TYPE == "CNT":
64
+ return cv2.bgsegm.createBackgroundSubtractorCNT(minPixelStability=15, useHistory=True,
65
+ maxPixelStability=15 * 60, isParallel=True)
66
+ print("Invalid detector")
67
+ sys.exit(1)
68
+
69
+ def getCentroid(x, y, w, h):
70
+ x1 = int(w / 2)
71
+ y1 = int(h / 2)
72
+ cx = x + x1
73
+ cy = y + y1
74
+ return (cx, cy)
75
+
76
+ #print(getCentroid(50, 100, 100, 100))
77
+
78
+ def save_frame(frame, file_name, flip=True):
79
+ if flip: # BGR -> RGB
80
+ cv2.imwrite(file_name, np.flip(frame, 2))
81
+ else:
82
+ cv2.imwrite(file_name, frame)
83
+
84
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
85
+ hasFrame, frame = cap.read()
86
+
87
+ fourcc = cv2.VideoWriter_fourcc(*'XVID')
88
+ writer_video = cv2.VideoWriter(VIDEO_OUT, fourcc, 25, (frame.shape[1], frame.shape[0]), True)
89
+
90
+ # ROI
91
+ bbox = cv2.selectROI(frame, False)
92
+ #print(bbox)
93
+ (w1, h1, w2, h2) = bbox
94
+ #print(w1, h1, w2, h2)
95
+
96
+ frameArea = h2 * w2
97
+ #print(frameArea)
98
+ minArea = int(frameArea / 250)
99
+ #print(minArea)
100
+ maxArea = 15000
101
+
102
+ line_IN = int(h1)
103
+ line_OUT = int(h2 - 20)
104
+ #print(line_IN, line_OUT)
105
+
106
+ DOWN_limit = int(h1 / 4)
107
+ print('Down IN limit Y', str(DOWN_limit))
108
+ print('Down OUT limit Y', str(line_OUT))
109
+
110
+ bg_subtractor = getBGSubtractor(BGS_TYPE)
111
+
112
+ def main():
113
+ frame_number = -1
114
+ cnt_cars, cnt_trucks = 0, 0
115
+ objects = []
116
+ max_p_age = 2
117
+ pid = 1
118
+ while (cap.isOpened()):
119
+ ok, frame = cap.read()
120
+ if not ok:
121
+ print("Finished processing the video")
122
+ break
123
+
124
+ roi = frame[h1:h1 + h2, w1:w1 + w2]
125
+
126
+ for i in objects:
127
+ #print('test')
128
+ i.age_one()
129
+
130
+ frame_number += 1
131
+ bg_mask = bg_subtractor.apply(roi)
132
+ bg_mask = getFilter(bg_mask,'combine')
133
+ (contours, hierarchy) = cv2.findContours(bg_mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
134
+ for cnt in contours:
135
+ area = cv2.contourArea(cnt)
136
+
137
+ # Counting the cars
138
+ if area > minArea and area <= maxArea:
139
+ x,y,w,h = cv2.boundingRect(cnt)
140
+ centroid = getCentroid(x, y, w, h)
141
+ cx = centroid[0]
142
+ cy = centroid[1]
143
+ new = True
144
+ cv2.rectangle(roi, (x,y), (x + 50, y - 13), TRACKER_COLOR, -1)
145
+ cv2.putText(roi, 'CAR', (x, y-2), FONT, 0.5, (255,255,255), 1, cv2.LINE_AA)
146
+ for i in objects:
147
+ if abs(x - i.getX()) <= w and abs(y - i.getY()) <= h:
148
+ new = False
149
+ i.updateCoords(cx, cy)
150
+
151
+ if i.going_DOWN(DOWN_limit) == True:
152
+ cnt_cars += 1
153
+ if SAVE_IMAGE:
154
+ save_frame(roi, IMAGE_DIR + '/car_DOWN_%04d.png' % frame_number)
155
+ print('ID:', i.getId(), ' passed by the road in', time.strftime('%c'))
156
+ break
157
+ if i.getState() == '1':
158
+ if i.getDir() == 'down' and i.getY() > line_OUT:
159
+ i.setDone()
160
+ if i.timedOut():
161
+ index = objects.index(i)
162
+ objects.pop(index)
163
+ del i
164
+ if new == True:
165
+ p = validator.MyValidator(pid, cx, cy, max_p_age)
166
+ objects.append(p)
167
+ pid += 1
168
+ cv2.circle(roi, (cx, cy), 5, CENTROID_COLOR, -1)
169
+
170
+ # Counting the trucks
171
+ elif area >= maxArea:
172
+ x, y, w, h = cv2.boundingRect(cnt)
173
+ centroid = getCentroid(x, y, w, h)
174
+ cx = centroid[0]
175
+ cy = centroid[1]
176
+
177
+ new = True
178
+
179
+ cv2.rectangle(roi, (x, y), (x + 50, y - 13), TRACKER_COLOR, -1)
180
+ cv2.putText(roi, 'TRUCK', (x, y - 2), FONT, .5, (255, 255, 255), 1, cv2.LINE_AA)
181
+
182
+ for i in objects:
183
+ if abs(x - i.getX()) <= w and abs(y - i.getY()) <= h:
184
+ new = False
185
+ i.updateCoords(cx, cy)
186
+
187
+ if i.going_DOWN(DOWN_limit) == True:
188
+ cnt_trucks += 1
189
+ if SAVE_IMAGE:
190
+ save_frame(roi, IMAGE_DIR + "/truck_DOWN_%04d.png" % frame_number, flip=False)
191
+ print("ID:", i.getId(), 'passed by the road', time.strftime("%c"))
192
+ break
193
+ if i.getState() == '1':
194
+ if i.getDir() == 'down' and i.getY() > line_OUT:
195
+ i.setDone()
196
+ if i.timedOut():
197
+ index = objects.index(i)
198
+ objects.pop(index)
199
+ del i
200
+ if new == True:
201
+ p = validator.MyValidator(pid, cx, cy, max_p_age)
202
+ objects.append(p)
203
+ pid += 1
204
+ cv2.circle(roi, (cx, cy), 5, CENTROID_COLOR, -1)
205
+
206
+ for i in objects:
207
+ cv2.putText(roi, str(i.getId()), (i.getX(), i.getY()), FONT, 0.3, TEXT_COLOR, 1, cv2.LINE_AA)
208
+
209
+ str_cars = 'Cars: ' + str(cnt_cars)
210
+ str_trucks = 'Trucks: ' + str(cnt_trucks)
211
+
212
+ frame = cv2.line(frame, (w1, line_IN), (w1 + w2, line_IN), LINE_IN_COLOR, 2)
213
+ frame = cv2.line(frame, (w1, h1 + line_OUT), (w1 + w2, h1 + line_OUT), LINE_OUT_COLOR, 2)
214
+
215
+ cv2.putText(frame, str_cars, TEXT_POSITION_COUNT_CARS, FONT, 1, (255,255,255), 3, cv2.LINE_AA)
216
+ cv2.putText(frame, str_cars, TEXT_POSITION_COUNT_CARS, FONT, 1, (232, 162, 0), 2, cv2.LINE_AA)
217
+
218
+ cv2.putText(frame, str_trucks, TEXT_POSITION_COUNT_TRUCKS, FONT, 1, (255, 255, 255), 3, cv2.LINE_AA)
219
+ cv2.putText(frame, str_trucks, TEXT_POSITION_COUNT_TRUCKS, FONT, 1, (232, 162, 0), 2, cv2.LINE_AA)
220
+
221
+ cv2.putText(frame, 'Background Subtractor: ' + BGS_TYPE, TEXT_POSITION_BGS, FONT, TEXT_SIZE, (255, 255, 255), 3,cv2.LINE_AA)
222
+ cv2.putText(frame, 'Background Subtractor: ' + BGS_TYPE, TEXT_POSITION_BGS, FONT, TEXT_SIZE, (128, 0, 255), 2,
223
+ cv2.LINE_AA)
224
+
225
+
226
+ cv2.imshow('Frame', frame)
227
+ cv2.imshow('Mask', bg_mask)
228
+
229
+ writer_video.write(frame)
230
+
231
+ if cv2.waitKey(1) & 0xFF == ord("q"):
232
+ break
233
+
234
+ cap.release()
235
+ cv2.destroyAllWindows()
236
+
237
+ main()
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
quality_comparison.py ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2
3
+ import sys
4
+ from random import randint
5
+ import csv
6
+
7
+ fp = open('report.csv', mode='w')
8
+ writer = csv.DictWriter(fp, fieldnames=['Frame', 'Pixel Count'])
9
+ writer.writeheader()
10
+
11
+ TEXT_COLOR = (randint(0, 255), randint(0,255), randint(0,255))
12
+ BORDER_COLOR = (randint(0, 255), randint(0,255), randint(0,255))
13
+ FONT = cv2.FONT_HERSHEY_SIMPLEX
14
+ TEXT_SIZE = 1.2
15
+ VIDEO_SOURCE = "videos/people.mp4"
16
+ TITLE_TEXT_POSITION = (100, 40)
17
+
18
+ BGS_TYPES = ["GMG", "MOG", "MOG2", "KNN", "CNT"]
19
+
20
+ def getBGSubtractor(BGS_TYPE):
21
+ if BGS_TYPE == "GMG":
22
+ return cv2.bgsegm.createBackgroundSubtractorGMG()
23
+ if BGS_TYPE == "MOG":
24
+ return cv2.bgsegm.createBackgroundSubtractorMOG()
25
+ if BGS_TYPE == "MOG2":
26
+ return cv2.createBackgroundSubtractorMOG2()
27
+ if BGS_TYPE == "KNN":
28
+ return cv2.createBackgroundSubtractorKNN()
29
+ if BGS_TYPE == "CNT":
30
+ return cv2.bgsegm.createBackgroundSubtractorCNT()
31
+ print("Invalid detector")
32
+ sys.exit(1)
33
+
34
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
35
+
36
+ bg_subtractor = []
37
+ for i, a in enumerate(BGS_TYPES):
38
+ #print(i, a)
39
+ bg_subtractor.append(getBGSubtractor(a))
40
+
41
+ #print(bg_subtractor)
42
+
43
+
44
+ def main():
45
+ framecount = 0
46
+ while cap.isOpened():
47
+ ok, frame = cap.read()
48
+ #print(ok)
49
+
50
+ if not ok:
51
+ print('Finished processing the video')
52
+ break
53
+
54
+ framecount += 1
55
+ frame = cv2.resize(frame, (0, 0), fx=0.20, fy=0.20)
56
+
57
+ gmg = bg_subtractor[0].apply(frame)
58
+ mog = bg_subtractor[1].apply(frame)
59
+ mog2 = bg_subtractor[2].apply(frame)
60
+ knn = bg_subtractor[3].apply(frame)
61
+ cnt = bg_subtractor[4].apply(frame)
62
+
63
+ gmg_count = np.count_nonzero(gmg)
64
+ mog_count = np.count_nonzero(mog)
65
+ mog2_count = np.count_nonzero(mog2)
66
+ knn_count = np.count_nonzero(knn)
67
+ cnt_count = np.count_nonzero(cnt)
68
+
69
+ writer.writerow({'Frame': 'MOG', 'Pixel Count': mog_count})
70
+ writer.writerow({'Frame': 'MOG2', 'Pixel Count': mog2_count})
71
+ writer.writerow({'Frame': 'GMG', 'Pixel Count': gmg_count})
72
+ writer.writerow({'Frame': 'KNN', 'Pixel Count': knn_count})
73
+ writer.writerow({'Frame': 'CNT', 'Pixel Count': cnt_count})
74
+
75
+ cv2.putText(mog, 'MOG', TITLE_TEXT_POSITION, FONT, TEXT_SIZE, TEXT_COLOR, 2, cv2.LINE_AA)
76
+ cv2.putText(mog2, 'MOG2', TITLE_TEXT_POSITION, FONT, TEXT_SIZE, TEXT_COLOR, 2, cv2.LINE_AA)
77
+ cv2.putText(gmg, 'GMG', TITLE_TEXT_POSITION, FONT, TEXT_SIZE, TEXT_COLOR, 2, cv2.LINE_AA)
78
+ cv2.putText(knn, 'KNN', TITLE_TEXT_POSITION, FONT, TEXT_SIZE, TEXT_COLOR, 2, cv2.LINE_AA)
79
+ cv2.putText(cnt, 'CNT', TITLE_TEXT_POSITION, FONT, TEXT_SIZE, TEXT_COLOR, 2, cv2.LINE_AA)
80
+
81
+ cv2.imshow('Original', frame)
82
+ cv2.imshow('MOG', mog)
83
+ cv2.imshow('MOG2', mog2)
84
+ cv2.imshow('KNN', knn)
85
+ cv2.imshow('CNT', cnt)
86
+
87
+ cv2.moveWindow('Original', 0, 0)
88
+ cv2.moveWindow('MOG', 0, 250)
89
+ cv2.moveWindow('KNN', 0, 500)
90
+ cv2.moveWindow('GMG', 719, 0)
91
+ cv2.moveWindow('MOG2', 719, 250)
92
+ cv2.moveWindow('CNT', 719, 500)
93
+
94
+ k = cv2.waitKey(0) & 0xff
95
+ if k == 27: # ESC
96
+ break
97
+
98
+
99
+ main()
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
quality_comparison_results.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import matplotlib.pyplot as plt
3
+
4
+ evaluation = pd.read_csv('report.csv')
5
+ #print(evaluation)
6
+
7
+ evaluation_results = evaluation.groupby(['Frame']).sum()
8
+ print(evaluation_results)
9
+
10
+ evaluation_results.plot.bar()
11
+ plt.show()
report.csv ADDED
@@ -0,0 +1,1707 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Frame,Pixel Count
2
+ MOG,0
3
+ MOG2,82944
4
+ GMG,0
5
+ KNN,82944
6
+ CNT,82944
7
+
8
+ MOG,1106
9
+ MOG2,5550
10
+ GMG,0
11
+ KNN,82944
12
+ CNT,82944
13
+ MOG,1507
14
+ MOG2,2984
15
+ GMG,0
16
+ KNN,82928
17
+ CNT,82944
18
+ MOG,1036
19
+ MOG2,2826
20
+ GMG,0
21
+ KNN,82869
22
+ CNT,82944
23
+ MOG,1131
24
+ MOG2,2634
25
+ GMG,0
26
+ KNN,7587
27
+ CNT,82944
28
+ MOG,1538
29
+ MOG2,2814
30
+ GMG,0
31
+ KNN,6100
32
+ CNT,82944
33
+ MOG,1617
34
+ MOG2,2536
35
+ GMG,0
36
+ KNN,5688
37
+ CNT,82944
38
+ MOG,2086
39
+ MOG2,4659
40
+ GMG,0
41
+ KNN,6683
42
+ CNT,82944
43
+ MOG,2025
44
+ MOG2,2656
45
+ GMG,0
46
+ KNN,6585
47
+ CNT,82944
48
+ MOG,2260
49
+ MOG2,2671
50
+ GMG,0
51
+ KNN,6328
52
+ CNT,82944
53
+ MOG,2255
54
+ MOG2,3642
55
+ GMG,0
56
+ KNN,7224
57
+ CNT,82944
58
+ MOG,1803
59
+ MOG2,3770
60
+ GMG,0
61
+ KNN,7548
62
+ CNT,82944
63
+ MOG,2563
64
+ MOG2,5775
65
+ GMG,0
66
+ KNN,9009
67
+ CNT,82944
68
+ MOG,2522
69
+ MOG2,4708
70
+ GMG,0
71
+ KNN,8903
72
+ CNT,82944
73
+ MOG,2547
74
+ MOG2,3572
75
+ GMG,0
76
+ KNN,9185
77
+ CNT,82944
78
+ MOG,2841
79
+ MOG2,4361
80
+ GMG,0
81
+ KNN,9203
82
+ CNT,11476
83
+ MOG,2797
84
+ MOG2,4978
85
+ GMG,0
86
+ KNN,9191
87
+ CNT,11835
88
+ MOG,3193
89
+ MOG2,6423
90
+ GMG,0
91
+ KNN,9457
92
+ CNT,12127
93
+ MOG,3332
94
+ MOG2,6143
95
+ GMG,0
96
+ KNN,9275
97
+ CNT,12165
98
+ MOG,3062
99
+ MOG2,5828
100
+ GMG,0
101
+ KNN,8928
102
+ CNT,12143
103
+ MOG,2982
104
+ MOG2,6405
105
+ GMG,0
106
+ KNN,8500
107
+ CNT,12219
108
+ MOG,3146
109
+ MOG2,5641
110
+ GMG,0
111
+ KNN,9061
112
+ CNT,12183
113
+ MOG,3436
114
+ MOG2,6863
115
+ GMG,0
116
+ KNN,9581
117
+ CNT,12493
118
+ MOG,3404
119
+ MOG2,6557
120
+ GMG,0
121
+ KNN,9542
122
+ CNT,12351
123
+ MOG,3506
124
+ MOG2,6465
125
+ GMG,0
126
+ KNN,9578
127
+ CNT,12339
128
+ MOG,3466
129
+ MOG2,7325
130
+ GMG,0
131
+ KNN,9529
132
+ CNT,12305
133
+ MOG,3155
134
+ MOG2,6867
135
+ GMG,0
136
+ KNN,9482
137
+ CNT,12288
138
+ MOG,3422
139
+ MOG2,7185
140
+ GMG,0
141
+ KNN,9765
142
+ CNT,12476
143
+ MOG,3494
144
+ MOG2,6794
145
+ GMG,0
146
+ KNN,9569
147
+ CNT,12159
148
+ MOG,3433
149
+ MOG2,6516
150
+ GMG,0
151
+ KNN,9349
152
+ CNT,12020
153
+ MOG,3412
154
+ MOG2,6533
155
+ GMG,0
156
+ KNN,9200
157
+ CNT,11881
158
+ MOG,3496
159
+ MOG2,5648
160
+ GMG,0
161
+ KNN,9423
162
+ CNT,11678
163
+ MOG,3684
164
+ MOG2,6334
165
+ GMG,0
166
+ KNN,9620
167
+ CNT,11741
168
+ MOG,3505
169
+ MOG2,5913
170
+ GMG,0
171
+ KNN,9393
172
+ CNT,11400
173
+ MOG,3624
174
+ MOG2,6065
175
+ GMG,0
176
+ KNN,9315
177
+ CNT,11332
178
+ MOG,3655
179
+ MOG2,6356
180
+ GMG,0
181
+ KNN,9154
182
+ CNT,11298
183
+ MOG,3634
184
+ MOG2,6153
185
+ GMG,0
186
+ KNN,8984
187
+ CNT,11207
188
+ MOG,3896
189
+ MOG2,6744
190
+ GMG,0
191
+ KNN,9079
192
+ CNT,11258
193
+ MOG,3833
194
+ MOG2,6697
195
+ GMG,0
196
+ KNN,8963
197
+ CNT,10997
198
+ MOG,3807
199
+ MOG2,6509
200
+ GMG,0
201
+ KNN,8849
202
+ CNT,10932
203
+ MOG,3895
204
+ MOG2,6628
205
+ GMG,0
206
+ KNN,9120
207
+ CNT,10901
208
+ MOG,3754
209
+ MOG2,6495
210
+ GMG,0
211
+ KNN,9058
212
+ CNT,10699
213
+ MOG,3923
214
+ MOG2,7065
215
+ GMG,0
216
+ KNN,9203
217
+ CNT,10732
218
+ MOG,3970
219
+ MOG2,7028
220
+ GMG,0
221
+ KNN,9156
222
+ CNT,10495
223
+ MOG,3988
224
+ MOG2,7177
225
+ GMG,0
226
+ KNN,9172
227
+ CNT,10416
228
+ MOG,4017
229
+ MOG2,7259
230
+ GMG,0
231
+ KNN,9185
232
+ CNT,10385
233
+ MOG,4036
234
+ MOG2,7306
235
+ GMG,0
236
+ KNN,9171
237
+ CNT,10328
238
+ MOG,4210
239
+ MOG2,7862
240
+ GMG,0
241
+ KNN,9315
242
+ CNT,10326
243
+ MOG,4209
244
+ MOG2,7954
245
+ GMG,0
246
+ KNN,9308
247
+ CNT,10221
248
+ MOG,4203
249
+ MOG2,7968
250
+ GMG,0
251
+ KNN,9310
252
+ CNT,10159
253
+ MOG,4286
254
+ MOG2,8613
255
+ GMG,0
256
+ KNN,9439
257
+ CNT,10209
258
+ MOG,4256
259
+ MOG2,8520
260
+ GMG,0
261
+ KNN,9656
262
+ CNT,10158
263
+ MOG,4409
264
+ MOG2,9092
265
+ GMG,0
266
+ KNN,9940
267
+ CNT,10228
268
+ MOG,4431
269
+ MOG2,9139
270
+ GMG,0
271
+ KNN,10043
272
+ CNT,10130
273
+ MOG,4449
274
+ MOG2,9281
275
+ GMG,0
276
+ KNN,10137
277
+ CNT,10050
278
+ MOG,4429
279
+ MOG2,9425
280
+ GMG,0
281
+ KNN,10151
282
+ CNT,10023
283
+ MOG,4502
284
+ MOG2,9545
285
+ GMG,0
286
+ KNN,10277
287
+ CNT,9990
288
+ MOG,4718
289
+ MOG2,10163
290
+ GMG,0
291
+ KNN,10547
292
+ CNT,10097
293
+ MOG,4709
294
+ MOG2,10031
295
+ GMG,0
296
+ KNN,10506
297
+ CNT,10067
298
+ MOG,4803
299
+ MOG2,10160
300
+ GMG,0
301
+ KNN,10481
302
+ CNT,10090
303
+ MOG,4790
304
+ MOG2,10168
305
+ GMG,0
306
+ KNN,10423
307
+ CNT,10063
308
+ MOG,4768
309
+ MOG2,10106
310
+ GMG,0
311
+ KNN,10337
312
+ CNT,10007
313
+ MOG,4905
314
+ MOG2,10435
315
+ GMG,0
316
+ KNN,10567
317
+ CNT,10037
318
+ MOG,4839
319
+ MOG2,10347
320
+ GMG,0
321
+ KNN,10534
322
+ CNT,9990
323
+ MOG,4823
324
+ MOG2,10287
325
+ GMG,0
326
+ KNN,10638
327
+ CNT,9965
328
+ MOG,4828
329
+ MOG2,10299
330
+ GMG,0
331
+ KNN,10560
332
+ CNT,9940
333
+ MOG,4794
334
+ MOG2,10273
335
+ GMG,0
336
+ KNN,10491
337
+ CNT,9845
338
+ MOG,4847
339
+ MOG2,10745
340
+ GMG,0
341
+ KNN,10502
342
+ CNT,9865
343
+ MOG,4843
344
+ MOG2,10819
345
+ GMG,0
346
+ KNN,10526
347
+ CNT,9798
348
+ MOG,4865
349
+ MOG2,10796
350
+ GMG,0
351
+ KNN,10561
352
+ CNT,9810
353
+ MOG,4858
354
+ MOG2,10667
355
+ GMG,0
356
+ KNN,10600
357
+ CNT,9839
358
+ MOG,4837
359
+ MOG2,10723
360
+ GMG,0
361
+ KNN,10625
362
+ CNT,9885
363
+ MOG,5071
364
+ MOG2,11237
365
+ GMG,0
366
+ KNN,11107
367
+ CNT,10097
368
+ MOG,5043
369
+ MOG2,11313
370
+ GMG,0
371
+ KNN,11110
372
+ CNT,10139
373
+ MOG,5116
374
+ MOG2,11269
375
+ GMG,0
376
+ KNN,11152
377
+ CNT,10195
378
+ MOG,5138
379
+ MOG2,11805
380
+ GMG,0
381
+ KNN,11315
382
+ CNT,10235
383
+ MOG,5169
384
+ MOG2,11695
385
+ GMG,0
386
+ KNN,11301
387
+ CNT,10211
388
+ MOG,5284
389
+ MOG2,11772
390
+ GMG,0
391
+ KNN,11471
392
+ CNT,10204
393
+ MOG,5297
394
+ MOG2,11747
395
+ GMG,0
396
+ KNN,11410
397
+ CNT,10124
398
+ MOG,5298
399
+ MOG2,11661
400
+ GMG,0
401
+ KNN,11385
402
+ CNT,10150
403
+ MOG,5350
404
+ MOG2,11590
405
+ GMG,0
406
+ KNN,11321
407
+ CNT,10168
408
+ MOG,5405
409
+ MOG2,11582
410
+ GMG,0
411
+ KNN,11423
412
+ CNT,10154
413
+ MOG,5602
414
+ MOG2,11800
415
+ GMG,0
416
+ KNN,11530
417
+ CNT,10279
418
+ MOG,5625
419
+ MOG2,11615
420
+ GMG,0
421
+ KNN,11580
422
+ CNT,10261
423
+ MOG,5587
424
+ MOG2,11605
425
+ GMG,0
426
+ KNN,11610
427
+ CNT,10243
428
+ MOG,5588
429
+ MOG2,11701
430
+ GMG,0
431
+ KNN,11675
432
+ CNT,10234
433
+ MOG,5595
434
+ MOG2,11708
435
+ GMG,0
436
+ KNN,11654
437
+ CNT,10179
438
+ MOG,5684
439
+ MOG2,11974
440
+ GMG,0
441
+ KNN,11801
442
+ CNT,10267
443
+ MOG,5611
444
+ MOG2,11918
445
+ GMG,0
446
+ KNN,11805
447
+ CNT,10261
448
+ MOG,5578
449
+ MOG2,11738
450
+ GMG,0
451
+ KNN,11757
452
+ CNT,10184
453
+ MOG,5577
454
+ MOG2,11654
455
+ GMG,0
456
+ KNN,11718
457
+ CNT,10097
458
+ MOG,5577
459
+ MOG2,11577
460
+ GMG,0
461
+ KNN,11766
462
+ CNT,10048
463
+ MOG,5564
464
+ MOG2,11650
465
+ GMG,0
466
+ KNN,11745
467
+ CNT,9979
468
+ MOG,5505
469
+ MOG2,11525
470
+ GMG,0
471
+ KNN,11664
472
+ CNT,9962
473
+ MOG,5485
474
+ MOG2,11413
475
+ GMG,0
476
+ KNN,11587
477
+ CNT,9936
478
+ MOG,5459
479
+ MOG2,11322
480
+ GMG,0
481
+ KNN,11501
482
+ CNT,9911
483
+ MOG,5452
484
+ MOG2,11245
485
+ GMG,0
486
+ KNN,11445
487
+ CNT,9964
488
+ MOG,5616
489
+ MOG2,11413
490
+ GMG,0
491
+ KNN,11382
492
+ CNT,10063
493
+ MOG,5627
494
+ MOG2,11288
495
+ GMG,0
496
+ KNN,11339
497
+ CNT,9991
498
+ MOG,5633
499
+ MOG2,11189
500
+ GMG,0
501
+ KNN,11261
502
+ CNT,10017
503
+ MOG,5659
504
+ MOG2,11464
505
+ GMG,0
506
+ KNN,11293
507
+ CNT,10052
508
+ MOG,5581
509
+ MOG2,11375
510
+ GMG,0
511
+ KNN,11251
512
+ CNT,10002
513
+ MOG,5594
514
+ MOG2,11947
515
+ GMG,0
516
+ KNN,11552
517
+ CNT,9932
518
+ MOG,5622
519
+ MOG2,11776
520
+ GMG,0
521
+ KNN,11451
522
+ CNT,9897
523
+ MOG,5629
524
+ MOG2,11666
525
+ GMG,0
526
+ KNN,11317
527
+ CNT,9832
528
+ MOG,5614
529
+ MOG2,11602
530
+ GMG,0
531
+ KNN,11172
532
+ CNT,9745
533
+ MOG,5614
534
+ MOG2,11570
535
+ GMG,0
536
+ KNN,11004
537
+ CNT,9703
538
+ MOG,5643
539
+ MOG2,11355
540
+ GMG,0
541
+ KNN,10818
542
+ CNT,9563
543
+ MOG,5703
544
+ MOG2,11405
545
+ GMG,0
546
+ KNN,10782
547
+ CNT,9593
548
+ MOG,5765
549
+ MOG2,11524
550
+ GMG,0
551
+ KNN,10768
552
+ CNT,9615
553
+ MOG,5770
554
+ MOG2,11512
555
+ GMG,0
556
+ KNN,10745
557
+ CNT,9589
558
+ MOG,5754
559
+ MOG2,11590
560
+ GMG,0
561
+ KNN,10723
562
+ CNT,9565
563
+ MOG,5827
564
+ MOG2,11551
565
+ GMG,0
566
+ KNN,10647
567
+ CNT,9440
568
+ MOG,5803
569
+ MOG2,11674
570
+ GMG,0
571
+ KNN,10640
572
+ CNT,9392
573
+ MOG,5786
574
+ MOG2,11730
575
+ GMG,0
576
+ KNN,10707
577
+ CNT,9323
578
+ MOG,5678
579
+ MOG2,11615
580
+ GMG,0
581
+ KNN,10650
582
+ CNT,9148
583
+ MOG,5554
584
+ MOG2,11456
585
+ GMG,0
586
+ KNN,10534
587
+ CNT,9000
588
+ MOG,5502
589
+ MOG2,11713
590
+ GMG,0
591
+ KNN,10557
592
+ CNT,8903
593
+ MOG,5429
594
+ MOG2,11477
595
+ GMG,0
596
+ KNN,10395
597
+ CNT,8821
598
+ MOG,5318
599
+ MOG2,11372
600
+ GMG,0
601
+ KNN,10350
602
+ CNT,8743
603
+ MOG,5234
604
+ MOG2,11300
605
+ GMG,82944
606
+ KNN,10262
607
+ CNT,8700
608
+ MOG,5064
609
+ MOG2,10952
610
+ GMG,2032
611
+ KNN,10048
612
+ CNT,8478
613
+ MOG,5056
614
+ MOG2,11285
615
+ GMG,6140
616
+ KNN,10111
617
+ CNT,8402
618
+ MOG,5008
619
+ MOG2,10997
620
+ GMG,8411
621
+ KNN,10014
622
+ CNT,8312
623
+ MOG,4999
624
+ MOG2,10943
625
+ GMG,7571
626
+ KNN,9940
627
+ CNT,8266
628
+ MOG,4956
629
+ MOG2,11127
630
+ GMG,8955
631
+ KNN,10039
632
+ CNT,8255
633
+ MOG,4904
634
+ MOG2,11054
635
+ GMG,8722
636
+ KNN,9984
637
+ CNT,8215
638
+ MOG,4827
639
+ MOG2,10830
640
+ GMG,10030
641
+ KNN,9946
642
+ CNT,8011
643
+ MOG,4739
644
+ MOG2,10658
645
+ GMG,6216
646
+ KNN,9940
647
+ CNT,7935
648
+ MOG,4687
649
+ MOG2,10545
650
+ GMG,5404
651
+ KNN,9887
652
+ CNT,7863
653
+ MOG,4612
654
+ MOG2,10388
655
+ GMG,3767
656
+ KNN,9793
657
+ CNT,7826
658
+ MOG,4540
659
+ MOG2,10139
660
+ GMG,3229
661
+ KNN,9733
662
+ CNT,7755
663
+ MOG,4511
664
+ MOG2,10094
665
+ GMG,4513
666
+ KNN,9621
667
+ CNT,7742
668
+ MOG,4449
669
+ MOG2,9923
670
+ GMG,3755
671
+ KNN,9505
672
+ CNT,7652
673
+ MOG,4390
674
+ MOG2,9814
675
+ GMG,3370
676
+ KNN,9415
677
+ CNT,7588
678
+ MOG,4358
679
+ MOG2,9663
680
+ GMG,2174
681
+ KNN,9322
682
+ CNT,7552
683
+ MOG,4327
684
+ MOG2,9548
685
+ GMG,2193
686
+ KNN,9247
687
+ CNT,7524
688
+ MOG,4287
689
+ MOG2,9517
690
+ GMG,3546
691
+ KNN,9079
692
+ CNT,7424
693
+ MOG,4267
694
+ MOG2,9460
695
+ GMG,3296
696
+ KNN,9043
697
+ CNT,7374
698
+ MOG,4255
699
+ MOG2,9475
700
+ GMG,3413
701
+ KNN,9114
702
+ CNT,7391
703
+ MOG,4215
704
+ MOG2,9448
705
+ GMG,2532
706
+ KNN,9065
707
+ CNT,7388
708
+ MOG,4165
709
+ MOG2,9335
710
+ GMG,2359
711
+ KNN,9023
712
+ CNT,7375
713
+ MOG,4088
714
+ MOG2,9285
715
+ GMG,3764
716
+ KNN,9076
717
+ CNT,7312
718
+ MOG,4001
719
+ MOG2,9190
720
+ GMG,3169
721
+ KNN,9099
722
+ CNT,7292
723
+ MOG,3995
724
+ MOG2,9072
725
+ GMG,2505
726
+ KNN,9028
727
+ CNT,7288
728
+ MOG,3982
729
+ MOG2,9046
730
+ GMG,1609
731
+ KNN,9013
732
+ CNT,7257
733
+ MOG,3928
734
+ MOG2,9047
735
+ GMG,1986
736
+ KNN,9029
737
+ CNT,7285
738
+ MOG,3980
739
+ MOG2,9278
740
+ GMG,3046
741
+ KNN,9066
742
+ CNT,7283
743
+ MOG,3923
744
+ MOG2,9212
745
+ GMG,2564
746
+ KNN,9021
747
+ CNT,7242
748
+ MOG,3902
749
+ MOG2,9164
750
+ GMG,1973
751
+ KNN,9021
752
+ CNT,7225
753
+ MOG,3896
754
+ MOG2,9435
755
+ GMG,2455
756
+ KNN,9078
757
+ CNT,7231
758
+ MOG,3827
759
+ MOG2,9351
760
+ GMG,1973
761
+ KNN,9066
762
+ CNT,7172
763
+ MOG,3923
764
+ MOG2,9703
765
+ GMG,3322
766
+ KNN,9236
767
+ CNT,7225
768
+ MOG,3884
769
+ MOG2,9701
770
+ GMG,2643
771
+ KNN,9256
772
+ CNT,7233
773
+ MOG,3854
774
+ MOG2,9721
775
+ GMG,2535
776
+ KNN,9279
777
+ CNT,7260
778
+ MOG,3810
779
+ MOG2,9711
780
+ GMG,1818
781
+ KNN,9286
782
+ CNT,7279
783
+ MOG,3840
784
+ MOG2,9688
785
+ GMG,1730
786
+ KNN,9331
787
+ CNT,7348
788
+ MOG,3830
789
+ MOG2,9823
790
+ GMG,2431
791
+ KNN,9355
792
+ CNT,7332
793
+ MOG,3872
794
+ MOG2,9864
795
+ GMG,2307
796
+ KNN,9321
797
+ CNT,7348
798
+ MOG,3907
799
+ MOG2,9836
800
+ GMG,2040
801
+ KNN,9347
802
+ CNT,7416
803
+ MOG,3941
804
+ MOG2,9696
805
+ GMG,1241
806
+ KNN,9299
807
+ CNT,7392
808
+ MOG,3930
809
+ MOG2,9577
810
+ GMG,1152
811
+ KNN,9213
812
+ CNT,7450
813
+ MOG,4097
814
+ MOG2,9660
815
+ GMG,2081
816
+ KNN,9221
817
+ CNT,7541
818
+ MOG,4119
819
+ MOG2,9630
820
+ GMG,2032
821
+ KNN,9233
822
+ CNT,7627
823
+ MOG,4161
824
+ MOG2,9613
825
+ GMG,2050
826
+ KNN,9194
827
+ CNT,7647
828
+ MOG,4156
829
+ MOG2,9583
830
+ GMG,1703
831
+ KNN,9264
832
+ CNT,7705
833
+ MOG,4205
834
+ MOG2,9595
835
+ GMG,1960
836
+ KNN,9389
837
+ CNT,7760
838
+ MOG,4247
839
+ MOG2,9709
840
+ GMG,2598
841
+ KNN,9463
842
+ CNT,7800
843
+ MOG,4223
844
+ MOG2,9734
845
+ GMG,2552
846
+ KNN,9516
847
+ CNT,7841
848
+ MOG,4183
849
+ MOG2,9677
850
+ GMG,2154
851
+ KNN,9561
852
+ CNT,7825
853
+ MOG,4186
854
+ MOG2,9612
855
+ GMG,1541
856
+ KNN,9585
857
+ CNT,7858
858
+ MOG,4154
859
+ MOG2,9602
860
+ GMG,1457
861
+ KNN,9521
862
+ CNT,7843
863
+ MOG,4191
864
+ MOG2,9718
865
+ GMG,2223
866
+ KNN,9509
867
+ CNT,7837
868
+ MOG,4206
869
+ MOG2,9663
870
+ GMG,2122
871
+ KNN,9402
872
+ CNT,7763
873
+ MOG,4196
874
+ MOG2,9623
875
+ GMG,1815
876
+ KNN,9419
877
+ CNT,7760
878
+ MOG,4205
879
+ MOG2,9905
880
+ GMG,1913
881
+ KNN,9494
882
+ CNT,7816
883
+ MOG,4200
884
+ MOG2,9804
885
+ GMG,1714
886
+ KNN,9454
887
+ CNT,7782
888
+ MOG,4267
889
+ MOG2,9832
890
+ GMG,2563
891
+ KNN,9405
892
+ CNT,7733
893
+ MOG,4272
894
+ MOG2,9720
895
+ GMG,2032
896
+ KNN,9438
897
+ CNT,7721
898
+ MOG,4292
899
+ MOG2,9764
900
+ GMG,2042
901
+ KNN,9474
902
+ CNT,7788
903
+ MOG,4317
904
+ MOG2,9737
905
+ GMG,1443
906
+ KNN,9474
907
+ CNT,7833
908
+ MOG,4326
909
+ MOG2,9750
910
+ GMG,1365
911
+ KNN,9503
912
+ CNT,7815
913
+ MOG,4406
914
+ MOG2,9697
915
+ GMG,2263
916
+ KNN,9508
917
+ CNT,7901
918
+ MOG,4404
919
+ MOG2,9693
920
+ GMG,2191
921
+ KNN,9546
922
+ CNT,7902
923
+ MOG,4430
924
+ MOG2,9656
925
+ GMG,1938
926
+ KNN,9507
927
+ CNT,7926
928
+ MOG,4459
929
+ MOG2,9655
930
+ GMG,1473
931
+ KNN,9468
932
+ CNT,7938
933
+ MOG,4522
934
+ MOG2,9585
935
+ GMG,1456
936
+ KNN,9426
937
+ CNT,7956
938
+ MOG,4662
939
+ MOG2,9700
940
+ GMG,2786
941
+ KNN,9527
942
+ CNT,8052
943
+ MOG,4688
944
+ MOG2,9670
945
+ GMG,2414
946
+ KNN,9486
947
+ CNT,8031
948
+ MOG,4683
949
+ MOG2,9648
950
+ GMG,1992
951
+ KNN,9488
952
+ CNT,7999
953
+ MOG,4680
954
+ MOG2,9514
955
+ GMG,1561
956
+ KNN,9394
957
+ CNT,8022
958
+ MOG,4683
959
+ MOG2,9532
960
+ GMG,1518
961
+ KNN,9400
962
+ CNT,8016
963
+ MOG,4762
964
+ MOG2,9606
965
+ GMG,2356
966
+ KNN,9480
967
+ CNT,8034
968
+ MOG,4768
969
+ MOG2,9622
970
+ GMG,2488
971
+ KNN,9496
972
+ CNT,8029
973
+ MOG,4754
974
+ MOG2,9629
975
+ GMG,2258
976
+ KNN,9441
977
+ CNT,8016
978
+ MOG,4756
979
+ MOG2,9595
980
+ GMG,2183
981
+ KNN,9387
982
+ CNT,8023
983
+ MOG,4755
984
+ MOG2,9579
985
+ GMG,1867
986
+ KNN,9426
987
+ CNT,7996
988
+ MOG,4746
989
+ MOG2,9686
990
+ GMG,2460
991
+ KNN,9451
992
+ CNT,7998
993
+ MOG,4694
994
+ MOG2,9632
995
+ GMG,2263
996
+ KNN,9460
997
+ CNT,7968
998
+ MOG,4646
999
+ MOG2,9609
1000
+ GMG,1989
1001
+ KNN,9394
1002
+ CNT,7926
1003
+ MOG,4669
1004
+ MOG2,9839
1005
+ GMG,2018
1006
+ KNN,9572
1007
+ CNT,7999
1008
+ MOG,4640
1009
+ MOG2,9772
1010
+ GMG,1842
1011
+ KNN,9474
1012
+ CNT,7980
1013
+ MOG,4695
1014
+ MOG2,9750
1015
+ GMG,2337
1016
+ KNN,9477
1017
+ CNT,7936
1018
+ MOG,4658
1019
+ MOG2,9608
1020
+ GMG,2003
1021
+ KNN,9422
1022
+ CNT,7909
1023
+ MOG,4714
1024
+ MOG2,9567
1025
+ GMG,1961
1026
+ KNN,9357
1027
+ CNT,7876
1028
+ MOG,4714
1029
+ MOG2,9442
1030
+ GMG,1650
1031
+ KNN,9342
1032
+ CNT,7852
1033
+ MOG,4734
1034
+ MOG2,9435
1035
+ GMG,1823
1036
+ KNN,9360
1037
+ CNT,7891
1038
+ MOG,4716
1039
+ MOG2,9548
1040
+ GMG,2692
1041
+ KNN,9424
1042
+ CNT,7840
1043
+ MOG,4689
1044
+ MOG2,9516
1045
+ GMG,2521
1046
+ KNN,9441
1047
+ CNT,7905
1048
+ MOG,4690
1049
+ MOG2,9541
1050
+ GMG,2441
1051
+ KNN,9500
1052
+ CNT,7979
1053
+ MOG,4675
1054
+ MOG2,9553
1055
+ GMG,2008
1056
+ KNN,9589
1057
+ CNT,8043
1058
+ MOG,4669
1059
+ MOG2,9550
1060
+ GMG,1856
1061
+ KNN,9579
1062
+ CNT,8058
1063
+ MOG,4644
1064
+ MOG2,9683
1065
+ GMG,2488
1066
+ KNN,9680
1067
+ CNT,8006
1068
+ MOG,4635
1069
+ MOG2,9624
1070
+ GMG,2384
1071
+ KNN,9633
1072
+ CNT,7991
1073
+ MOG,4626
1074
+ MOG2,9541
1075
+ GMG,2040
1076
+ KNN,9517
1077
+ CNT,7967
1078
+ MOG,4599
1079
+ MOG2,9505
1080
+ GMG,1617
1081
+ KNN,9454
1082
+ CNT,7893
1083
+ MOG,4558
1084
+ MOG2,9480
1085
+ GMG,1647
1086
+ KNN,9371
1087
+ CNT,7821
1088
+ MOG,4513
1089
+ MOG2,9471
1090
+ GMG,2568
1091
+ KNN,9353
1092
+ CNT,7761
1093
+ MOG,4460
1094
+ MOG2,9317
1095
+ GMG,2408
1096
+ KNN,9208
1097
+ CNT,7723
1098
+ MOG,4407
1099
+ MOG2,9305
1100
+ GMG,2130
1101
+ KNN,9161
1102
+ CNT,7650
1103
+ MOG,4387
1104
+ MOG2,9227
1105
+ GMG,1700
1106
+ KNN,9184
1107
+ CNT,7661
1108
+ MOG,4370
1109
+ MOG2,9199
1110
+ GMG,1752
1111
+ KNN,9123
1112
+ CNT,7677
1113
+ MOG,4325
1114
+ MOG2,9311
1115
+ GMG,2311
1116
+ KNN,9190
1117
+ CNT,7654
1118
+ MOG,4291
1119
+ MOG2,9277
1120
+ GMG,2064
1121
+ KNN,9217
1122
+ CNT,7648
1123
+ MOG,4233
1124
+ MOG2,9233
1125
+ GMG,1674
1126
+ KNN,9172
1127
+ CNT,7592
1128
+ MOG,4201
1129
+ MOG2,9444
1130
+ GMG,1617
1131
+ KNN,9237
1132
+ CNT,7608
1133
+ MOG,4183
1134
+ MOG2,9361
1135
+ GMG,1361
1136
+ KNN,9181
1137
+ CNT,7536
1138
+ MOG,4168
1139
+ MOG2,9306
1140
+ GMG,2061
1141
+ KNN,9131
1142
+ CNT,7456
1143
+ MOG,4171
1144
+ MOG2,9332
1145
+ GMG,1857
1146
+ KNN,9099
1147
+ CNT,7448
1148
+ MOG,4209
1149
+ MOG2,9307
1150
+ GMG,1913
1151
+ KNN,9085
1152
+ CNT,7512
1153
+ MOG,4151
1154
+ MOG2,9303
1155
+ GMG,1630
1156
+ KNN,9042
1157
+ CNT,7556
1158
+ MOG,4105
1159
+ MOG2,9300
1160
+ GMG,1685
1161
+ KNN,9012
1162
+ CNT,7550
1163
+ MOG,4056
1164
+ MOG2,9222
1165
+ GMG,1807
1166
+ KNN,8924
1167
+ CNT,7443
1168
+ MOG,3991
1169
+ MOG2,9349
1170
+ GMG,2538
1171
+ KNN,8822
1172
+ CNT,7394
1173
+ MOG,3917
1174
+ MOG2,9355
1175
+ GMG,2288
1176
+ KNN,8793
1177
+ CNT,7361
1178
+ MOG,3911
1179
+ MOG2,9365
1180
+ GMG,1860
1181
+ KNN,8792
1182
+ CNT,7355
1183
+ MOG,3931
1184
+ MOG2,9337
1185
+ GMG,1342
1186
+ KNN,8808
1187
+ CNT,7346
1188
+ MOG,3889
1189
+ MOG2,9352
1190
+ GMG,1285
1191
+ KNN,8776
1192
+ CNT,7393
1193
+ MOG,3901
1194
+ MOG2,9344
1195
+ GMG,2040
1196
+ KNN,8742
1197
+ CNT,7338
1198
+ MOG,3865
1199
+ MOG2,9360
1200
+ GMG,1980
1201
+ KNN,8763
1202
+ CNT,7322
1203
+ MOG,3812
1204
+ MOG2,9257
1205
+ GMG,1842
1206
+ KNN,8755
1207
+ CNT,7304
1208
+ MOG,3829
1209
+ MOG2,9280
1210
+ GMG,1432
1211
+ KNN,8769
1212
+ CNT,7284
1213
+ MOG,3837
1214
+ MOG2,9225
1215
+ GMG,1457
1216
+ KNN,8730
1217
+ CNT,7335
1218
+ MOG,3808
1219
+ MOG2,9202
1220
+ GMG,2240
1221
+ KNN,8685
1222
+ CNT,7302
1223
+ MOG,3824
1224
+ MOG2,9149
1225
+ GMG,2064
1226
+ KNN,8628
1227
+ CNT,7287
1228
+ MOG,3807
1229
+ MOG2,9174
1230
+ GMG,1861
1231
+ KNN,8573
1232
+ CNT,7283
1233
+ MOG,3785
1234
+ MOG2,9077
1235
+ GMG,1731
1236
+ KNN,8527
1237
+ CNT,7252
1238
+ MOG,3793
1239
+ MOG2,9029
1240
+ GMG,1527
1241
+ KNN,8535
1242
+ CNT,7242
1243
+ MOG,3811
1244
+ MOG2,9143
1245
+ GMG,2199
1246
+ KNN,8725
1247
+ CNT,7341
1248
+ MOG,3854
1249
+ MOG2,9112
1250
+ GMG,2214
1251
+ KNN,8801
1252
+ CNT,7339
1253
+ MOG,3870
1254
+ MOG2,9346
1255
+ GMG,2505
1256
+ KNN,8962
1257
+ CNT,7463
1258
+ MOG,3902
1259
+ MOG2,9351
1260
+ GMG,1864
1261
+ KNN,8990
1262
+ CNT,7499
1263
+ MOG,3913
1264
+ MOG2,9285
1265
+ GMG,1869
1266
+ KNN,9029
1267
+ CNT,7491
1268
+ MOG,4001
1269
+ MOG2,9303
1270
+ GMG,2612
1271
+ KNN,8992
1272
+ CNT,7552
1273
+ MOG,4031
1274
+ MOG2,9428
1275
+ GMG,2605
1276
+ KNN,9026
1277
+ CNT,7656
1278
+ MOG,4072
1279
+ MOG2,9327
1280
+ GMG,2201
1281
+ KNN,9000
1282
+ CNT,7673
1283
+ MOG,4119
1284
+ MOG2,9374
1285
+ GMG,2071
1286
+ KNN,8992
1287
+ CNT,7680
1288
+ MOG,4112
1289
+ MOG2,9404
1290
+ GMG,2162
1291
+ KNN,9009
1292
+ CNT,7740
1293
+ MOG,4183
1294
+ MOG2,9323
1295
+ GMG,2711
1296
+ KNN,8806
1297
+ CNT,7603
1298
+ MOG,4146
1299
+ MOG2,9263
1300
+ GMG,2490
1301
+ KNN,8792
1302
+ CNT,7585
1303
+ MOG,4141
1304
+ MOG2,9263
1305
+ GMG,2425
1306
+ KNN,8788
1307
+ CNT,7541
1308
+ MOG,4183
1309
+ MOG2,9367
1310
+ GMG,2168
1311
+ KNN,8811
1312
+ CNT,7584
1313
+ MOG,4198
1314
+ MOG2,9322
1315
+ GMG,2061
1316
+ KNN,8760
1317
+ CNT,7577
1318
+ MOG,4302
1319
+ MOG2,9401
1320
+ GMG,2924
1321
+ KNN,8755
1322
+ CNT,7563
1323
+ MOG,4288
1324
+ MOG2,9350
1325
+ GMG,2481
1326
+ KNN,8765
1327
+ CNT,7568
1328
+ MOG,4246
1329
+ MOG2,9248
1330
+ GMG,2296
1331
+ KNN,8707
1332
+ CNT,7533
1333
+ MOG,4244
1334
+ MOG2,9155
1335
+ GMG,1944
1336
+ KNN,8654
1337
+ CNT,7519
1338
+ MOG,4178
1339
+ MOG2,8924
1340
+ GMG,1897
1341
+ KNN,8525
1342
+ CNT,7437
1343
+ MOG,4208
1344
+ MOG2,8977
1345
+ GMG,2922
1346
+ KNN,8621
1347
+ CNT,7425
1348
+ MOG,4228
1349
+ MOG2,8906
1350
+ GMG,2850
1351
+ KNN,8598
1352
+ CNT,7425
1353
+ MOG,4194
1354
+ MOG2,8846
1355
+ GMG,2467
1356
+ KNN,8569
1357
+ CNT,7442
1358
+ MOG,4160
1359
+ MOG2,8669
1360
+ GMG,1978
1361
+ KNN,8473
1362
+ CNT,7407
1363
+ MOG,4139
1364
+ MOG2,8599
1365
+ GMG,1749
1366
+ KNN,8432
1367
+ CNT,7391
1368
+ MOG,4115
1369
+ MOG2,8580
1370
+ GMG,2471
1371
+ KNN,8425
1372
+ CNT,7379
1373
+ MOG,4069
1374
+ MOG2,8505
1375
+ GMG,2180
1376
+ KNN,8408
1377
+ CNT,7329
1378
+ MOG,4018
1379
+ MOG2,8740
1380
+ GMG,2502
1381
+ KNN,8542
1382
+ CNT,7313
1383
+ MOG,3951
1384
+ MOG2,8679
1385
+ GMG,1796
1386
+ KNN,8484
1387
+ CNT,7253
1388
+ MOG,3912
1389
+ MOG2,8648
1390
+ GMG,1779
1391
+ KNN,8461
1392
+ CNT,7192
1393
+ MOG,3936
1394
+ MOG2,8701
1395
+ GMG,2552
1396
+ KNN,8443
1397
+ CNT,7194
1398
+ MOG,3916
1399
+ MOG2,8672
1400
+ GMG,2331
1401
+ KNN,8393
1402
+ CNT,7209
1403
+ MOG,3903
1404
+ MOG2,8603
1405
+ GMG,2009
1406
+ KNN,8383
1407
+ CNT,7183
1408
+ MOG,3852
1409
+ MOG2,8647
1410
+ GMG,1701
1411
+ KNN,8386
1412
+ CNT,7225
1413
+ MOG,3874
1414
+ MOG2,8612
1415
+ GMG,1758
1416
+ KNN,8371
1417
+ CNT,7220
1418
+ MOG,3909
1419
+ MOG2,8580
1420
+ GMG,3367
1421
+ KNN,8253
1422
+ CNT,7208
1423
+ MOG,3898
1424
+ MOG2,8593
1425
+ GMG,3047
1426
+ KNN,8252
1427
+ CNT,7190
1428
+ MOG,3860
1429
+ MOG2,8491
1430
+ GMG,2470
1431
+ KNN,8166
1432
+ CNT,7122
1433
+ MOG,3866
1434
+ MOG2,8463
1435
+ GMG,1906
1436
+ KNN,8147
1437
+ CNT,7139
1438
+ MOG,3849
1439
+ MOG2,8425
1440
+ GMG,1862
1441
+ KNN,8074
1442
+ CNT,7097
1443
+ MOG,3885
1444
+ MOG2,8398
1445
+ GMG,2350
1446
+ KNN,8095
1447
+ CNT,7090
1448
+ MOG,3924
1449
+ MOG2,8387
1450
+ GMG,2076
1451
+ KNN,8129
1452
+ CNT,7114
1453
+ MOG,3956
1454
+ MOG2,8309
1455
+ GMG,1914
1456
+ KNN,8149
1457
+ CNT,7138
1458
+ MOG,3945
1459
+ MOG2,8355
1460
+ GMG,1572
1461
+ KNN,8179
1462
+ CNT,7192
1463
+ MOG,3918
1464
+ MOG2,8383
1465
+ GMG,1549
1466
+ KNN,8215
1467
+ CNT,7212
1468
+ MOG,3955
1469
+ MOG2,8482
1470
+ GMG,2358
1471
+ KNN,8296
1472
+ CNT,7239
1473
+ MOG,3959
1474
+ MOG2,8494
1475
+ GMG,2316
1476
+ KNN,8358
1477
+ CNT,7293
1478
+ MOG,4011
1479
+ MOG2,8478
1480
+ GMG,1947
1481
+ KNN,8343
1482
+ CNT,7325
1483
+ MOG,4013
1484
+ MOG2,8490
1485
+ GMG,1752
1486
+ KNN,8345
1487
+ CNT,7342
1488
+ MOG,4053
1489
+ MOG2,8473
1490
+ GMG,1669
1491
+ KNN,8319
1492
+ CNT,7362
1493
+ MOG,4080
1494
+ MOG2,8371
1495
+ GMG,2363
1496
+ KNN,8184
1497
+ CNT,7211
1498
+ MOG,4067
1499
+ MOG2,8345
1500
+ GMG,2443
1501
+ KNN,8131
1502
+ CNT,7170
1503
+ MOG,4139
1504
+ MOG2,8498
1505
+ GMG,2867
1506
+ KNN,8353
1507
+ CNT,7284
1508
+ MOG,4107
1509
+ MOG2,8408
1510
+ GMG,2326
1511
+ KNN,8286
1512
+ CNT,7176
1513
+ MOG,4125
1514
+ MOG2,8308
1515
+ GMG,2212
1516
+ KNN,8203
1517
+ CNT,7174
1518
+ MOG,4219
1519
+ MOG2,8299
1520
+ GMG,2694
1521
+ KNN,8151
1522
+ CNT,7118
1523
+ MOG,4246
1524
+ MOG2,8324
1525
+ GMG,2367
1526
+ KNN,8185
1527
+ CNT,7139
1528
+ MOG,4233
1529
+ MOG2,8296
1530
+ GMG,2112
1531
+ KNN,8157
1532
+ CNT,7111
1533
+ MOG,4171
1534
+ MOG2,8169
1535
+ GMG,1718
1536
+ KNN,8053
1537
+ CNT,7038
1538
+ MOG,4173
1539
+ MOG2,8108
1540
+ GMG,1656
1541
+ KNN,8038
1542
+ CNT,7031
1543
+ MOG,4214
1544
+ MOG2,8013
1545
+ GMG,2486
1546
+ KNN,7977
1547
+ CNT,7030
1548
+ MOG,4218
1549
+ MOG2,8003
1550
+ GMG,2402
1551
+ KNN,7961
1552
+ CNT,7017
1553
+ MOG,4251
1554
+ MOG2,7985
1555
+ GMG,2247
1556
+ KNN,8033
1557
+ CNT,7044
1558
+ MOG,4207
1559
+ MOG2,7885
1560
+ GMG,1889
1561
+ KNN,8026
1562
+ CNT,7024
1563
+ MOG,4193
1564
+ MOG2,7775
1565
+ GMG,1706
1566
+ KNN,7931
1567
+ CNT,6967
1568
+ MOG,4242
1569
+ MOG2,7797
1570
+ GMG,2343
1571
+ KNN,7905
1572
+ CNT,6928
1573
+ MOG,4215
1574
+ MOG2,7749
1575
+ GMG,2133
1576
+ KNN,7893
1577
+ CNT,6927
1578
+ MOG,4171
1579
+ MOG2,7744
1580
+ GMG,1894
1581
+ KNN,7927
1582
+ CNT,6911
1583
+ MOG,4188
1584
+ MOG2,7758
1585
+ GMG,1621
1586
+ KNN,7922
1587
+ CNT,6943
1588
+ MOG,4185
1589
+ MOG2,7736
1590
+ GMG,1476
1591
+ KNN,7928
1592
+ CNT,6941
1593
+ MOG,4210
1594
+ MOG2,7821
1595
+ GMG,2156
1596
+ KNN,7936
1597
+ CNT,6926
1598
+ MOG,4146
1599
+ MOG2,7883
1600
+ GMG,2066
1601
+ KNN,7928
1602
+ CNT,6851
1603
+ MOG,4151
1604
+ MOG2,7974
1605
+ GMG,1892
1606
+ KNN,7955
1607
+ CNT,6863
1608
+ MOG,4176
1609
+ MOG2,8003
1610
+ GMG,1630
1611
+ KNN,7960
1612
+ CNT,6892
1613
+ MOG,4245
1614
+ MOG2,8103
1615
+ GMG,1723
1616
+ KNN,8019
1617
+ CNT,6925
1618
+ MOG,4295
1619
+ MOG2,8371
1620
+ GMG,2352
1621
+ KNN,8126
1622
+ CNT,7060
1623
+ MOG,4340
1624
+ MOG2,8475
1625
+ GMG,2439
1626
+ KNN,8155
1627
+ CNT,7055
1628
+ MOG,4344
1629
+ MOG2,8721
1630
+ GMG,2416
1631
+ KNN,8404
1632
+ CNT,7201
1633
+ MOG,4339
1634
+ MOG2,8660
1635
+ GMG,1889
1636
+ KNN,8373
1637
+ CNT,7208
1638
+ MOG,4341
1639
+ MOG2,8736
1640
+ GMG,1784
1641
+ KNN,8438
1642
+ CNT,7211
1643
+ MOG,4408
1644
+ MOG2,8824
1645
+ GMG,2392
1646
+ KNN,8477
1647
+ CNT,7258
1648
+ MOG,4427
1649
+ MOG2,8935
1650
+ GMG,2282
1651
+ KNN,8577
1652
+ CNT,7327
1653
+ MOG,4433
1654
+ MOG2,8912
1655
+ GMG,1980
1656
+ KNN,8570
1657
+ CNT,7341
1658
+ MOG,4452
1659
+ MOG2,8888
1660
+ GMG,1649
1661
+ KNN,8526
1662
+ CNT,7369
1663
+ MOG,4417
1664
+ MOG2,8860
1665
+ GMG,1514
1666
+ KNN,8567
1667
+ CNT,7385
1668
+ MOG,4486
1669
+ MOG2,8896
1670
+ GMG,2406
1671
+ KNN,8584
1672
+ CNT,7464
1673
+ MOG,4463
1674
+ MOG2,8855
1675
+ GMG,2224
1676
+ KNN,8583
1677
+ CNT,7483
1678
+ MOG,4443
1679
+ MOG2,8831
1680
+ GMG,1993
1681
+ KNN,8598
1682
+ CNT,7474
1683
+ MOG,4501
1684
+ MOG2,8872
1685
+ GMG,1695
1686
+ KNN,8673
1687
+ CNT,7520
1688
+ MOG,4504
1689
+ MOG2,8875
1690
+ GMG,1613
1691
+ KNN,8729
1692
+ CNT,7614
1693
+ MOG,4516
1694
+ MOG2,8834
1695
+ GMG,2370
1696
+ KNN,8705
1697
+ CNT,7557
1698
+ MOG,4488
1699
+ MOG2,8883
1700
+ GMG,2326
1701
+ KNN,8741
1702
+ CNT,7542
1703
+ MOG,4417
1704
+ MOG2,8809
1705
+ GMG,1976
1706
+ KNN,8665
1707
+ CNT,7500
temporal_median_filter.py ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import numpy as np
2
+ import cv2 # opencv
3
+ #print(cv2.__version__)
4
+
5
+ VIDEO_SOURCE = 'videos/Cars.mp4'
6
+ VIDEO_OUT = 'videos/results/temporal_median_filter.avi'
7
+
8
+ cap = cv2.VideoCapture(VIDEO_SOURCE)
9
+ has_frame, frame = cap.read()
10
+ #print(has_frame, frame.shape)
11
+
12
+ fourcc = cv2.VideoWriter_fourcc(*'XVID')
13
+ # https://docs.opencv.org/3.4/dd/d9e/classcv_1_1VideoWriter.html
14
+ writer = cv2.VideoWriter(VIDEO_OUT, fourcc, 25, (frame.shape[1], frame.shape[0]), False)
15
+
16
+ #print(cap.get(cv2.CAP_PROP_FRAME_COUNT))
17
+ #print(np.random.uniform(size = 25))
18
+ frames_ids = cap.get(cv2.CAP_PROP_FRAME_COUNT) * np.random.uniform(size = 25)
19
+ #print(frames_ids)
20
+
21
+ #cap.set(cv2.CAP_PROP_POS_FRAMES, 825)
22
+ #has_frame, frame = cap.read()
23
+ #cv2.imshow('Test', frame)
24
+ #cv2.waitKey(0)
25
+
26
+ frames = []
27
+ for fid in frames_ids:
28
+ cap.set(cv2.CAP_PROP_POS_FRAMES, fid)
29
+ has_frame, frame = cap.read()
30
+ frames.append(frame)
31
+
32
+ #print(np.asarray(frames).shape)
33
+ #print(frames[1])
34
+
35
+ #for frame in frames:
36
+ # cv2.imshow('Frame', frame)
37
+ # cv2.waitKey(0)
38
+
39
+ #print(np.mean([1, 3, 5, 6, 8, 9]))
40
+ #print((1 + 3 + 5 + 6 + 8 + 9) / 6)
41
+ #print(np.median([[1, 3, 5, 6, 8, 9]]))
42
+ #print((5 + 6) / 2)
43
+ #print(np.median([1, 3, 4, 5, 6, 8, 9]))
44
+
45
+ median_frame = np.median(frames, axis = 0).astype(dtype=np.uint8)
46
+ #print(frame[0])
47
+ #print(median_frame)
48
+ #cv2.imshow('Median frame', median_frame)
49
+ #cv2.waitKey(0)
50
+
51
+ cv2.imwrite('model_median_frame.jpg', median_frame)
52
+
53
+ cap.set(cv2.CAP_PROP_POS_FRAMES, 0)
54
+ gray_median_frame = cv2.cvtColor(median_frame, cv2.COLOR_BGR2GRAY)
55
+ #cv2.imshow('Gray', gray_median_frame)
56
+ #cv2.waitKey(0)
57
+
58
+ while (True):
59
+ has_frame, frame = cap.read()
60
+
61
+ if not has_frame:
62
+ print('End of the video')
63
+ break
64
+
65
+ frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
66
+ dframe = cv2.absdiff(frame_gray, gray_median_frame)
67
+ # If pixel intensity is greater than the set threshold, value set to 255, else set to 0(black).
68
+ #th, dframe = cv2.threshold(dframe, 70, 255, cv2.THRESH_BINARY)
69
+ th, dframe = cv2.threshold(dframe, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
70
+ print(th)
71
+
72
+ cv2.imshow('Frame', dframe)
73
+ writer.write(dframe)
74
+
75
+ if cv2.waitKey(1) & 0xFF == ord('q'):
76
+ break
77
+
78
+ writer.release()
79
+ cap.release()
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
test.py ADDED
@@ -0,0 +1 @@
 
 
1
+ print('Testing the project')
validator.py ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Based on: https://github.com/sarful/People-counter-opencv-python3/blob/master/Person.py
2
+
3
+ import math
4
+
5
+ class MyValidator:
6
+ tracks = []
7
+
8
+ def __init__(self, i, xi, yi, max_age):
9
+ self.i = i
10
+ self.x = xi
11
+ self.y = yi
12
+ self.tracks = []
13
+ self.done = False
14
+ self.state = '0'
15
+ self.age = 0
16
+ self.max_age = max_age
17
+ self.dir = None
18
+
19
+ def getTracks(self):
20
+ return self.tracks
21
+
22
+ def getId(self):
23
+ return self.i
24
+
25
+ def getState(self):
26
+ return self.state
27
+
28
+ def getDir(self):
29
+ return self.dir
30
+
31
+ def getX(self):
32
+ return self.x
33
+
34
+ def getY(self):
35
+ return self.y
36
+
37
+ def updateCoords(self, xn, yn):
38
+ self.age = 0
39
+ self.tracks.append([self.x, self.y])
40
+ self.x = xn
41
+ self.y = yn
42
+
43
+ def setDone(self):
44
+ self.done = True
45
+
46
+ def timedOut(self):
47
+ return self.done
48
+
49
+ def going_DOWN(self, mid_start):
50
+
51
+ # Check if you have at least 2 coordinates of stored objects
52
+ if len(self.tracks) >= 2:
53
+
54
+ # Check if the condition of the object is zero
55
+ # The state of the object will only change when crossing the input threshold
56
+ if self.state == '0':
57
+
58
+ # Euclidian distance calculation
59
+ distance = math.sqrt(float((self.tracks[-1][1] - self.tracks[-2][1])**2) + float(
60
+ (self.tracks[-1][1] - self.tracks[-2][1])**2))
61
+ if distance < 10:
62
+ # [-2] are two previous positions of the vector record and [1] is the column containing the
63
+ # vertical values (y) of each object
64
+ # If the anterior vertical position of the object is greater than the input threshold and if in
65
+ # two anterior vertical positions the value is less than or equal to the input threshold
66
+ # we updated the state of the object to 1 and indicated that it moved downwards (down)
67
+ # We do this to make sure that the object crossed the entrance line, moving from top to bottom
68
+ if self.tracks[-1][1] > mid_start and self.tracks[-2][1] <= mid_start:
69
+ state = '1'
70
+ self.dir = 'down'
71
+ return True
72
+ else:
73
+ return False
74
+ else:
75
+ return False
76
+
77
+ def going_UP(self, mid_end):
78
+ if len(self.tracks) >= 2:
79
+ if self.state == '0':
80
+ distance = math.sqrt(float((self.tracks[-1][1] - self.tracks[-2][1])**2) + float(
81
+ (self.tracks[-1][1] - self.tracks[-2][1])**2))
82
+ if distance < 10:
83
+ if self.tracks[-1][1] < mid_end and self.tracks[-2][1] >= mid_end:
84
+ state = '1'
85
+ self.dir = 'up'
86
+ return True
87
+ else:
88
+ return False
89
+ else:
90
+ return False
91
+
92
+ def age_one(self):
93
+ self.age += 1
94
+ if self.age > self.max_age:
95
+ self.done = True
96
+ return True