-
Notifications
You must be signed in to change notification settings - Fork 8
/
QDSpy_GUI_cam.py
97 lines (80 loc) · 2.93 KB
/
QDSpy_GUI_cam.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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
QDSpy module - camera dialog
Copyright (c) 2013-2024 Thomas Euler
All rights reserved.
2024-06-19 - Ported from `PyQt5` to `PyQt6`
"""
# ---------------------------------------------------------------------
__author__ = "code@eulerlab.de"
from PyQt6 import QtGui, QtCore, uic
from PyQt6.QtCore import QTimer
from PyQt6.QtWidgets import QDialog
import QDSpy_core_support as csp
if csp.module_exists("cv2"):
import Devices.camera as cam
# ---------------------------------------------------------------------
form_class = uic.loadUiType("QDSpy_GUI_cam.ui")[0]
grab_interval_ms = 50
# ---------------------------------------------------------------------
# Camera dialog window
# ---------------------------------------------------------------------
class CamWinClass(QDialog, form_class):
def __init__(self, parent=None, _funcUpdate=None, _funcLog=None):
QtGui.QDialog.__init__(self, parent)
# Initialize GUI ...
#
self.setupUi(self)
self.btnPause.clicked.connect(self.OnClick_btnPause)
self.funcUpdate = _funcUpdate
# Generate camera object
#
self.cam = cam.Camera(_funcLog)
# Generate timer object for continous video grabbing
#
self.timer = QTimer()
self.timer.setInterval(grab_interval_ms)
self.timer.timeout.connect(self.grab)
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def showEvent(self, event):
# Camera window is (re)shown
#
super().showEvent(event)
# Connect a camera and start timer to grab continously new frames
#
self.cam.connect(0)
self.timer.start()
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def closeEvent(self, event):
# Camera window is being closed
#
# Stop timer and disconnect camera
#
self.timer.stop()
self.cam.disconnect()
# Update parent
#
if self.parent is not None and self.funcUpdate is not None:
self.funcUpdate()
self.accept()
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def grab(self):
frame = self.cam.grab()
if len(frame) > 0:
height, width, channel = frame.shape
bytesPerLine = 3 * width
qImg = QtGui.QImage(frame.data, width, height, bytesPerLine, QtGui.QImage.Format_RGB888)
pix = QtGui.QPixmap(qImg)
self.label_CamFrame.setPixmap(pix.scaled(self.label_CamFrame.size(),
QtCore.Qt.KeepAspectRatio,
QtCore.Qt.FastTransformation))
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
def OnClick_btnPause(self):
if self.timer.isActive():
self.timer.stop()
self.btnPause.setText("Play")
else:
self.timer.start()
self.btnPause.setText("Pause")
# ---------------------------------------------------------------------