1
+ import cv2
2
+ import sys
3
+
4
+ #do not forget to change the three variables below
5
+ video_source = "/video/%04d.png"
6
+ groundtruth_report_dir = "/foo1/bar1.txt"
7
+ reviewed_GT_report_dir = "/foo1/bar2.txt"
8
+
9
+ def report_reviewedGT (ground_truth_data ):
10
+ reviewed_GT_file = open (reviewed_GT_report_dir , "w" )
11
+
12
+ for key in sorted (ground_truth_data .keys ()):
13
+ reviewed_GT_file .write (str (ground_truth_data [key ][0 ])+ " " + str (ground_truth_data [key ][1 ])+ " " + str (ground_truth_data [key ][2 ])+ " " + str (ground_truth_data [key ][3 ])+ "\n " )
14
+
15
+ reviewed_GT_file .close ()
16
+
17
+
18
+ if __name__ == '__main__' :
19
+ frameNumber = 0
20
+ editCount = 0
21
+ #set Ground truth bounding box coordinate text file
22
+ ground_truth_file = open (groundtruth_report_dir , "r" )
23
+
24
+ #set Tracker bounding box coordinate text file
25
+ ground_truth_data = {}
26
+ tracker_data = {}
27
+ gtf_line = ground_truth_file .readline ()
28
+
29
+ counter = 0
30
+ # Parse ground truth and tracker bounding box files
31
+ while gtf_line :
32
+ ground_truth_data [counter ] = gtf_line .split ()[0 :]
33
+ counter = counter + 1
34
+ gtf_line = ground_truth_file .readline ()
35
+
36
+ # Read video
37
+ video = cv2 .VideoCapture (video_source )
38
+ n_frames = int (video .get (cv2 .CAP_PROP_FRAME_COUNT ))
39
+
40
+ while True :
41
+ ok , frame = video .read ()
42
+ if (frameNumber ) < counter :
43
+ p1_g = (int (ground_truth_data [frameNumber ][0 ]), int (ground_truth_data [frameNumber ][1 ]))
44
+ p2_g = (int (ground_truth_data [frameNumber ][0 ]) + int (ground_truth_data [frameNumber ][2 ]), int (ground_truth_data [frameNumber ][1 ]) + int (ground_truth_data [frameNumber ][3 ]))
45
+ cv2 .putText (frame , "Frame number: " + str ('{0:04}' .format (frameNumber )), (100 ,80 ),cv2 .FONT_HERSHEY_SIMPLEX , 0.75 , (50 ,170 ,50 ), 2 )
46
+ cv2 .rectangle (frame , p1_g , p2_g , (0 ,255 ,0 ), 2 , 1 )
47
+ print ('#' + str ('{0:04}' .format (frameNumber )))
48
+ if not ok :
49
+ break
50
+
51
+ # Start timer
52
+ timer = cv2 .getTickCount ()
53
+
54
+ # Update tracker
55
+ # Calculate Frames per second (FPS)
56
+ fps = cv2 .getTickFrequency () / (cv2 .getTickCount () - timer );
57
+ # Display result
58
+ cv2 .imshow ("pyTAG" , frame )
59
+ # Exit if ESC pressed
60
+ k = cv2 .waitKey (1 ) & 0xff
61
+ if k == 32 :
62
+ restart = True
63
+ #ok, frame = video.read()
64
+
65
+ while video .isOpened ():
66
+ cv2 .putText (frame , "Frame number: " + str ('{0:04}' .format (frameNumber )), (100 ,80 ),cv2 .FONT_HERSHEY_SIMPLEX , 0.75 , (50 ,170 ,50 ), 2 )
67
+ # Read video capture
68
+ #ret, frame = video.read()
69
+
70
+ # show one frame at a time
71
+ key = cv2 .waitKey (0 )
72
+ while key not in [32 , ord ('n' ), ord ('b' ), ord ('a' ), ord ('e' )]:
73
+ key = cv2 .waitKey (0 )
74
+
75
+ if key == ord ('n' ):
76
+ print (key )
77
+ if frameNumber < n_frames - 1 :
78
+ frameID = frameNumber
79
+ frameNumber = frameNumber + 1
80
+ p1_g = (int (ground_truth_data [frameNumber ][0 ]), int (ground_truth_data [frameNumber ][1 ]))
81
+ p2_g = (int (ground_truth_data [frameNumber ][0 ]) + int (ground_truth_data [frameNumber ][2 ]), int (ground_truth_data [frameNumber ][1 ]) + int (ground_truth_data [frameNumber ][3 ]))
82
+ video .set (1 ,frameNumber )
83
+ ret , frame = video .read ()
84
+ cv2 .putText (frame , "Frame number: " + str ('{0:04}' .format (frameNumber )), (100 ,80 ),cv2 .FONT_HERSHEY_SIMPLEX , 0.75 , (50 ,170 ,50 ), 2 )
85
+ cv2 .rectangle (frame , p1_g , p2_g , (0 ,255 ,0 ), 2 , 1 )
86
+ else :
87
+ break
88
+ if key == ord ('b' ):
89
+ print (key )
90
+ if n_frames >= frameNumber and frameNumber != 0 :
91
+ frameID = frameNumber
92
+ frameNumber = frameNumber - 1
93
+ p1_g = (int (ground_truth_data [frameNumber ][0 ]), int (ground_truth_data [frameNumber ][1 ]))
94
+ p2_g = (int (ground_truth_data [frameNumber ][0 ]) + int (ground_truth_data [frameNumber ][2 ]), int (ground_truth_data [frameNumber ][1 ]) + int (ground_truth_data [frameNumber ][3 ]))
95
+ video .set (1 ,frameNumber )
96
+ ret , frame = video .read ()
97
+ cv2 .putText (frame , "Frame number: " + str ('{0:04}' .format (frameNumber )), (100 ,80 ),cv2 .FONT_HERSHEY_SIMPLEX , 0.75 , (50 ,170 ,50 ), 2 )
98
+ cv2 .rectangle (frame , p1_g , p2_g , (0 ,255 ,0 ), 2 , 1 )
99
+ if key == ord ('e' ):
100
+ break
101
+ if key == 32 :
102
+ editCount = editCount + 1
103
+ bbox = cv2 .selectROI (frame , False )
104
+ coordinate = '{0} {1} {2} {3}' .format (int (bbox [0 ]),int (bbox [1 ]),int (bbox [2 ]),int (bbox [3 ]))
105
+ if (str (coordinate ) != "0 0 0 0" ):
106
+ ground_truth_data [frameNumber ] = (str (coordinate )+ "\n " ).split ()[0 :]
107
+ else :
108
+ coordinate = "0 0 0 0"
109
+ ground_truth_data [frameNumber ] = (str (coordinate )+ "\n " ).split ()[0 :]
110
+ print (str (ground_truth_data [frameNumber ]))
111
+ cv2 .destroyWindow ("ROI selector" )
112
+ p1_g = (int (ground_truth_data [frameNumber ][0 ]), int (ground_truth_data [frameNumber ][1 ]))
113
+ p2_g = (int (ground_truth_data [frameNumber ][0 ]) + int (ground_truth_data [frameNumber ][2 ]), int (ground_truth_data [frameNumber ][1 ]) + int (ground_truth_data [frameNumber ][3 ]))
114
+ video .set (1 ,frameNumber )
115
+ cv2 .putText (frame , "Frame number: " + str ('{0:04}' .format (frameNumber )), (100 ,80 ),cv2 .FONT_HERSHEY_SIMPLEX , 0.75 , (50 ,170 ,50 ), 2 )
116
+ cv2 .rectangle (frame , p1_g , p2_g , (0 ,255 ,0 ), 2 , 1 )
117
+ # Display each frame
118
+ cv2 .imshow ("pyTAG" , frame )
119
+ frameNumber = frameNumber + 1
120
+ print ("Total corrections: " + str (editCount ))
121
+ report_reviewedGT (ground_truth_data )
0 commit comments