68 lines
2.1 KiB
Python
68 lines
2.1 KiB
Python
import cv2, numpy as np
|
|
|
|
from Tbd.helper import CameraObject
|
|
|
|
from PySide6.QtCore import Qt, QTimer, QSize
|
|
from PySide6.QtGui import QImage, QPixmap
|
|
|
|
from PySide6.QtWidgets import QWidget, QLabel, QVBoxLayout, QSizePolicy, QHBoxLayout, QLineEdit, QPushButton
|
|
from typing import List
|
|
from PySide6.QtWidgets import QScrollArea, QFrame
|
|
|
|
|
|
class CameraSetupWidget(QWidget):
|
|
|
|
def __init__(self, cameraObject: CameraObject):
|
|
super().__init__()
|
|
|
|
self.cameraObject = cameraObject
|
|
|
|
self.mainLayout = QHBoxLayout(self)
|
|
|
|
self.frame_preview_widget = QLabel()
|
|
self.preview_max_size = QSize(800, 600)
|
|
self.frame_preview_widget.setMaximumSize(self.preview_max_size)
|
|
self.camerOptionsLayout = QVBoxLayout()
|
|
|
|
self.start_preview_button = QPushButton("Start")
|
|
self.stop_preview_button = QPushButton("Stop")
|
|
|
|
|
|
|
|
self.camerOptionsLayout.addWidget(self.start_preview_button)
|
|
self.camerOptionsLayout.addWidget(self.stop_preview_button)
|
|
|
|
self.mainLayout.addLayout(self.camerOptionsLayout)
|
|
self.mainLayout.addWidget(self.frame_preview_widget)
|
|
|
|
self.start_preview_button.clicked.connect(self._start_camera_preview)
|
|
self.stop_preview_button.clicked.connect(self._stop_camera_preview)
|
|
|
|
self.frame_update_timer = QTimer(self)
|
|
self.frame_update_timer.timeout.connect(self._update_frame)
|
|
|
|
|
|
def _start_camera_preview(self):
|
|
self.frame_update_timer.start(30)
|
|
|
|
def _stop_camera_preview(self):
|
|
self.frame_update_timer.stop()
|
|
|
|
|
|
|
|
def _update_frame(self):
|
|
ok, frame = self.cameraObject.capture.read()
|
|
if not ok or frame is None:
|
|
return
|
|
|
|
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
|
height, width, ch = frame_rgb.shape
|
|
qimg = QImage(frame_rgb.data, width, height, ch * width, QImage.Format_RGB888)
|
|
pixmap = QPixmap.fromImage(qimg)
|
|
pixmap = pixmap.scaled(
|
|
self.frame_preview_widget.maximumSize(),
|
|
Qt.KeepAspectRatio,
|
|
Qt.SmoothTransformation,
|
|
)
|
|
self.frame_preview_widget.setPixmap(pixmap)
|