-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathVideoMarker-2.py
134 lines (90 loc) · 3.28 KB
/
VideoMarker-2.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#python screen-detection-2.py ./inputFile.mp4 ./output.mp4
DEBUG=True
RESIZE_RATIO=0.3
import sys
import cv2
import numpy as np
import sklearn
import numpy as np
clicksXY=[]
finishGettingInput=False
vidIn = None
vidOut = None
frame = None
def resizedFrame(frame,ratio=RESIZE_RATIO):
return cv2.resize(frame,(int(frame.shape[1]*ratio),int(frame.shape[0]*ratio)))
def mouse_callback(event, x, y, flags, params):
global frame,vidIn,vidOut,clicksXY,finishGettingInput
if event==cv2.EVENT_FLAG_LBUTTON:
clicksXY.append([x,y])
while len(clicksXY)>4:
clicksXY.pop(0)
print(x,y)
ret,frame=readFrame(vidIn)
assert ret, "Error in reading video"
for i in range(len(clicksXY)):
cv2.circle(frame,(clicksXY[i][0],clicksXY[i][1]),4,[255,255,255],thickness=4)
cv2.line(frame,(clicksXY[i][0],clicksXY[i][1]),(clicksXY[(i+1)%len(clicksXY)][0],clicksXY[(i+1)%len(clicksXY)][1]),[255,255,255],thickness=1)
cv2.imshow("frame",frame)
elif event==cv2.EVENT_FLAG_RBUTTON:
finishGettingInput=True
def readFrame(vid):
ret,frame=vid.read()
if not ret:
return False, None
else:
frame=resizedFrame(frame)
return True, frame
def mainFunc(inputFile,outputFile,noFramesMax,randomJump):
global frame,vidIn,vidOut,clicksXY,finishGettingInput
vidIn=cv2.VideoCapture(inputFile)
ret,frame=readFrame(vidIn)
assert ret , "No frame returned"
cv2.imshow("frame",frame)
cv2.waitKey(10)
cv2.setMouseCallback('frame', mouse_callback)
X=np.zeros(shape=(noFramesMax,frame.shape[0],frame.shape[1],frame.shape[2]),dtype=np.uint8)
Y=np.zeros((noFramesMax,4,2),dtype=np.uint32)
f=0
while f<noFramesMax:
jump=np.random.randint(randomJump/2,randomJump)
for _ in range(jump):
ret,frame=readFrame(vidIn)
if not ret:
vidIn.release()
vidIn=cv2.VideoCapture(inputFile)
frameBackup=np.copy(frame)
cv2.imshow("frame",frame)
finishGettingInput=False
while not finishGettingInput:
cv2.waitKey(1)
X[f]=frameBackup
Y[f,:,:]=np.array(clicksXY)
clicksXY=[]
f+=1
print("Frame {} of {} complete".format(f,noFramesMax))
cv2.destroyWindow("frame")
vidIn.release()
np.savez(outputFile,X=X,Y=Y)
print("File saved to {}".format(outputFile))
for f in range(noFramesMax):
frame=np.copy(X[f])
clicksXY=Y[f]
for i in range(len(clicksXY)):
cv2.circle(frame,(clicksXY[i][0],clicksXY[i][1]),4,[255,255,255],thickness=4)
cv2.line(frame,(clicksXY[i][0],clicksXY[i][1]),(clicksXY[(i+1)%len(clicksXY)][0],clicksXY[(i+1)%len(clicksXY)][1]),[255,255,255],thickness=1)
cv2.imshow("Marked frame",frame)
cv2.waitKey(1)
cv2.imshow("Unmarked frame",X[f])
cv2.waitKey(1000)
cv2.destroyAllWindows()
print("Program end")
if __name__ == '__main__':
try:
inputFile=sys.argv[1]
outputFile=sys.argv[2]
noFramesMax=int(sys.argv[3])
randomJump=int(sys.argv[4])
except:
print("python VideoMarker-2.py ./video/inputVid.mp4 ./dataset/screen.npz 1000 10")
mainFunc(inputFile,outputFile,noFramesMax,randomJump)