| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 """ pyforms.gui.Controls.ControlPlayer.ControlPlayer
5
6 """
7
8 import math
9 import os
10 from PyQt4 import uic
11 from PyQt4 import QtCore, QtGui
12 from pyforms.gui.Controls.ControlBase import ControlBase
13 import pyforms.Utils.tools as tools
14
15 try:
16 import cv2
17 except:
18 print("Warning: was not possible to import cv2 in ControlPlayer")
19
20 from PyQt4.QtGui import QApplication
21 from pyforms.gui.Controls.ControlPlayer.VideoGLWidget import VideoGLWidget
22
23
24 __author__ = "Ricardo Ribeiro"
25 __credits__ = ["Ricardo Ribeiro"]
26 __license__ = "MIT"
27 __version__ = "0.0"
28 __maintainer__ = "Ricardo Ribeiro"
29 __email__ = "ricardojvr@gmail.com"
30 __status__ = "Development"
34
35 _videoWidget = None
36 _currentFrame = None
37
41
42
44 # Get the current path of the file
45 rootPath = os.path.dirname(__file__)
46
47 # Load the UI for the self instance
48 uic.loadUi(os.path.join(rootPath, "video.ui"), self)
49
50 # Define the icon for the Play button
51 icon = QtGui.QIcon()
52 pixmapOff = QtGui.qApp.style().standardPixmap(
53 QtGui.QStyle.SP_MediaPlay)
54 pixmapOn = QtGui.qApp.style().standardPixmap(
55 QtGui.QStyle.SP_MediaPause)
56 icon.addPixmap(
57 pixmapOff, mode=QtGui.QIcon.Normal, state=QtGui.QIcon.Off)
58 icon.addPixmap(pixmapOn, mode=QtGui.QIcon.Normal, state=QtGui.QIcon.On)
59 self.videoPlay.setIcon(icon)
60
61 # Define the icon for the Show/Hide markers button
62 icon = QtGui.QIcon()
63 pixmapOff = QtGui.qApp.style().standardPixmap(
64 QtGui.QStyle.SP_DialogYesButton)
65 pixmapOn = QtGui.qApp.style().standardPixmap(
66 QtGui.QStyle.SP_DialogNoButton)
67 icon.addPixmap(
68 pixmapOff, mode=QtGui.QIcon.Normal, state=QtGui.QIcon.Off)
69 icon.addPixmap(pixmapOn, mode=QtGui.QIcon.Normal, state=QtGui.QIcon.On)
70 self.videoHideMarkers.setIcon(icon)
71
72 self._videoWidget = VideoGLWidget()
73 self._videoWidget._control = self
74 self.videoLayout.addWidget(self._videoWidget)
75 self.videoHideMarkers.clicked.connect(self.videoHideMarkers_clicked)
76 self.videoPlay.clicked.connect(self.videoPlay_clicked)
77 self.videoFPS.valueChanged.connect(self.videoFPS_valueChanged)
78 self.videoFrames.valueChanged.connect(self.videoFrames_valueChanged)
79 self.videoProgress.valueChanged.connect(
80 self.videoProgress_valueChanged)
81 self.videoProgress.sliderReleased.connect(
82 self.videoProgress_sliderReleased)
83 self._timer = QtCore.QTimer(self)
84 self._timer.timeout.connect(self.updateFrame)
85
86 self.form.horizontalSlider.valueChanged.connect(self.__rotateZ)
87 self.form.verticalSlider.valueChanged.connect(self.__rotateX)
88
89 self._currentFrame = None
90 # Controls if anything is drawn on the video
91 self._draw_on_video = True
92 self._videoFPS = None # Sets the FPS rate at which the video is played
93
94 self.view3D = False
95
99
103
104 @property
106
107 @onDoubleClick.setter
109
110 @property
112
113 @onClick.setter
115
116 @property
118
119 @onDrag.setter
121
122 @property
124
125 @onEndDrag.setter
127
128 @property
130
131 @view3D.setter
135
136 @property
138
139 @onKeyRelease.setter
141
142 @property
144
146 return frame
147
149 (success, frame) = self.value.read()
150
151 if frame != None:
152 self._currentFrame = frame
153
154 frame = self.processFrame(self._currentFrame.copy())
155 if isinstance(frame, list) or isinstance(frame, tuple):
156 self._videoWidget.paint(frame)
157 else:
158 self._videoWidget.paint([frame])
159
160 if not self.videoProgress.isSliderDown():
161 currentFrame = self.video_index
162
163 self.videoProgress.setValue(currentFrame)
164 if self._updateVideoFrame:
165 self.videoFrames.setValue(currentFrame)
166
168 """ Slot to hide or show stuff drawn on the video."""
169 if self.videoHideMarkers.isChecked():
170 self._draw_on_video = True
171 else:
172 self._draw_on_video = False
173 self.refresh()
174 # print "--->", self._draw_on_video
175
177 """Slot for Play/Pause functionality."""
178 if self.videoPlay.isChecked():
179 timeout_interval = (1000 / self._videoFPS)
180 self._timer.start(timeout_interval)
181 else:
182 self._timer.stop()
183
185 if not self.videoPlay.isChecked():
186 self.videoPlay.setChecked(True)
187 timeout_interval = (1000 / self._videoFPS)
188 self._timer.start(timeout_interval)
189 else:
190 self.videoPlay.setChecked(False)
191 self._timer.stop()
192
194 """Get FPS rate from loaded video."""
195 self._videoFPS = self.videoFPS.value()
196 timeout_interval = (1000 / self._videoFPS)
197 self._timer.setInterval(timeout_interval)
198
202
206
208 if self._currentFrame != None:
209 frame = self.processFrame(self._currentFrame.copy())
210 if isinstance(frame, list) or isinstance(frame, tuple):
211 self._videoWidget.paint(frame)
212 else:
213 self._videoWidget.paint([frame])
214
216 # totalMilliseconds = totalMilliseconds*(1000.0/self._value.get(cv2.cv.CV_CAP_PROP_FPS))
217
218 totalseconds = int(totalMilliseconds / 1000)
219 minutes = int(totalseconds / 60)
220 seconds = totalseconds - (minutes * 60)
221 milliseconds = totalMilliseconds - (totalseconds * 1000)
222 return (minutes, seconds, milliseconds)
223
225 milli = self._value.get(cv2.cv.CV_CAP_PROP_POS_MSEC)
226 milli -= 1000.0 / self._value.get(cv2.cv.CV_CAP_PROP_FPS)
227 (minutes, seconds, milliseconds) = self.convertFrameToTime(milli)
228 self.videoTime.setText(
229 "%02d:%02d:%03d" % (minutes, seconds, milliseconds))
230
231 _updateVideoFrame = True
232
234 jump2Frame = self.videoProgress.value()
235 self._value.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, jump2Frame)
236 self._updateVideoFrame = False
237 self.videoFrames.setValue(jump2Frame)
238 self._value.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, jump2Frame)
239 self._updateVideoFrame = True
240
242 if not self.isPlaying():
243 jump2Frame = self.videoProgress.value()
244 diff = jump2Frame - i
245
246 self._value.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, jump2Frame - diff)
247 self._updateVideoFrame = False
248 self.updateFrame()
249 self._updateVideoFrame = True
250
253
255
256 if self._value:
257 self.videoControl.setEnabled(True)
258 self.videoProgress.setMinimum(self._value.startFrame)
259 self.videoProgress.setValue(self._value.startFrame)
260 self.videoProgress.setMaximum(self._value.endFrame)
261 self.videoFrames.setMinimum(self._value.startFrame)
262 self.videoFrames.setValue(self._value.startFrame)
263 self.videoFrames.setMaximum(self._value.endFrame)
264
265 @property
267
268 @value.setter
270 self._videoWidget.reset()
271
272 if value == 0:
273 self._value = cv2.OTVideoInput(0)
274 elif isinstance(value, str) and value:
275 self._value = cv2.VideoCapture(value)
276 self.fps = self._value.get(cv2.cv.CV_CAP_PROP_FPS)
277 print("Open video with", self._value.get(
278 cv2.cv.CV_CAP_PROP_FPS), 'fps')
279 else:
280 self._value = None
281
282 if self._value and value != 0:
283 self.videoProgress.setMinimum(0)
284 self.videoProgress.setValue(0)
285 self.videoProgress.setMaximum(
286 self._value.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))
287 self.videoFrames.setMinimum(0)
288 self.videoFrames.setValue(0)
289 self.videoFrames.setMaximum(
290 self._value.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))
291
292 if self._value:
293 self.videoControl.setEnabled(True)
294
295 self.refresh()
296
297 @property
303
304 @startFrame.setter
309
310 @property
316
317 @endFrame.setter
319
320 if self._value:
321 self._value.endFrame = value
322 self.videoProgress.setValue(self._value.startFrame)
323 self.videoProgress.setMaximum(value)
324
325 @property
328
329 @video_index.setter
332
333 @property
335
336 @property
338
339 @image.setter
341 if isinstance(value, list) or isinstance(value, tuple):
342 self._videoWidget.paint(value)
343 else:
344 self._videoWidget.paint([value])
345 QApplication.processEvents()
346
347 @property
349
350 @fps.setter
355
356 @property
358
359 @property
361
362 @fps.setter
364
365 @property
367
368 @property
370
371 @point.setter
373
375 QtGui.QFrame.hide(self)
376
378 QtGui.QFrame.show(self)
379
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Fri Sep 11 13:06:34 2015 | http://epydoc.sourceforge.net |