-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMainWindow.py
138 lines (102 loc) · 5.03 KB
/
MainWindow.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
132
133
134
135
136
137
138
import sys
from PySide6.QtCore import QMetaObject, QCoreApplication
from PySide6.QtGui import QMovie, QPixmap, QImage
from PySide6.QtMultimedia import QCameraDevice, QMediaDevices
from PySide6.QtWidgets import QWidget, QGridLayout, QPushButton, QApplication, QMainWindow, QLabel, QSizePolicy, QStyleFactory
from PySide6 import __version__
import Camera
import MovenetWidget
import Output
import VideoInput
import Screen
verbose = True
CameraInput = True
class MainWindow(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.resize(1120, 449)
self.centralWidget = QWidget(self)
self.gridLayout = QGridLayout(self.centralWidget)
self.stopBtn = QPushButton(self.centralWidget)
self.gridLayout.addWidget(self.stopBtn, 3, 0, 1, 1)
self.startBtn = QPushButton(self.centralWidget)
self.gridLayout.addWidget(self.startBtn, 3, 1, 1, 1)
# Preview widgets
self.screenWidget = Screen.ScreenWidget(self.centralWidget)
self.gridLayout.addWidget(self.screenWidget, 0, 1, 1, 1)
self.movenetWidget = MovenetWidget.MovenetWidget(self.centralWidget)
self.gridLayout.addWidget(self.movenetWidget, 1, 0, 1, 1)
self.movenetWidget.previewThread.changeOutputSource.connect(self.switchOutputOnClick)
self.outputWidget = Output.OutputWidget(self.centralWidget)
self.gridLayout.addWidget(self.outputWidget, 1, 1, 1, 1)
# self.startBtn.clicked.connect(self.outputWidget.previewThread.run)
# self.stopBtn.clicked.connect(self.outputWidget.previewThread.stop)
# Create camera and screen widgets and add to the layout
if CameraInput:
self.cameraWidget = Camera.CameraWidget(self.centralWidget)
self.gridLayout.addWidget(self.cameraWidget, 0, 0, 1, 1)
self.cameraWidget.previewThread.updateFrameNP.connect(self.movenetWidget.previewThread.updateFrameSlot) # movenet version
else:
self.videoInputWidget = VideoInput.VideoInputWidget(self.centralWidget)
self.gridLayout.addWidget(self.videoInputWidget, 0, 0, 1, 1)
self.videoInputWidget.previewThread.updateFrameNP.connect(self.movenetWidget.previewThread.udpateFrameSlot) # movenet version
self.switchButton = QPushButton("SWITCH OUTPUT")
self.gridLayout.addWidget(self.switchButton, 2, 0, 1, 2)
self.isOutputCamera = True
self.firstTimeSwitch = True
self.switchOutputOnClick()
self.switchButton.clicked.connect(self.switchOutputOnClick)
self.setCentralWidget(self.centralWidget)
self.retranslateUi(self)
QMetaObject.connectSlotsByName(self)
#TODO Make this non-switch
def switchOutputOnClick(self):
if self.isOutputCamera:
if not self.firstTimeSwitch:
self.screenWidget.previewThread.updateFrame.disconnect(self.outputWidget.previewThread.updateFrameSlot)
self.screenWidget.previewThread.updateFrameNP.disconnect(self.outputWidget.previewThread.updateFrameNPSlot)
else:
self.firstTimeSwitch = False
if CameraInput:
self.cameraWidget.previewThread.updateFrame.connect(self.outputWidget.previewThread.updateFrameSlot)
self.cameraWidget.previewThread.updateFrameNP.connect(self.outputWidget.previewThread.updateFrameNPSlot)
else:
self.videoInputWidget.previewThread.updateFrame.connect(self.outputWidget.previewThread.updateFrameSlot)
self.videoInputWidget.previewThread.updateFrameNP.connect(self.outputWidget.previewThread.updateFrameNPSlot)
else:
if not self.firstTimeSwitch:
if CameraInput:
self.cameraWidget.previewThread.updateFrame.disconnect(self.outputWidget.previewThread.updateFrameSlot)
self.cameraWidget.previewThread.updateFrameNP.disconnect(self.outputWidget.previewThread.updateFrameNPSlot)
else:
self.videoInputWidget.previewThread.updateFrame.disconnect(self.outputWidget.previewThread.updateFrameSlot)
self.videoInputWidget.previewThread.updateFrameNP.disconnect(self.outputWidget.previewThread.updateFrameNPSlot)
else:
self.firstTimeSwitch = False
self.screenWidget.previewThread.updateFrame.connect(self.outputWidget.previewThread.updateFrameSlot)
self.screenWidget.previewThread.updateFrameNP.connect(self.outputWidget.previewThread.updateFrameNPSlot)
self.isOutputCamera = not self.isOutputCamera
def retranslateUi(self, Window):
Window.setWindowTitle(QCoreApplication.translate("MainWindow", "OCVSS", None))
self.stopBtn.setText(QCoreApplication.translate("MainWindow", "STOP OCVSS", None))
self.startBtn.setText(QCoreApplication.translate("MainWindow", "START OCVSS", None))
if __name__ == "__main__":
print("Qt version:", __version__.__str__())
app = QApplication(sys.argv)
print("Available styles:")
styles = QStyleFactory.keys()
for s in styles:
print(" ", s)
print("Selected:", app.style().name())
app.setStyle('windowsvista')
widget = MainWindow()
widget.resize(800, 600)
widget.show()
if CameraInput:
app.aboutToQuit.connect(widget.cameraWidget.stopPreviewFeed)
else:
app.aboutToQuit.connect(widget.videoInputWidget.stopPreviewFeed)
app.aboutToQuit.connect(widget.screenWidget.stopPreviewFeed)
app.aboutToQuit.connect(widget.movenetWidget.stopPreviewFeed)
app.aboutToQuit.connect(widget.outputWidget.stopPreviewFeed)
sys.exit(app.exec())