def __init__(self): super().__init__() self.setupUi(self) # widgets self.cameraViewfinder = QCameraViewfinder(self.cameraWidget) self.cameraViewfinder.setGeometry(QRect(-1, 52, 641, 481)) self.cameraViewfinder.setObjectName('cameraViewfinder') self.statCanvas0 = StatCanvas(self.statWidget0, 'statCanvas0', 640, 480) self.statCanvas1 = StatCanvas(self.statWidget1, 'statCanvas1', 640, 480) self.statCanvas2 = StatCanvas(self.statWidget2, 'statCanvas2', 640, 480) # common self.threadpool = QThreadPool() # camera self.camera = None self.capture = None self.init_camera_and_capture() self.capture_timer = self.create_timer(5_000, self.capture_safe) # photo self.photo_timestamp = None self.photo_pixmap = QPixmap() # setting self.warn_notifier = Notifier(['확인', '무시']) self.warn_notifier_timer = self.create_timer(60_000, self.notify_warn_if_bad) self.stat_notifier = Notifier(['확인', '무시']) self.stat_notifier_timer = self.create_timer( self.get_setting_stat_interval(), self.notify_stat) # connect: camera self.cameraButton.toggled.connect( lambda toggle: self.cameraButton.setText('정지' if toggle else '시작')) self.cameraButton.toggled.connect(self.toggle_all_timers) # connect: stat, photo self.statTabWidget.tabBarClicked.connect(self.load_stat) self.tabWidget.tabBarClicked.connect(lambda index: self.load_photo( ) if index == 1 else self.load_stat(self.statTabWidget.currentIndex()) if index == 2 else None) self.photoLeftButton.clicked.connect( lambda: self.load_photo(left=True)) self.photoRightButton.clicked.connect( lambda: self.load_photo(right=True)) # connect: setting self.settingWarnButton.toggled.connect(self.toggle_warn_timer) self.connect_setting_stat_cycle_selected(self.settingStatCycleOff) self.connect_setting_stat_cycle_selected(self.settingStatCycle1) self.connect_setting_stat_cycle_selected(self.settingStatCycle2) self.connect_setting_stat_cycle_selected(self.settingStatCycle3) self.connect_setting_stat_cycle_selected(self.settingStatCycle6) self.settingStatTestButton.pressed.connect( lambda: self.settingStatTestButton.setIcon( QIcon('resource/test_off.png'))) self.settingStatTestButton.released.connect( lambda: self.settingStatTestButton.setIcon( QIcon('resource/test_on.png'))) self.settingStatTestButton.clicked.connect(self.notify_stat)
class Camera(QObject): def __init__(self, parent = QObject()): super(Camera, self).__init__(parent) print("3") self.cam = QCamera(QCameraInfo.defaultCamera()) #"/dev/video0".encode() print("4") self.caminfo = QCameraInfo(self.cam) self.camvfind = QCameraViewfinder() self.camvfindset = QCameraViewfinderSettings() self.cammode = self.cam.CaptureMode(0) self.camimgcap = QCameraImageCapture(self.cam) def iniCamera(self): print(self.caminfo.description()) print(self.caminfo.availableCameras()) for caminfo in QCameraInfo.availableCameras(): print(caminfo.deviceName()) if self.cam.isCaptureModeSupported(self.cammode): print("Capturemode supported") def startVid(self): #self.camimgcap.CaptureDestination(2) self.camvfind.show() self.cam.setViewfinder(self.camvfind) self.cam.setCaptureMode(self.cammode) self.cam.start()
def __init__(self, *args, **kwargs): super(CQCameraPreviewWindow, self).__init__(*args, **kwargs) self._MIN_WIN_WIDTH = 640 self.oc_camera_info = None self.oc_camera = None self.i_camera_idx = -1 self.b_guard = False self.toolbar = QtWidgets.QToolBar("Preview") self.cbox_resolution = CLabeledComboBox("Resolution:") self.cbox_resolution.cbox.currentIndexChanged.connect( self.__cb_on_resolution_cbox_index_changed) self.toolbar.addWidget(self.cbox_resolution) self.toolbar.addSeparator() self.cbox_frame_rate = CLabeledComboBox("Frame Rate:") self.cbox_frame_rate.cbox.currentIndexChanged.connect( self.__cb_on_frame_rate_cbox_index_changed) self.toolbar.addWidget(self.cbox_frame_rate) self.addToolBar(self.toolbar) self.toolbar.addSeparator() self.oc_view_finder = QCameraViewfinder() self.setCentralWidget(self.oc_view_finder)
def __init__(self, parent=None): super(_CameraWidget, self).__init__(parent) self.setLayout(QGridLayout()) self.toolbar = QToolBar() spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.toolbar.setIconSize(QSize(48, 48)) self.toolbar.addWidget(spacer) self.swapaction = self.toolbar.addAction(QIcon(":/widgets/cameraswap"), "Swap Camera") self.swapaction.triggered.connect(self.swapcamera) self.current_camera_index = 0 self.camera = None self.viewfinder = QCameraViewfinder() self.viewfinder.mousePressEvent = self.capture self.viewfinder.setAspectRatioMode(Qt.KeepAspectRatioByExpanding) self.update_camera_buttons() self.capturebutton = QPushButton("Capture", self) self.capturebutton.pressed.connect(self.capture) self.actionCancel = self.toolbar.addAction(QIcon(":/icons/cancel"), "Cancel") self.actionCancel.triggered.connect(self._cancel) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.toolbar) self.layout().addWidget(self.viewfinder) self.layout().addWidget(self.capturebutton) self.viewfinder.show()
def load_cam(self): self.cam_page.setLayout(self.cam_page_lay) self.error_cam.hide() self.camera = QCameraInfo.defaultCamera() # Проверяем, что камера сущетсвует # Если нет, то переключаемся на вторую вкладку if self.camera.isNull(): dialog = QErrorMessage() dialog.setWindowTitle('Warning') dialog.showMessage( 'Not enough cameras, the app will only be available in drawing mode' ) dialog.exec() self.error_cam.show() self.cam_page.setEnabled(False) self.tabWidget.setCurrentIndex(1) # Если да, то на первую else: self.tabWidget.setCurrentIndex(0) self.camera = QCamera(self.camera) self.view_cam = QCameraViewfinder(self) self.view_cam.setMediaObject(self.camera) self.view_cam.setAutoFillBackground(True) self.camera.setViewfinder(self.view_cam) self.box_lay = QVBoxLayout(self) self.box_lay.addWidget(self.view_cam) self.scrolling.setLayout(self.box_lay) # Запускаем камеру self.camera.start() # Подвязываем кнопку к слоту со снимком self.bt_cam.clicked.connect(self.make_ph) # Можно зумить фотографию self.zoom.valueChanged.connect(self.zoom_pict)
def start_ui(self): self.zui = Ui_zwin() self.zui.setupUi(self) self.zui.camera_label.setScaledContents(True) # 初始化信息 self.zui.label_xuehao.setText("工号:") self.zui.label_mingzi.setText("姓名:") self.zui.label_time.setText("签到时间:") # 查询按钮 self.zui.cxbtn.clicked.connect(self.cx_ui) # 注册按钮 self.zui.zcbtn.clicked.connect(self.zq_zc) # 签到按钮 self.zui.qdbtn.clicked.connect(self.zq_qd) # 删除按钮 self.zui.del_btn.clicked.connect(self.del_yg) # 导出按钮 self.zui.out_btn.clicked.connect(self.out_ex) # 摄像头控制 camera = QCamera(self) # 创建摄像头 cameraviewfinder = QCameraViewfinder(self.zui.camera_label) # 创建显示窗口 cameraviewfinder.resize(752, 420) self.cameraImageCapture = QCameraImageCapture(camera) # 绑定获取的摄像头 self.cameraImageCapture.setCaptureDestination( QCameraImageCapture.CaptureToFile) # 获取数据类型 camera.setCaptureMode(QCamera.CaptureStillImage) camera.setViewfinder(cameraviewfinder) # 绑定窗口 camera.start() # 开启摄像头
def setupCamera(self, cam_name): """ Create and setup camera functions. """ for camera in self.cameras: # Select camera by matching cam_name to one of the # devices in the cameras list. if camera.deviceName() == cam_name: self.cam = QCamera(camera) # Construct QCamera device # Create camera viewfinder widget and add it to the # view_finder_window. self.view_finder = QCameraViewfinder() self.view_finder_window.setWidget(self.view_finder) self.view_finder.show() # Sets the view finder to display video self.cam.setViewfinder(self.view_finder) # QCameraImageCapture() is used for taking # images or recordings. self.image_capture = QCameraImageCapture(self.cam) # Configure the camera to capture still images. self.cam.setCaptureMode(QCamera.CaptureStillImage) self.cam.start() # Slot to start the camera else: pass
def showCamera(self): self.finder = QCameraViewfinder() self.finder.show() self.camera = QCamera() self.camera.setViewfinder(self.finder) self.camera.start() self.camera.stop()
def __init__(self, dispositivoCamara, parent=None): super(Widgets, self).__init__(parent) self.parent = parent self.estadoFoto = False self.byteArrayFoto = QByteArray() # ========================================================== frame = QFrame(self) frame.setFrameShape(QFrame.Box) frame.setFrameShadow(QFrame.Sunken) frame.setFixedWidth(505) frame.setFixedHeight(380) frame.move(10, 10) # Instancias self.paginaVisor = QVideoWidget() self.paginaVisor.resize(500, 375) self.visor = QCameraViewfinder(self.paginaVisor) self.visor.resize(500, 375) self.labelFoto = QLabel() self.labelFoto.setAlignment(Qt.AlignCenter) self.labelFoto.resize(500, 375) # QStackedWidget self.stackedWidget = QStackedWidget(frame) self.stackedWidget.addWidget(self.paginaVisor) self.stackedWidget.addWidget(self.labelFoto) self.stackedWidget.resize(500, 375) self.stackedWidget.move(2, 2) # ======================== BOTONES ========================= self.buttonTomarFoto = QPushButton("Tomar foto", self) self.buttonTomarFoto.resize(110, 26) self.buttonTomarFoto.move(525, 10) self.buttonEliminarFoto = QPushButton("Eliminar foto", self) self.buttonEliminarFoto.resize(110, 26) self.buttonEliminarFoto.move(525, 50) self.buttonGuardarFoto = QPushButton("Guardar foto", self) self.buttonGuardarFoto.resize(110, 26) self.buttonGuardarFoto.move(525, 82) # ======================== EVENTOS ========================= self.buttonTomarFoto.clicked.connect(self.tomarFoto) self.buttonEliminarFoto.clicked.connect(self.eliminarFoto) self.buttonGuardarFoto.clicked.connect(self.guardarFoto) # ================== FUNCIONES AUTOMÁTICAS ================= self.setCamara(dispositivoCamara)
def __init__(self, parent = QObject()): super(Camera, self).__init__(parent) print("3") self.cam = QCamera(QCameraInfo.defaultCamera()) #"/dev/video0".encode() print("4") self.caminfo = QCameraInfo(self.cam) self.camvfind = QCameraViewfinder() self.camvfindset = QCameraViewfinderSettings() self.cammode = self.cam.CaptureMode(0) self.camimgcap = QCameraImageCapture(self.cam)
def __init__(self, parent=None): super(VideoWindow, self).__init__(parent) self.setWindowTitle( "PyQt Video Player Widget Example - pythonprogramminglanguage.com") self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.camera = QCamera(0) self.cameraviewfinder = QCameraViewfinder() self.cameramode = self.camera.CaptureMode(2) self.cameraimgcap = QCameraImageCapture(self.camera) videoWidget = QVideoWidget() self.imageView = QLabel("add a image file") self.imageView.setAlignment(Qt.AlignCenter) self.playButton = QPushButton() self.playButton.setEnabled(True) self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.playButton.clicked.connect(self.play) self.positionSlider = QSlider(Qt.Horizontal) self.positionSlider.setRange(0, 0) self.scene1 = QGraphicsScene() self.view1 = QGraphicsView(self.scene1) # Create new action # Create exit action # Create a widget for window contents wid = QWidget(self) self.setCentralWidget(wid) # Create layouts to place inside widget # controlLayout = QHBoxLayout() # controlLayout.setContentsMargins(0, 0, 0, 0) # controlLayout.addWidget(self.playButton) # controlLayout.addWidget(self.positionSlider) videolayout = QVBoxLayout() videolayout.addWidget(videoWidget) # videolayout.addLayout(controlLayout) # Set widget to contain window contents layout = QHBoxLayout() layout.addLayout(videolayout) layout.addWidget(self.cameraviewfinder) # layout.addWidget(self.view1) wid.setLayout(layout) self.mediaPlayer.setVideoOutput(videoWidget) self.cameraviewfinder.show() self.camera.setViewfinder(self.cameraviewfinder)
def setupVideoUi(self): self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.camera = QCamera(0) self.cameraviewfinder = QCameraViewfinder() self.cameraviewfinder.setAspectRatioMode(Qt.IgnoreAspectRatio) self.cameramode = self.camera.CaptureMode(2) self.cameraimgcap = QCameraImageCapture(self.camera) self.videoWidget = QVideoWidget() self.mediaPlayer.setVideoOutput(self.videoWidget) self.camera.setViewfinder(self.cameraviewfinder)
def __init__(self, *args, **kwargs): super(CMainWindow, self).__init__(*args, **kwargs) self.oc_camera = None self.l_cameras = QCameraInfo.availableCameras() if len(self.l_cameras) == 0: self.fatal_error("No cameras found!") # Top tool-bar self.oc_toolbar = QtWidgets.QToolBar("Video source selector") self.oc_toolbar.setMovable(False) lbl = QtWidgets.QLabel("Select video source:") self.oc_toolbar.addWidget(lbl) camera_selector = QtWidgets.QComboBox() camera_selector.addItems([ "[ %i ] %s" % (i_idx, oc_cam.description()) for i_idx, oc_cam in enumerate(self.l_cameras)]) camera_selector.currentIndexChanged.connect( self.start_preview ) self.oc_toolbar.addWidget(camera_selector) self.oc_toolbar.layout().setSpacing(5) self.oc_toolbar.layout().setContentsMargins(5, 5, 5, 5) self.addToolBar(self.oc_toolbar) # Central part (video frame) self.oc_viewfinder = QCameraViewfinder() self.setCentralWidget(self.oc_viewfinder) # Bottom status bar self.status = QtWidgets.QStatusBar() self.setStatusBar(self.status) self.setWindowTitle("CamView") self.start_preview(0)
def showCamera(self): self.finder = QCameraViewfinder() self.finder.show() self.camera = QCamera() self.camera.setViewfinder(self.finder) self.camera.setCaptureMode(QCamera.CaptureStillImage) # self.camera.error.connect(lambda: self.alert(self.camera.errorString())) self.camera.start() self.capture = QCameraImageCapture(self.camera) # self.capture.error.connect(lambda i, e, s: self.alert(s)) self.capture.imageCaptured.connect( lambda d, i: self.status.showMessage("Image %04d captured" % self. save_seq)) self.save_seq = 0
def __init__(self): QMainWindow.__init__(self) if len(QCameraInfo.availableCameras()) == 0: QMessageBox.warning( self, 'Camera not found', 'You don\'t have any cameras on your computer so you can\'t use this app...\nBuy a new camera (╯°^°)╯┻━┻', QMessageBox.Ok) exit(-1) self.central_widget = QWidget(self) self.main_grid = QGridLayout(self.central_widget) self.option_group = QGroupBox(None) self.group_grid = QGridLayout(self.option_group) self.addr_msg = QLabel('Database addr') self.camera_msg = QLabel('Camera') self.camera_combo = QComboBox() self.addr_edit = QLineEdit() self.camera_place = QGroupBox(None) self.auth_btn = QPushButton('Log in') self.camera_grid = QGridLayout(self.camera_place) self.camera_widget = QCameraViewfinder() self.camera_obj = QCamera(QCameraInfo.defaultCamera()) self.veg_cfg = Config()
def __init__(self, parent=QObject()): super(Camera, self).__init__(parent) # chooses the system default camera self.cam = QCamera() self.caminfo = QCameraInfo(self.cam) self.camvfind = QCameraViewfinder() self.camvfindset = QCameraViewfinderSettings() self.recorder = QMediaRecorder(self.cam)
class Ui_SelectableCameraView(object): def setupUi(self, SelectableCameraView): SelectableCameraView.setObjectName("SelectableCameraView") SelectableCameraView.resize(435, 283) font = QtGui.QFont() font.setPointSize(9) SelectableCameraView.setFont(font) SelectableCameraView.setStyleSheet("") self.verticalLayout = QtWidgets.QVBoxLayout(SelectableCameraView) self.verticalLayout.setObjectName("verticalLayout") self.camera_view = QCameraViewfinder(SelectableCameraView) self.camera_view.setStyleSheet("border: 2px solid #aaaaaa;\n" "border-radius: 20px;\n" "margin: 0;") self.camera_view.setObjectName("camera_view") self.verticalLayout.addWidget(self.camera_view) self.horizontalWidget = QtWidgets.QWidget(SelectableCameraView) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.horizontalWidget.sizePolicy().hasHeightForWidth()) self.horizontalWidget.setSizePolicy(sizePolicy) self.horizontalWidget.setObjectName("horizontalWidget") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.horizontalWidget) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.checkBox = QtWidgets.QCheckBox(self.horizontalWidget) self.checkBox.setText("") self.checkBox.setObjectName("checkBox") self.horizontalLayout_2.addWidget(self.checkBox) self.camera_device_name = QtWidgets.QLabel(self.horizontalWidget) self.camera_device_name.setObjectName("camera_device_name") self.horizontalLayout_2.addWidget(self.camera_device_name) self.verticalLayout.addWidget(self.horizontalWidget) self.retranslateUi(SelectableCameraView) QtCore.QMetaObject.connectSlotsByName(SelectableCameraView) def retranslateUi(self, SelectableCameraView): _translate = QtCore.QCoreApplication.translate SelectableCameraView.setWindowTitle( _translate("SelectableCameraView", "Form")) self.camera_device_name.setText( _translate("SelectableCameraView", "TextLabel"))
def __init__(self): super(MainWindow, self).__init__() self.cameraInfo = QCameraInfo.defaultCamera() self.camera = QCamera(self.cameraInfo) self.camera.setCaptureMode(QCamera.CaptureStillImage) self.imageCapture = QCameraImageCapture(self.camera) self.imageCapture.imageCaptured.connect(self.imageCaptured) self.imageCapture.imageSaved.connect(self.imageSaved) self.currentPreview = QImage() toolBar = QToolBar() self.addToolBar(toolBar) fileMenu = self.menuBar().addMenu("&File") shutterIcon = QIcon("/Users/thethelafaltein/PycharmProjects/ResNetApplication/res/img/shutter.svg") self.takePictureAction = QAction(shutterIcon, "&Take Picture", self, shortcut="Ctrl+T", triggered=self.takePicture) self.takePictureAction.setToolTip("Take Picture") fileMenu.addAction(self.takePictureAction) toolBar.addAction(self.takePictureAction) exitAction = QAction(QIcon.fromTheme("application-exit"), "E&xit", self, shortcut="Ctrl+Q", triggered=self.close) fileMenu.addAction(exitAction) aboutMenu = self.menuBar().addMenu("&About") aboutQtAction = QAction("About &Qt", self, triggered=qApp.aboutQt) aboutMenu.addAction(aboutQtAction) self.tabWidget = QTabWidget() self.setCentralWidget(self.tabWidget) self.cameraViewfinder = QCameraViewfinder() self.camera.setViewfinder(self.cameraViewfinder) self.tabWidget.addTab(self.cameraViewfinder, "Viewfinder") if self.camera.status() != QCamera.UnavailableStatus: name = self.cameraInfo.description() self.setWindowTitle("PySide2 Camera Example (" + name + ")") self.statusBar().showMessage("Starting: '" + name + "'", 5000) self.camera.start() else: self.setWindowTitle("Object classifier") self.takePictureAction.setEnabled(False) self.statusBar().showMessage("Camera unavailable", 5000)
class mainApp(QMainWindow): def __init__(self): super(mainApp, self).__init__() self.resize(600, 400) self.mainUI() self.setCentralWidget(self.widget) def mainUI(self): self.pushButton = QPushButton("Camera") layout = QVBoxLayout() layout.addWidget(self.pushButton) self.widget = QWidget() self.widget.setLayout(layout) self.pushButton.clicked.connect(self.showCamera) def showCamera(self): self.finder = QCameraViewfinder() self.finder.show() self.camera = QCamera() self.camera.setViewfinder(self.finder) self.camera.start() self.camera.stop()
class MyApp(QMainWindow): def __init__(self): super(MyApp, self).__init__() uic.loadUi("interface/camera.ui", self) self.setWindowTitle("Python Webcam Application") self.setWindowIcon(QIcon("images/camera.png")) self.status = QStatusBar() self.setStatusBar(self.status) self.showCamera() self.verticalLayout.addWidget(self.finder) self.verticalLayout.addWidget(self.btnCamera) self.btnCamera.clicked.connect(self.savePictures) def showCamera(self): self.finder = QCameraViewfinder() self.finder.show() self.camera = QCamera() self.camera.setViewfinder(self.finder) self.camera.setCaptureMode(QCamera.CaptureStillImage) # self.camera.error.connect(lambda: self.alert(self.camera.errorString())) self.camera.start() self.capture = QCameraImageCapture(self.camera) # self.capture.error.connect(lambda i, e, s: self.alert(s)) self.capture.imageCaptured.connect( lambda d, i: self.status.showMessage("Image %04d captured" % self. save_seq)) self.save_seq = 0 def savePictures(self): timestamp = time.strftime("%b-%Y-%H_%M_%S") self.capture.capture( os.path.join("D:\\", "%s-%s.jpg" % (self.save_seq, timestamp))) self.save_seq += 1
def setupUi(self, Camera): Camera.setObjectName("Camera") Camera.resize(668, 422) self.centralwidget = QtWidgets.QWidget(Camera) self.centralwidget.setObjectName("centralwidget") self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_3.setObjectName("gridLayout_3") self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth()) self.stackedWidget.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.stackedWidget.setPalette(palette) self.stackedWidget.setObjectName("stackedWidget") self.viewfinderPage = QtWidgets.QWidget() self.viewfinderPage.setObjectName("viewfinderPage") self.gridLayout_5 = QtWidgets.QGridLayout(self.viewfinderPage) self.gridLayout_5.setObjectName("gridLayout_5") self.viewfinder = QCameraViewfinder(self.viewfinderPage) self.viewfinder.setObjectName("viewfinder") self.gridLayout_5.addWidget(self.viewfinder, 0, 0, 1, 1) self.stackedWidget.addWidget(self.viewfinderPage) self.previewPage = QtWidgets.QWidget() self.previewPage.setObjectName("previewPage") self.gridLayout_4 = QtWidgets.QGridLayout(self.previewPage) self.gridLayout_4.setObjectName("gridLayout_4") self.lastImagePreviewLabel = QtWidgets.QLabel(self.previewPage) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lastImagePreviewLabel.sizePolicy().hasHeightForWidth()) self.lastImagePreviewLabel.setSizePolicy(sizePolicy) self.lastImagePreviewLabel.setFrameShape(QtWidgets.QFrame.Box) self.lastImagePreviewLabel.setText("") self.lastImagePreviewLabel.setObjectName("lastImagePreviewLabel") self.gridLayout_4.addWidget(self.lastImagePreviewLabel, 0, 0, 1, 1) self.stackedWidget.addWidget(self.previewPage) self.gridLayout_3.addWidget(self.stackedWidget, 0, 0, 3, 1) self.lockButton = QtWidgets.QPushButton(self.centralwidget) self.lockButton.setObjectName("lockButton") self.gridLayout_3.addWidget(self.lockButton, 1, 1, 1, 2) self.captureWidget = QtWidgets.QTabWidget(self.centralwidget) self.captureWidget.setObjectName("captureWidget") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.gridLayout = QtWidgets.QGridLayout(self.tab_2) self.gridLayout.setObjectName("gridLayout") self.takeImageButton = QtWidgets.QPushButton(self.tab_2) self.takeImageButton.setObjectName("takeImageButton") self.gridLayout.addWidget(self.takeImageButton, 0, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(20, 161, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) self.label = QtWidgets.QLabel(self.tab_2) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 2, 0, 1, 1) self.exposureCompensation = QtWidgets.QSlider(self.tab_2) self.exposureCompensation.setMinimum(-4) self.exposureCompensation.setMaximum(4) self.exposureCompensation.setPageStep(2) self.exposureCompensation.setOrientation(QtCore.Qt.Horizontal) self.exposureCompensation.setTickPosition(QtWidgets.QSlider.TicksAbove) self.exposureCompensation.setObjectName("exposureCompensation") self.gridLayout.addWidget(self.exposureCompensation, 3, 0, 1, 1) self.captureWidget.addTab(self.tab_2, "") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.gridLayout_2 = QtWidgets.QGridLayout(self.tab) self.gridLayout_2.setObjectName("gridLayout_2") self.recordButton = QtWidgets.QPushButton(self.tab) self.recordButton.setObjectName("recordButton") self.gridLayout_2.addWidget(self.recordButton, 0, 0, 1, 1) self.pauseButton = QtWidgets.QPushButton(self.tab) self.pauseButton.setObjectName("pauseButton") self.gridLayout_2.addWidget(self.pauseButton, 1, 0, 1, 1) self.stopButton = QtWidgets.QPushButton(self.tab) self.stopButton.setObjectName("stopButton") self.gridLayout_2.addWidget(self.stopButton, 2, 0, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(20, 76, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout_2.addItem(spacerItem1, 3, 0, 1, 1) self.muteButton = QtWidgets.QPushButton(self.tab) self.muteButton.setCheckable(True) self.muteButton.setObjectName("muteButton") self.gridLayout_2.addWidget(self.muteButton, 4, 0, 1, 1) self.captureWidget.addTab(self.tab, "") self.gridLayout_3.addWidget(self.captureWidget, 2, 1, 1, 2) Camera.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(Camera) self.menubar.setGeometry(QtCore.QRect(0, 0, 668, 29)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuDevices = QtWidgets.QMenu(self.menubar) self.menuDevices.setObjectName("menuDevices") Camera.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(Camera) self.statusbar.setObjectName("statusbar") Camera.setStatusBar(self.statusbar) self.actionExit = QtWidgets.QAction(Camera) self.actionExit.setObjectName("actionExit") self.actionStartCamera = QtWidgets.QAction(Camera) self.actionStartCamera.setObjectName("actionStartCamera") self.actionStopCamera = QtWidgets.QAction(Camera) self.actionStopCamera.setObjectName("actionStopCamera") self.actionSettings = QtWidgets.QAction(Camera) self.actionSettings.setObjectName("actionSettings") self.menuFile.addAction(self.actionStartCamera) self.menuFile.addAction(self.actionStopCamera) self.menuFile.addSeparator() self.menuFile.addAction(self.actionSettings) self.menuFile.addSeparator() self.menuFile.addAction(self.actionExit) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuDevices.menuAction()) self.retranslateUi(Camera) self.stackedWidget.setCurrentIndex(0) self.captureWidget.setCurrentIndex(0) self.recordButton.clicked.connect(Camera.record) self.stopButton.clicked.connect(Camera.stop) self.pauseButton.clicked.connect(Camera.pause) self.actionExit.triggered.connect(Camera.close) self.takeImageButton.clicked.connect(Camera.takeImage) self.lockButton.clicked.connect(Camera.toggleLock) self.muteButton.toggled["bool"].connect(Camera.setMuted) self.exposureCompensation.valueChanged["int"].connect(Camera.setExposureCompensation) self.actionSettings.triggered.connect(Camera.configureCaptureSettings) self.actionStartCamera.triggered.connect(Camera.startCamera) self.actionStopCamera.triggered.connect(Camera.stopCamera) QtCore.QMetaObject.connectSlotsByName(Camera)
def setupUi(self, mainWidget): mainWidget.setObjectName("mainWidget") mainWidget.resize(972, 548) self.gridLayout = QtWidgets.QGridLayout(mainWidget) self.gridLayout.setContentsMargins(0, 0, 0, 0) self.gridLayout.setSpacing(0) self.gridLayout.setObjectName("gridLayout") self.verticalLayout_2 = QtWidgets.QVBoxLayout() self.verticalLayout_2.setSpacing(0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.frame = QtWidgets.QFrame(mainWidget) self.frame.setMinimumSize(QtCore.QSize(0, 60)) self.frame.setMaximumSize(QtCore.QSize(976, 16777215)) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.frame) self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) self.horizontalLayout_4.setSpacing(20) self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setSizeConstraint( QtWidgets.QLayout.SetFixedSize) self.horizontalLayout_3.setContentsMargins(20, -1, -1, -1) self.horizontalLayout_3.setSpacing(7) self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.label_logo = QtWidgets.QLabel(self.frame) self.label_logo.setMinimumSize(QtCore.QSize(30, 30)) self.label_logo.setMaximumSize(QtCore.QSize(30, 30)) self.label_logo.setText("") self.label_logo.setObjectName("label_logo") self.horizontalLayout_3.addWidget(self.label_logo) self.label_title = QtWidgets.QLabel(self.frame) self.label_title.setMinimumSize(QtCore.QSize(50, 50)) self.label_title.setMaximumSize(QtCore.QSize(50, 50)) self.label_title.setText("") self.label_title.setObjectName("label_title") self.horizontalLayout_3.addWidget(self.label_title) self.horizontalLayout_4.addLayout(self.horizontalLayout_3) spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem) self.comboBox_choose = QtWidgets.QComboBox(self.frame) self.comboBox_choose.setMinimumSize(QtCore.QSize(250, 30)) self.comboBox_choose.setObjectName("comboBox_choose") self.horizontalLayout_4.addWidget(self.comboBox_choose) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_4.addItem(spacerItem1) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setContentsMargins(-1, -1, 20, -1) self.horizontalLayout_2.setSpacing(20) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.btn_login = QtWidgets.QPushButton(self.frame) self.btn_login.setMaximumSize(QtCore.QSize(25, 25)) self.btn_login.setText("") self.btn_login.setObjectName("btn_login") self.horizontalLayout_2.addWidget(self.btn_login) self.btn_setting = QtWidgets.QPushButton(self.frame) self.btn_setting.setMaximumSize(QtCore.QSize(25, 25)) self.btn_setting.setText("") self.btn_setting.setObjectName("btn_setting") self.horizontalLayout_2.addWidget(self.btn_setting) self.btn_min = QtWidgets.QPushButton(self.frame) self.btn_min.setMaximumSize(QtCore.QSize(13, 13)) self.btn_min.setText("") self.btn_min.setObjectName("btn_min") self.horizontalLayout_2.addWidget(self.btn_min) self.btn_close = QtWidgets.QPushButton(self.frame) self.btn_close.setMaximumSize(QtCore.QSize(13, 13)) self.btn_close.setText("") self.btn_close.setObjectName("btn_close") self.horizontalLayout_2.addWidget(self.btn_close) self.horizontalLayout_4.addLayout(self.horizontalLayout_2) self.verticalLayout_2.addWidget(self.frame) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setSpacing(10) self.horizontalLayout.setObjectName("horizontalLayout") self.cameraShow = QCameraViewfinder(mainWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.cameraShow.sizePolicy().hasHeightForWidth()) self.cameraShow.setSizePolicy(sizePolicy) self.cameraShow.setMinimumSize(QtCore.QSize(640, 480)) self.cameraShow.setMaximumSize(QtCore.QSize(640, 480)) self.cameraShow.setLayoutDirection(QtCore.Qt.LeftToRight) self.cameraShow.setObjectName("cameraShow") self.horizontalLayout.addWidget(self.cameraShow) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setSizeConstraint( QtWidgets.QLayout.SetDefaultConstraint) self.verticalLayout.setContentsMargins(-1, -1, -1, 0) self.verticalLayout.setSpacing(5) self.verticalLayout.setObjectName("verticalLayout") self.caputurePhoto = QtWidgets.QLabel(mainWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.caputurePhoto.sizePolicy().hasHeightForWidth()) self.caputurePhoto.setSizePolicy(sizePolicy) self.caputurePhoto.setMinimumSize(QtCore.QSize(320, 240)) self.caputurePhoto.setMaximumSize(QtCore.QSize(320, 240)) self.caputurePhoto.setText("") self.caputurePhoto.setObjectName("caputurePhoto") self.verticalLayout.addWidget(self.caputurePhoto) self.ocrInfo = QtWidgets.QTextEdit(mainWidget) self.ocrInfo.setMinimumSize(QtCore.QSize(320, 170)) self.ocrInfo.setMaximumSize(QtCore.QSize(320, 170)) self.ocrInfo.setReadOnly(True) self.ocrInfo.setObjectName("ocrInfo") self.verticalLayout.addWidget(self.ocrInfo) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setContentsMargins(10, -1, 10, -1) self.horizontalLayout_5.setSpacing(15) self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.captureBtn = QtWidgets.QPushButton(mainWidget) self.captureBtn.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.captureBtn.setObjectName("captureBtn") self.horizontalLayout_5.addWidget(self.captureBtn) self.checkBox_cam = QtWidgets.QCheckBox(mainWidget) self.checkBox_cam.setMaximumSize(QtCore.QSize(16777215, 16777215)) self.checkBox_cam.setObjectName("checkBox_cam") self.horizontalLayout_5.addWidget(self.checkBox_cam) self.verticalLayout.addLayout(self.horizontalLayout_5) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2.addLayout(self.horizontalLayout) self.gridLayout.addLayout(self.verticalLayout_2, 0, 0, 1, 1) self.retranslateUi(mainWidget) QtCore.QMetaObject.connectSlotsByName(mainWidget)
class _CameraWidget(QWidget): imagecaptured = pyqtSignal(QPixmap) cancel = pyqtSignal() def __init__(self, parent=None): super(_CameraWidget, self).__init__(parent) self.setLayout(QGridLayout()) self.toolbar = QToolBar() spacer = QWidget() spacer.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) self.toolbar.setIconSize(QSize(48, 48)) self.toolbar.addWidget(spacer) self.swapaction = self.toolbar.addAction(QIcon(":/widgets/cameraswap"), "Swap Camera") self.swapaction.triggered.connect(self.swapcamera) self.current_camera_index = 0 self.camera = None self.viewfinder = QCameraViewfinder() self.viewfinder.mousePressEvent = self.capture self.viewfinder.setAspectRatioMode(Qt.KeepAspectRatioByExpanding) self.update_camera_buttons() self.capturebutton = QPushButton("Capture", self) self.capturebutton.pressed.connect(self.capture) self.actionCancel = self.toolbar.addAction(QIcon(":/icons/cancel"), "Cancel") self.actionCancel.triggered.connect(self._cancel) self.layout().setContentsMargins(0, 0, 0, 0) self.layout().addWidget(self.toolbar) self.layout().addWidget(self.viewfinder) self.layout().addWidget(self.capturebutton) self.viewfinder.show() def __del__(self): if self.camera: self.camera.unload() def _cancel(self): if self.camera: self.camera.unload() self.cancel.emit() @property def list_of_cameras(self): return QCameraInfo.availableCameras() def update_camera_buttons(self): if len(self.list_of_cameras) <= 1: self.swapaction.setVisible(False) def capture(self, *args): self.camera.searchAndLock() self.camera_capture.capture() self.camera.unlock() def swapcamera(self): cameras = QCameraInfo.availableCameras() if self.current_camera_index + 1 == len(cameras): self.current_camera_index = 0 else: self.current_camera_index += 1 self.start(self.current_camera_index) @property def camera_res(self): width, height = tuple(roam.config.settings['camera_res'].split(',')) return width, height def imageCaptured(self, frameid, image): # TODO Doing a pixmap convert here is a waste but downstream needs a qpixmap for now # refactor later if self.camera: self.camera.unload() self.imagecaptured.emit(QPixmap.fromImage(image)) def start(self, dev=1): if self.camera: self.camera.unload() cameras = QCameraInfo.availableCameras() self.camera = QCamera(cameras[dev]) self.camera.setViewfinder(self.viewfinder) self.camera.setCaptureMode(QCamera.CaptureStillImage) self.camera.start() self.camera_capture = QCameraImageCapture(self.camera) self.camera_capture.setCaptureDestination( QCameraImageCapture.CaptureToBuffer) self.camera_capture.imageCaptured.connect(self.imageCaptured)
def setupUi(self, Camera): Camera.setObjectName("Camera") Camera.resize(668, 422) self.centralwidget = QtWidgets.QWidget(Camera) self.centralwidget.setObjectName("centralwidget") self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_3.setObjectName("gridLayout_3") self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth()) self.stackedWidget.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.stackedWidget.setPalette(palette) self.stackedWidget.setObjectName("stackedWidget") self.viewfinderPage = QtWidgets.QWidget() self.viewfinderPage.setObjectName("viewfinderPage") self.gridLayout_5 = QtWidgets.QGridLayout(self.viewfinderPage) self.gridLayout_5.setObjectName("gridLayout_5") self.viewfinder = QCameraViewfinder(self.viewfinderPage) self.viewfinder.setObjectName("viewfinder") self.gridLayout_5.addWidget(self.viewfinder, 0, 0, 1, 1) self.stackedWidget.addWidget(self.viewfinderPage) self.previewPage = QtWidgets.QWidget() self.previewPage.setObjectName("previewPage") self.gridLayout_4 = QtWidgets.QGridLayout(self.previewPage) self.gridLayout_4.setObjectName("gridLayout_4") self.lastImagePreviewLabel = QtWidgets.QLabel(self.previewPage) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lastImagePreviewLabel.sizePolicy().hasHeightForWidth()) self.lastImagePreviewLabel.setSizePolicy(sizePolicy) self.lastImagePreviewLabel.setFrameShape(QtWidgets.QFrame.Box) self.lastImagePreviewLabel.setText("") self.lastImagePreviewLabel.setObjectName("lastImagePreviewLabel") self.gridLayout_4.addWidget(self.lastImagePreviewLabel, 0, 0, 1, 1) self.stackedWidget.addWidget(self.previewPage) self.gridLayout_3.addWidget(self.stackedWidget, 0, 0, 3, 1) self.lockButton = QtWidgets.QPushButton(self.centralwidget) self.lockButton.setObjectName("lockButton") self.gridLayout_3.addWidget(self.lockButton, 1, 1, 1, 2) self.captureWidget = QtWidgets.QTabWidget(self.centralwidget) self.captureWidget.setObjectName("captureWidget") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.gridLayout = QtWidgets.QGridLayout(self.tab_2) self.gridLayout.setObjectName("gridLayout") self.takeImageButton = QtWidgets.QPushButton(self.tab_2) self.takeImageButton.setObjectName("takeImageButton") self.gridLayout.addWidget(self.takeImageButton, 0, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(20, 161, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout.addItem(spacerItem, 1, 0, 1, 1) self.label = QtWidgets.QLabel(self.tab_2) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 2, 0, 1, 1) self.exposureCompensation = QtWidgets.QSlider(self.tab_2) self.exposureCompensation.setMinimum(-4) self.exposureCompensation.setMaximum(4) self.exposureCompensation.setPageStep(2) self.exposureCompensation.setOrientation(QtCore.Qt.Horizontal) self.exposureCompensation.setTickPosition(QtWidgets.QSlider.TicksAbove) self.exposureCompensation.setObjectName("exposureCompensation") self.gridLayout.addWidget(self.exposureCompensation, 3, 0, 1, 1) self.captureWidget.addTab(self.tab_2, "") self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.gridLayout_2 = QtWidgets.QGridLayout(self.tab) self.gridLayout_2.setObjectName("gridLayout_2") self.recordButton = QtWidgets.QPushButton(self.tab) self.recordButton.setObjectName("recordButton") self.gridLayout_2.addWidget(self.recordButton, 0, 0, 1, 1) self.pauseButton = QtWidgets.QPushButton(self.tab) self.pauseButton.setObjectName("pauseButton") self.gridLayout_2.addWidget(self.pauseButton, 1, 0, 1, 1) self.stopButton = QtWidgets.QPushButton(self.tab) self.stopButton.setObjectName("stopButton") self.gridLayout_2.addWidget(self.stopButton, 2, 0, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(20, 76, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) self.gridLayout_2.addItem(spacerItem1, 3, 0, 1, 1) self.muteButton = QtWidgets.QPushButton(self.tab) self.muteButton.setCheckable(True) self.muteButton.setObjectName("muteButton") self.gridLayout_2.addWidget(self.muteButton, 4, 0, 1, 1) self.captureWidget.addTab(self.tab, "") self.gridLayout_3.addWidget(self.captureWidget, 2, 1, 1, 2) Camera.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(Camera) self.menubar.setGeometry(QtCore.QRect(0, 0, 668, 29)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuDevices = QtWidgets.QMenu(self.menubar) self.menuDevices.setObjectName("menuDevices") Camera.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(Camera) self.statusbar.setObjectName("statusbar") Camera.setStatusBar(self.statusbar) self.actionExit = QtWidgets.QAction(Camera) self.actionExit.setObjectName("actionExit") self.actionStartCamera = QtWidgets.QAction(Camera) self.actionStartCamera.setObjectName("actionStartCamera") self.actionStopCamera = QtWidgets.QAction(Camera) self.actionStopCamera.setObjectName("actionStopCamera") self.actionSettings = QtWidgets.QAction(Camera) self.actionSettings.setObjectName("actionSettings") self.menuFile.addAction(self.actionStartCamera) self.menuFile.addAction(self.actionStopCamera) self.menuFile.addSeparator() self.menuFile.addAction(self.actionSettings) self.menuFile.addSeparator() self.menuFile.addAction(self.actionExit) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuDevices.menuAction()) self.retranslateUi(Camera) self.stackedWidget.setCurrentIndex(0) self.captureWidget.setCurrentIndex(0) self.recordButton.clicked.connect(Camera.record) self.stopButton.clicked.connect(Camera.stop) self.pauseButton.clicked.connect(Camera.pause) self.actionExit.triggered.connect(Camera.close) self.takeImageButton.clicked.connect(Camera.takeImage) self.lockButton.clicked.connect(Camera.toggleLock) self.muteButton.toggled['bool'].connect(Camera.setMuted) self.exposureCompensation.valueChanged['int'].connect(Camera.setExposureCompensation) self.actionSettings.triggered.connect(Camera.configureCaptureSettings) self.actionStartCamera.triggered.connect(Camera.startCamera) self.actionStopCamera.triggered.connect(Camera.stopCamera) QtCore.QMetaObject.connectSlotsByName(Camera)
class MyWindow(Window, Form): __slots__ = [ # widgets 'cameraViewfinder', 'statCanvas0', 'statCanvas1', 'statCanvas2', # commons 'threadpool', # camera 'camera', 'capture', 'capture_timer', # photo 'photo_timestamp', 'photo_pixmap', # setting 'warn_notifier', 'warn_notifier_timer', 'stat_notifier', 'stat_notifier_timer', ] def __init__(self): super().__init__() self.setupUi(self) # widgets self.cameraViewfinder = QCameraViewfinder(self.cameraWidget) self.cameraViewfinder.setGeometry(QRect(-1, 52, 641, 481)) self.cameraViewfinder.setObjectName('cameraViewfinder') self.statCanvas0 = StatCanvas(self.statWidget0, 'statCanvas0', 640, 480) self.statCanvas1 = StatCanvas(self.statWidget1, 'statCanvas1', 640, 480) self.statCanvas2 = StatCanvas(self.statWidget2, 'statCanvas2', 640, 480) # common self.threadpool = QThreadPool() # camera self.camera = None self.capture = None self.init_camera_and_capture() self.capture_timer = self.create_timer(5_000, self.capture_safe) # photo self.photo_timestamp = None self.photo_pixmap = QPixmap() # setting self.warn_notifier = Notifier(['확인', '무시']) self.warn_notifier_timer = self.create_timer(60_000, self.notify_warn_if_bad) self.stat_notifier = Notifier(['확인', '무시']) self.stat_notifier_timer = self.create_timer( self.get_setting_stat_interval(), self.notify_stat) # connect: camera self.cameraButton.toggled.connect( lambda toggle: self.cameraButton.setText('정지' if toggle else '시작')) self.cameraButton.toggled.connect(self.toggle_all_timers) # connect: stat, photo self.statTabWidget.tabBarClicked.connect(self.load_stat) self.tabWidget.tabBarClicked.connect(lambda index: self.load_photo( ) if index == 1 else self.load_stat(self.statTabWidget.currentIndex()) if index == 2 else None) self.photoLeftButton.clicked.connect( lambda: self.load_photo(left=True)) self.photoRightButton.clicked.connect( lambda: self.load_photo(right=True)) # connect: setting self.settingWarnButton.toggled.connect(self.toggle_warn_timer) self.connect_setting_stat_cycle_selected(self.settingStatCycleOff) self.connect_setting_stat_cycle_selected(self.settingStatCycle1) self.connect_setting_stat_cycle_selected(self.settingStatCycle2) self.connect_setting_stat_cycle_selected(self.settingStatCycle3) self.connect_setting_stat_cycle_selected(self.settingStatCycle6) self.settingStatTestButton.pressed.connect( lambda: self.settingStatTestButton.setIcon( QIcon('resource/test_off.png'))) self.settingStatTestButton.released.connect( lambda: self.settingStatTestButton.setIcon( QIcon('resource/test_on.png'))) self.settingStatTestButton.clicked.connect(self.notify_stat) def connect_setting_stat_cycle_selected(self, cycle: QPushButton) -> None: def selected(toggle: bool) -> None: checkeds = [x for x in others if x.isChecked()] if not checkeds: cycle.setChecked(True) elif toggle: checkeds[0].setChecked(False) self.toggle_stat_timer(cycle is not self.settingStatCycleOff) others: List[QPushButton] = [ self.settingStatCycle1, self.settingStatCycle2, self.settingStatCycle3, self.settingStatCycle6, self.settingStatCycleOff, ] others.remove(cycle) cycle.toggled.connect(selected) def init_camera_and_capture(self) -> bool: available_cameras = QCameraInfo.availableCameras() if not available_cameras: return False self.camera = self.create_camera(available_cameras, 0, self.cameraViewfinder, self.error_camera) self.capture = self.create_capture(self.camera, self.process_image_on_threadpool, self.error_camera) if self.camera.isAvailable(): self.camera.start() return True def check_camera(self) -> bool: if (self.camera is None or not self.camera.isAvailable() ) and not self.init_camera_and_capture(): return False if not self.capture.isReadyForCapture(): self.camera.start() return True def start_capture_timer_safe(self) -> None: if self.check_camera(): self.capture_timer.start() else: self.error_camera() def capture_safe(self) -> None: if self.check_camera(): self.capture.capture() else: self.error_camera() def error_camera(self, *args) -> None: self.cameraButton.setChecked(False) def get_setting_stat_interval(self) -> int: cycles: List[QPushButton] = [ self.settingStatCycle1, self.settingStatCycle2, self.settingStatCycle3, self.settingStatCycle6, ] checkeds = [x for x in cycles if x.isChecked()] text = checkeds[0].objectName().replace('settingStatCycle', '', 1) if checkeds else 1 msec = int(text) * 3_600_000 return msec def process_image_on_threadpool(self, id: int, qimg: QImage) -> None: def display_result(record: RecordType) -> None: if record['success']: self.display_ihunch_status(self.cameraStatusBar, record['human'], record['ihunch']) worker = Worker(upload_image_save_record, qimg) worker.signals.result.connect(display_result) self.threadpool.start(worker) def load_stat(self, index: int = 0) -> None: statCanvas = getattr(self, f'statCanvas{index}') if index == 0: statCanvas.plot_today_vs_yesterday() elif index == 1: statCanvas.plot_week_to_day() else: statCanvas.plot_week_to_percent() statCanvas.draw() def load_photo(self, left=False, right=False) -> None: beg, end = None, None index = -1 if left: end = self.photo_timestamp elif right: beg = self.photo_timestamp index = 0 records = RecordsDriver.load(beg, end) if records: record = records[index] timestamp = record['timestamp'] self.photo_timestamp = datetime.strptime(timestamp, DATETIME_FORMAT) self.photo_pixmap.load(str(PHOTOS_DIR / f'{timestamp}.jpg')) self.photoImage.setPixmap(self.photo_pixmap) self.display_ihunch_status(self.photoStatusBar, record['human'], record['ihunch']) def toggle_all_timers(self, toggle: bool) -> None: if toggle: self.start_capture_timer_safe() else: self.capture_timer.stop() self.toggle_warn_timer(toggle) self.toggle_stat_timer(toggle) def toggle_warn_timer(self, toggle: bool) -> None: if toggle and self.cameraButton.isChecked(): self.warn_notifier_timer.start() else: self.warn_notifier_timer.stop() def toggle_stat_timer(self, toggle: bool) -> None: if toggle and self.cameraButton.isChecked(): self.stat_notifier_timer.setInterval( self.get_setting_stat_interval()) self.stat_notifier_timer.start() else: self.stat_notifier_timer.stop() def notify_warn_if_bad(self) -> None: minutes = 5 beg = datetime.now() - timedelta(minutes=minutes) records = RecordsDriver.load(beg) stats = [x['ihunch'] > 0.5 for x in records if x['human']] if not stats: return ihunch_percent = sum(stats) / len(stats) * 100 if ihunch_percent < 90: return self.warn_notifier.notify( '거북목 경고', f'최근 {minutes}분 중에 거북목 자세 비중이 {ihunch_percent:.2f}%를 차지합니다!', '거북목 탈출 넘버원', on_action=lambda nid, index: self.settingWarnButton.setChecked( False) if index == 1 else None) def notify_stat(self) -> None: hours = self.stat_notifier_timer.interval() // 3_600_000 beg = datetime.now() - timedelta(hours=hours) records = RecordsDriver.load(beg) stats = [x['ihunch'] > 0.5 for x in records if x['human']] if not stats: return ihunch_percent = sum(stats) / len(stats) * 100 self.stat_notifier.notify( '최근 거북목 통계', f'최근 {hours}시간 중에 거북목 자세 비중이 {ihunch_percent:.2f}%를 차지했습니다.', '거북목 탈출 넘버원', on_action=lambda nid, index: self.settingStatCycleOff.setChecked( True) if index == 1 else None) @staticmethod def create_camera(cameras: list, index: int, viewfinder: QCameraViewfinder, error: Callable) -> QCamera: camera = QCamera(cameras[index]) camera.setViewfinder(viewfinder) camera.setCaptureMode(QCamera.CaptureStillImage) camera.error.connect(error) return camera @staticmethod def create_capture(camera: QCamera, callback: Callable, error: Callable) -> QCameraImageCapture: capture = QCameraImageCapture(camera) capture.setCaptureDestination(QCameraImageCapture.CaptureToBuffer) capture.imageCaptured.connect(callback) capture.error.connect(error) return capture @staticmethod def create_timer(interval: int, callback: Callable) -> QTimer: timer = QTimer() timer.setInterval(interval) timer.timeout.connect(callback) return timer @staticmethod def display_ihunch_status(statusbar: QLabel, human: bool, ihunch: float) -> None: if human: if ihunch > 0.5: text, color = '거북목', 'FF0000' else: text, color = '정상', '23F200' text += f' ({ihunch:.4f})' else: text, color = '자리비움', 'FF971E' statusbar.setText(text) statusbar.setAlignment(Qt.AlignCenter) statusbar.setStyleSheet(f'color: #{color};')
class CameraMainWindow(QMainWindow): def __init__(self): super().__init__() uic.loadUi('MainWin.ui', self) self.setWindowTitle('CamPaint') self.setWindowIcon(QIcon('main_icon.ico')) self.setCentralWidget(self.tabWidget) # Загружаем камеру, холст, sql файл и задаем цвета кнопок self.load_cam() self.load_painter() self.load_sql() self.load_colors() def load_cam(self): self.cam_page.setLayout(self.cam_page_lay) self.error_cam.hide() self.camera = QCameraInfo.defaultCamera() # Проверяем, что камера сущетсвует # Если нет, то переключаемся на вторую вкладку if self.camera.isNull(): dialog = QErrorMessage() dialog.setWindowTitle('Warning') dialog.showMessage( 'Not enough cameras, the app will only be available in drawing mode' ) dialog.exec() self.error_cam.show() self.cam_page.setEnabled(False) self.tabWidget.setCurrentIndex(1) # Если да, то на первую else: self.tabWidget.setCurrentIndex(0) self.camera = QCamera(self.camera) self.view_cam = QCameraViewfinder(self) self.view_cam.setMediaObject(self.camera) self.view_cam.setAutoFillBackground(True) self.camera.setViewfinder(self.view_cam) self.box_lay = QVBoxLayout(self) self.box_lay.addWidget(self.view_cam) self.scrolling.setLayout(self.box_lay) # Запускаем камеру self.camera.start() # Подвязываем кнопку к слоту со снимком self.bt_cam.clicked.connect(self.make_ph) # Можно зумить фотографию self.zoom.valueChanged.connect(self.zoom_pict) def make_ph(self): self.camera.setCaptureMode(QCamera.CaptureStillImage) self.capt = QCameraImageCapture(self.camera) # Останавливаем съемку self.camera.searchAndLock() # Вызываем диалог и иохранением файла dial = QFileDialog.getSaveFileName( self, 'Save file', '', 'Картинка (*.jpg);;Картинка (*.png);;Все файлы (*)')[0] if dial: self.capt.capture(dial) self.camera.unlock() def zoom_pict(self, value): # Вычисляем зум камеры по функции zoom=1.0 + value * 3 / 99 # 1.0 - обязательный параметр QCameraFocus.zoomTo(self.camera.focus(), 1.0 + value * 3 / 99, 1.0) def load_painter(self): # Загружаем холст self.paint_page.setLayout(self.paint_page_lay) # Текущий цвет - черный, ширина кисти - 10 self.now_col = QColor(0, 0, 0) self.now_width = 10 self.point_width.setValue(10) # Подвязываем кнопку с изменением ширины кисти к соответсвующему слоту self.point_width.valueChanged.connect(self.change_width) # Создаем холст как экземпляр класса Canvas из доп.модуля Canvas self.canvas = Canvas.Canvas(self.main_paint_widg) self.canvas.move(1, 1) self.canvas.resize(self.main_paint_widg.width() - 1, self.main_paint_widg.height() - 1) print(self.main_paint_widg.size(), self.canvas.size(), self.border_lab.size()) # Устанавливаем границы рамки self.border_lab.setStyleSheet( 'border-style: solid; border-width: 2px; border-color: black;') self.canvas.setStyleSheet('background-color: white;') # Устанавливаем сильный фокус для перехвата всех событий # клавиатуры и мыши self.setFocusPolicy(Qt.StrongFocus) # Подвязываем действия из меню к слотам self.actionSave.triggered.connect(self.save_file) self.actionSave_as.triggered.connect(self.save_as_file) self.actionOpen.triggered.connect(self.open_file) self.actionReference.triggered.connect(self.open_reference) # и кнопку очистки холста, а также задания цвета кисти self.bt_clear.clicked.connect(self.clear_canvas) self.bt_set_color.clicked.connect(self.set_color_with_bt) # Имя файла изначально не задано, файл не сохранен self.file_name = '' self.saved = False self.resizeEvent(QResizeEvent(self.size(), self.size())) def change_width(self, value): self.now_width = value def keyPressEvent(self, event): # Обрабатываем события клавитатуры if int(event.modifiers()) == Qt.CTRL and event.key() == Qt.Key_Z: # Функция 'назад', удаляем все объекты, которые нарисовали if self.canvas.obj: del self.canvas.obj[-1] self.canvas.update() elif int(event.modifiers()) == Qt.CTRL and event.key() == Qt.Key_S: # Функция 'сохранить', сохраняем файл, если есть изменения if self.canvas.obj: self.save_file() elif int(event.modifiers()) == Qt.CTRL and event.key() == Qt.Key_O: # Функция 'открыть', открываем файл self.open_file() elif int(event.modifiers()) == Qt.CTRL and event.key() == Qt.Key_H: # Функция 'справка', открываем справку self.open_reference() def resizeEvent(self, event): # При изменении размеров окна, устанавливаем соответствующие размеры холста и рамки self.canvas.resize(self.main_paint_widg.width() - 1, self.main_paint_widg.height() - 1) self.border_lab.resize(self.main_paint_widg.width(), self.main_paint_widg.height()) def save_as_file(self): # Сохранение файла как dial = \ QFileDialog.getSaveFileName(self, 'Save file as', '', 'Картинка (*.jpg);;Картинка (*.png);;Все файлы (*)')[ 0] if dial: # Захватываем изображжение с холста и сохраняем pixmap = QPixmap(self.canvas.grab()) pixmap.save(dial) # Сохраняем имя файла в переменной self.file_name, чтобы использовать в функции save_file # Очищаем нарисованные объекты, так как уже их сохранили self.file_name = dial self.saved = True self.canvas.obj = [] def save_file(self): # Если имя файла выбрано, просто сохраняем if self.file_name: pixmap = QPixmap(self.canvas.grab()) pixmap.save(self.file_name) self.saved = True self.canvas.obj = [] # В ином случае, сохраняем как else: self.save_as_file() def open_file(self): # Открываем новый файл dial = QFileDialog.getOpenFileName( self, 'Open file', '', 'Картинка (*.jpg);;Картинка (*.png);;Все файлы (*)')[0] if dial: # Если старый файл не сохранен, предлагаем сохранить его if self.canvas.obj and not self.saved: dial2 = Dialogs.Message() res = dial2.exec() if res == dial2.Save: self.save_file() if res == dial2.Cancel: pass # Сохраняем новое имя файла, вызываем функцию open_file в экземпляре холста self.file_name = dial self.canvas.obj = [] self.canvas.open_file() def open_reference(self): dial = Dialogs.Reference() dial.exec() def clear_canvas(self): # Очищаем нарисованные объекты self.canvas.obj.clear() self.canvas.update() def set_color(self, color): # Устанавливаем текущий цвет self.now_col = color red, green, blue = color.red(), color.green(), color.blue() # Подключаемся к базе данных в папке проекта # и добавляем его к любимым цветам пользователя con = sqlite3.connect('own_colors_db.db') cur = con.cursor() colors = cur.execute( f'''SELECT * from colors WHERE red={red} and green={green} and blue={blue}''' ).fetchall() if colors: id = colors[0][0] cur.execute( f'''UPDATE colors SET counts=counts + 1 WHERE id={id}''') else: last_id = cur.execute( f'''SELECT id from colors''').fetchall()[-1][0] cur.execute( f'''INSERT INTO colors VALUES ({last_id + 1}, {red}, {green}, {blue}, 1)''' ) con.commit() con.close() def set_color_with_bt(self): # Слот для кнопки выбора цвета color = QColorDialog.getColor() self.set_color(color) def closeEvent(self, event): # Закрываем файл, обнуляя значение зума self.zoom.setValue(1) # И предлагаем сохранить файл, если он не сохранен if self.canvas.obj and not self.saved: dial = Dialogs.Message() res = dial.exec() if res == dial.Save: self.save_file() if res == dial.Cancel: event.ignore() def load_sql(self): # При отсутствии цветов в базе данных(в первом открытии приложения) # добавляем в базу данных новый цвет - черный con = sqlite3.connect('own_colors_db.db') cur = con.cursor() len_sql = len(cur.execute(f'''SELECT * from colors''').fetchall()) if len_sql == 0: cur.execute('''INSERT INTO colors VALUES (1, 0, 0, 0, 1)''') con.commit() con.close() def load_colors(self): # Загружаем цвета в кнопки любимых цветов пользователя colors = [] con = sqlite3.connect('own_colors_db.db') cur = con.cursor() ex_colors = sorted(cur.execute( '''SELECT red, green, blue, counts from colors''').fetchall(), key=lambda i: i[3])[:21] ex_colors = [(i[0], i[1], i[2]) for i in ex_colors] colors.extend(ex_colors) # Если цветов недостаточно, заполняем кнопки случайными цветами # вдруг какой-нибудь из них ползователю понравится if len(colors) < 20: for i in range(20 - len(colors)): new_color = (randrange(256), randrange(256), randrange(256)) while new_color in colors: new_color = (randrange(256), randrange(256), randrange(256)) colors.append(new_color) # Сохраняем цвета кнопок в словарь, где ключ - кнопка, значение - цвет # А также подключаем кнопки к слоту и изменением цвета self.bt_colors_dict = {} for i in range(4): for j in range(5): exec( f'self.bt{i}{j}.setStyleSheet("background:rgb({colors[0][0]}, {colors[0][1]}, {colors[0][2]});")' ) color = QColor(colors[0][0], colors[0][1], colors[0][2]) exec(f'self.bt_colors_dict[self.bt{i}{j}] = color') exec(f'self.bt{i}{j}.clicked.connect(self.set_color_with_bts)') del colors[0] def set_color_with_bts(self): # Слот для установки цвета кисти self.set_color(self.bt_colors_dict[self.sender()])
def setupUi(self, Camera): Camera.setObjectName("Camera") Camera.resize(776, 519) self.centralwidget = QtWidgets.QWidget(Camera) self.centralwidget.setObjectName("centralwidget") self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_3.setObjectName("gridLayout_3") self.trainButton = QtWidgets.QPushButton(self.centralwidget) self.trainButton.setObjectName("trainButton") self.gridLayout_3.addWidget(self.trainButton, 1, 1, 1, 2) self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.stackedWidget.sizePolicy().hasHeightForWidth()) self.stackedWidget.setSizePolicy(sizePolicy) palette = QtGui.QPalette() brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Active, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(255, 255, 255)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Inactive, QtGui.QPalette.Window, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Base, brush) brush = QtGui.QBrush(QtGui.QColor(145, 145, 145)) brush.setStyle(QtCore.Qt.SolidPattern) palette.setBrush(QtGui.QPalette.Disabled, QtGui.QPalette.Window, brush) self.stackedWidget.setPalette(palette) self.stackedWidget.setObjectName("stackedWidget") self.viewfinderPage = QtWidgets.QWidget() self.viewfinderPage.setObjectName("viewfinderPage") self.gridLayout_5 = QtWidgets.QGridLayout(self.viewfinderPage) self.gridLayout_5.setObjectName("gridLayout_5") self.viewfinder = QCameraViewfinder(self.viewfinderPage) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.viewfinder.sizePolicy().hasHeightForWidth()) self.viewfinder.setSizePolicy(sizePolicy) self.viewfinder.setObjectName("viewfinder") self.gridLayout_5.addWidget(self.viewfinder, 0, 0, 1, 1) self.stackedWidget.addWidget(self.viewfinderPage) self.previewPage = QtWidgets.QWidget() self.previewPage.setObjectName("previewPage") self.gridLayout_4 = QtWidgets.QGridLayout(self.previewPage) self.gridLayout_4.setObjectName("gridLayout_4") self.lastImagePreviewLabel = QtWidgets.QLabel(self.previewPage) sizePolicy = QtWidgets.QSizePolicy( QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lastImagePreviewLabel.sizePolicy().hasHeightForWidth()) self.lastImagePreviewLabel.setSizePolicy(sizePolicy) self.lastImagePreviewLabel.setFrameShape(QtWidgets.QFrame.Box) self.lastImagePreviewLabel.setText("") self.lastImagePreviewLabel.setObjectName("lastImagePreviewLabel") self.gridLayout_4.addWidget(self.lastImagePreviewLabel, 0, 0, 1, 1) self.stackedWidget.addWidget(self.previewPage) self.gridLayout_3.addWidget(self.stackedWidget, 0, 0, 3, 1) self.captureWidget = QtWidgets.QTabWidget(self.centralwidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(1) sizePolicy.setHeightForWidth( self.captureWidget.sizePolicy().hasHeightForWidth()) self.captureWidget.setSizePolicy(sizePolicy) self.captureWidget.setObjectName("captureWidget") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.gridLayout = QtWidgets.QGridLayout(self.tab_2) self.gridLayout.setObjectName("gridLayout") self.absenceNumber = QtWidgets.QLCDNumber(self.tab_2) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.absenceNumber.sizePolicy().hasHeightForWidth()) self.absenceNumber.setSizePolicy(sizePolicy) self.absenceNumber.setObjectName("absenceNumber") self.gridLayout.addWidget(self.absenceNumber, 2, 0, 1, 1) self.takeImageButton = QtWidgets.QPushButton(self.tab_2) self.takeImageButton.setObjectName("takeImageButton") self.gridLayout.addWidget(self.takeImageButton, 0, 0, 1, 1) self.SaveButton = QtWidgets.QPushButton(self.tab_2) self.SaveButton.setObjectName("SaveButton") self.gridLayout.addWidget(self.SaveButton, 1, 0, 1, 1) self.label = QtWidgets.QLabel(self.tab_2) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 3, 0, 1, 1) self.clearButton = QtWidgets.QPushButton(self.tab_2) self.clearButton.setObjectName("clearButton") self.gridLayout.addWidget(self.clearButton, 8, 0, 1, 1) self.progressBar = QtWidgets.QProgressBar(self.tab_2) self.progressBar.setProperty("value", 24) self.progressBar.setObjectName("progressBar") self.gridLayout.addWidget(self.progressBar, 9, 0, 1, 1) self.lcdNumber_2 = QtWidgets.QLCDNumber(self.tab_2) self.lcdNumber_2.setObjectName("lcdNumber_2") self.gridLayout.addWidget(self.lcdNumber_2, 4, 0, 1, 1) self.dial = QtWidgets.QDial(self.tab_2) self.dial.setObjectName("dial") self.gridLayout.addWidget(self.dial, 6, 0, 1, 1) self.label_2 = QtWidgets.QLabel(self.tab_2) self.label_2.setAlignment(QtCore.Qt.AlignCenter) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 5, 0, 1, 1) self.captureWidget.addTab(self.tab_2, "") self.gridLayout_3.addWidget(self.captureWidget, 2, 1, 1, 2) Camera.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(Camera) self.menubar.setGeometry(QtCore.QRect(0, 0, 776, 21)) self.menubar.setObjectName("menubar") self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile.setObjectName("menuFile") self.menuDevices = QtWidgets.QMenu(self.menubar) self.menuDevices.setObjectName("menuDevices") Camera.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(Camera) self.statusbar.setObjectName("statusbar") Camera.setStatusBar(self.statusbar) self.actionExit = QtWidgets.QAction(Camera) self.actionExit.setObjectName("actionExit") self.actionStartCamera = QtWidgets.QAction(Camera) self.actionStartCamera.setObjectName("actionStartCamera") self.actionStopCamera = QtWidgets.QAction(Camera) self.actionStopCamera.setObjectName("actionStopCamera") self.actionSettings = QtWidgets.QAction(Camera) self.actionSettings.setObjectName("actionSettings") self.actionOpen_File = QtWidgets.QAction(Camera) self.actionOpen_File.setObjectName("actionOpen_File") self.menuFile.addAction(self.actionStartCamera) self.menuFile.addAction(self.actionStopCamera) self.menuFile.addAction(self.actionOpen_File) self.menuFile.addSeparator() self.menuFile.addAction(self.actionSettings) self.menuFile.addSeparator() self.menuFile.addAction(self.actionExit) self.menubar.addAction(self.menuFile.menuAction()) self.menubar.addAction(self.menuDevices.menuAction()) self.retranslateUi(Camera) self.stackedWidget.setCurrentIndex(0) self.captureWidget.setCurrentIndex(0) self.actionExit.triggered.connect(Camera.close) self.trainButton.clicked.connect(Camera.toggleLock) self.actionSettings.triggered.connect(Camera.configureCaptureSettings) self.actionOpen_File.triggered.connect(Camera.configureOpenExcels) self.actionStartCamera.triggered.connect(Camera.startCamera) self.actionStopCamera.triggered.connect(Camera.stopCamera) self.takeImageButton.clicked.connect(Camera.takeImage) QtCore.QMetaObject.connectSlotsByName(Camera)
def setupUi(self): self.gridLayout_3 = QtWidgets.QGridLayout(self) self.viewfinder = QCameraViewfinder() self.gridLayout_3.addWidget(self.viewfinder, 0, 0, 1, 1)
class VideoWindow(QMainWindow): def __init__(self, parent=None): super(VideoWindow, self).__init__(parent) self.setWindowTitle( "PyQt Video Player Widget Example - pythonprogramminglanguage.com") self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface) self.camera = QCamera(0) self.cameraviewfinder = QCameraViewfinder() self.cameramode = self.camera.CaptureMode(2) self.cameraimgcap = QCameraImageCapture(self.camera) videoWidget = QVideoWidget() self.imageView = QLabel("add a image file") self.imageView.setAlignment(Qt.AlignCenter) self.playButton = QPushButton() self.playButton.setEnabled(True) self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay)) self.playButton.clicked.connect(self.play) self.positionSlider = QSlider(Qt.Horizontal) self.positionSlider.setRange(0, 0) self.scene1 = QGraphicsScene() self.view1 = QGraphicsView(self.scene1) # Create new action # Create exit action # Create a widget for window contents wid = QWidget(self) self.setCentralWidget(wid) # Create layouts to place inside widget # controlLayout = QHBoxLayout() # controlLayout.setContentsMargins(0, 0, 0, 0) # controlLayout.addWidget(self.playButton) # controlLayout.addWidget(self.positionSlider) videolayout = QVBoxLayout() videolayout.addWidget(videoWidget) # videolayout.addLayout(controlLayout) # Set widget to contain window contents layout = QHBoxLayout() layout.addLayout(videolayout) layout.addWidget(self.cameraviewfinder) # layout.addWidget(self.view1) wid.setLayout(layout) self.mediaPlayer.setVideoOutput(videoWidget) self.cameraviewfinder.show() self.camera.setViewfinder(self.cameraviewfinder) def exitCall(self): sys.exit(app.exec_()) def play(self): self.showFullScreen() fileName = 'D:\\桌面\\some.mp4' if fileName != '': self.mediaPlayer.setMedia( QMediaContent(QUrl.fromLocalFile(fileName))) self.playButton.setEnabled(True) self.cameraviewfinder.resize(640, 480) self.camera.start() self.mediaPlayer.play() camera_capture = cv2.VideoCapture(0) while True: ret, camera_frame = camera_capture.read() if ret: self.displayImage(camera_frame) else: break camera_capture.release() cv2.destroyAllWindows() def mediaStateChanged(self, state): if self.mediaPlayer.state() == QMediaPlayer.PlayingState: self.playButton.setIcon(self.style().standardIcon( QStyle.SP_MediaPause)) else: self.playButton.setIcon(self.style().standardIcon( QStyle.SP_MediaPlay)) def displayImage(self, img): self.scene1.clear() pixMap = QPixmap(img) w, h = pixMap.width(), pixMap.height() self.scene1.addPixmap(pixMap) self.view1.fitInView(QRectF(0, 0, w, h), Qt.KeepAspectRatio) self.scene1.update()
class CQCameraPreviewWindow(QtWidgets.QMainWindow): closeSignal = QtCore.pyqtSignal() ioctlRequest = QtCore.pyqtSignal(dict) def __init__(self, *args, **kwargs): super(CQCameraPreviewWindow, self).__init__(*args, **kwargs) self._MIN_WIN_WIDTH = 640 self.oc_camera_info = None self.oc_camera = None self.b_guard = False self.toolbar = QtWidgets.QToolBar("Preview") self.cbox_resolution = CLabeledComboBox("Resolution:") self.cbox_resolution.cbox.currentIndexChanged.connect(self.__cb_on_resolution_cbox_index_changed) self.toolbar.addWidget(self.cbox_resolution) self.toolbar.addSeparator() self.cbox_frame_rate = CLabeledComboBox("Frame Rate:") self.cbox_frame_rate.cbox.currentIndexChanged.connect(self.__cb_on_frame_rate_cbox_index_changed) self.toolbar.addWidget(self.cbox_frame_rate) self.addToolBar(self.toolbar) self.toolbar.addSeparator() self.oc_view_finder = QCameraViewfinder() self.setCentralWidget(self.oc_view_finder) def __cb_on_resolution_cbox_index_changed(self, i_idx): if self.oc_camera is None: self.fatal_error("Unallocated camera object detected") if self.b_guard: return l_res = self.cbox_resolution.cbox.itemText(i_idx).split(" x ") oc_vf_settings = self.oc_camera.viewfinderSettings() if oc_vf_settings.isNull(): self.fatal_error("Unable to retrieve camera settings") i_w, i_h = int(l_res[0]), int(l_res[1]) oc_vf_settings.setResolution(i_w, i_h) self.oc_camera.setViewfinderSettings(oc_vf_settings) self.oc_view_finder.setFixedSize(i_w, i_h) if i_w >= self._MIN_WIN_WIDTH: self.adjustSize() self.setFixedSize(self.sizeHint()) def __cb_on_frame_rate_cbox_index_changed(self, i_idx): if self.oc_camera is None: self.fatal_error("Unallocated camera object detected") if self.b_guard: return f_res = float(self.cbox_frame_rate.cbox.itemText(i_idx)) oc_vf_settings = self.oc_camera.viewfinderSettings() if oc_vf_settings.isNull(): self.fatal_error("Unable to retrieve camera settings") oc_vf_settings.setMinimumFrameRate(f_res) oc_vf_settings.setMaximumFrameRate(f_res) self.oc_camera.setViewfinderSettings(oc_vf_settings) def __camera_sync_start(self): i_sec_cnt = 0 self.oc_camera.start() while True: cam_status = self.oc_camera.status() if cam_status == QCamera.ActiveStatus: break else: time.sleep(1) i_sec_cnt += 1 if i_sec_cnt >= 10: self.fatal_error("Unable to start the camera") def __update_UI(self): # retrieve all supported resolutions and populate the resolution combo box l_resolutions = self.oc_camera.supportedViewfinderResolutions() if len(l_resolutions) > 0: l_res = [] for oc_res in l_resolutions: l_res.append("%i x %i" % (oc_res.width(), oc_res.height())) self.cbox_resolution.cbox.clear() self.cbox_resolution.cbox.addItems(l_res) oc_vf_settings = self.oc_camera.viewfinderSettings() if oc_vf_settings.isNull(): self.fatal_error("Unable to retrieve camera settings") # set current item index in the resolution combo box # according to the current resolution of our camera oc_curr_res = oc_vf_settings.resolution() s_res_hash = "%i x %i" % (oc_curr_res.width(), oc_curr_res.height()) for i_idx in range(self.cbox_resolution.cbox.count()): if self.cbox_resolution.cbox.itemText(i_idx) == s_res_hash: self.cbox_resolution.cbox.setCurrentIndex(i_idx) # retrieve all supported frame rates and populate the frame rate combo box l_frates = self.oc_camera.supportedViewfinderFrameRateRanges() if len(l_frates) > 0: l_res = [] for oc_frate in l_frates: l_res.append("%f" % oc_frate.minimumFrameRate) self.cbox_frame_rate.cbox.clear() self.cbox_frame_rate.cbox.addItems(l_res) # set current item index in the frame rate combo box # according to the current frame rate of our camera i_curr_frate = int(oc_vf_settings.minimumFrameRate()) for i_idx in range(self.cbox_frame_rate.cbox.count()): if int(float(self.cbox_frame_rate.cbox.itemText(i_idx))) == i_curr_frate: self.cbox_frame_rate.cbox.setCurrentIndex(i_idx) def fatal_error(self, s_msg): if self.oc_camera is not None: self.oc_camera.stop() QtWidgets.QMessageBox.critical(None, "Fatal Error", "%s\nThe application will exit now." % s_msg) sys.exit(-1) def start_preview(self, oc_camera_info, oc_frame_cap_thread): if self.oc_camera is not None: self.fatal_error("Preallocated camera object detected") self.oc_camera_info = oc_camera_info self.oc_camera = QCamera(self.oc_camera_info) self.oc_camera.setViewfinder(self.oc_view_finder) self.oc_camera.setCaptureMode(QCamera.CaptureVideo) self.oc_camera.error.connect(lambda: self.show_error_message(self.oc_camera.errorString())) self.b_guard = True self.__camera_sync_start() self.__update_UI() self.b_guard = False self.setWindowTitle(self.oc_camera_info.description()) self.adjustSize() self.setFixedSize(self.sizeHint()) def stop_preview(self): if self.oc_camera is None: return # this is correct logic, no error here self.oc_camera.stop() self.oc_camera.unload() self.oc_camera = None self.oc_camera_info = None def is_save_state_needed(self): return False def save_state(self): pass def show_error_message(self, s_msg): err = QtWidgets.QErrorMessage(self) err.showMessage(s_msg) def closeEvent(self, event): if self.is_save_state_needed(): self.save_state() self.stop_preview() self.closeSignal.emit()
def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 600) MainWindow.setIconSize(QtCore.QSize(48, 48)) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) self.tabWidget.setGeometry(QtCore.QRect(130, 10, 651, 561)) self.tabWidget.setObjectName("tabWidget") # self.tabWidget.setCurrentIndex() self.tab = QtWidgets.QWidget() self.tab.setObjectName("tab") self.groupBox_2 = QtWidgets.QGroupBox(self.tab) self.groupBox_2.setGeometry(QtCore.QRect(60, 20, 181, 261)) self.groupBox_2.setObjectName("groupBox_2") self.widget = QCameraViewfinder(self.groupBox_2) self.widget.setGeometry(QtCore.QRect(20, 20, 141, 231)) self.widget.setObjectName("widget") self.label = QtWidgets.QLabel(self.tab) self.label.setGeometry(QtCore.QRect(10, 10, 621, 441)) self.label.setText("") self.label.setPixmap( QtGui.QPixmap("../../aipicture/145940263255235.jpeg")) self.label.setScaledContents(True) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.tab) self.label_2.setGeometry(QtCore.QRect(410, 30, 151, 251)) self.label_2.setText("") self.label_2.setPixmap(QtGui.QPixmap("")) self.label_2.setScaledContents(False) self.label_2.setObjectName("label_2") # self.btn1 = QtWidgets.QPushButton("确定", self) # self.btn1.move(20, 120) self.plainTextEdit = QtWidgets.QPlainTextEdit(self.tab) self.plainTextEdit.setGeometry(QtCore.QRect(140, 320, 171, 31)) self.plainTextEdit.setObjectName("plainTextEdit") self.label_3 = QtWidgets.QLabel(self.tab) self.label_3.setGeometry(QtCore.QRect(40, 310, 81, 31)) self.label_3.setStyleSheet("font: 14pt'楷体';color:rgb(255,255,255);") self.label_3.setObjectName("label_3") self.label_4 = QtWidgets.QLabel(self.tab) self.label_4.setGeometry(QtCore.QRect(40, 382, 81, 21)) self.label_4.setStyleSheet("font:14pt '楷体';color:rgb(255,255,255);") self.label_4.setObjectName("label_4") self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self.tab) self.plainTextEdit_2.setGeometry(QtCore.QRect(140, 380, 171, 31)) self.plainTextEdit_2.setObjectName("plainTextEdit_2") self.btnget = QtWidgets.QPushButton(self.tab) self.btnget.setGeometry(QtCore.QRect(380, 340, 75, 23)) self.btnget.setObjectName("pushButton") self.label.raise_() self.groupBox_2.raise_() self.label_2.raise_() self.plainTextEdit.raise_() self.label_3.raise_() self.label_4.raise_() self.plainTextEdit_2.raise_() self.btnget.raise_() self.tabWidget.addTab(self.tab, "") self.tab_3 = QtWidgets.QWidget() self.tab_3.setObjectName("tab_3") self.label_5 = QtWidgets.QLabel(self.tab_3) self.label_5.setGeometry(QtCore.QRect(0, 0, 661, 451)) self.label_5.setText("") self.label_5.setPixmap(QtGui.QPixmap("../../aipicture/searchbg.jpg")) self.label_5.setScaledContents(True) self.label_5.setObjectName("label_5") self.groupBox_3 = QtWidgets.QGroupBox(self.tab_3) self.groupBox_3.setGeometry(QtCore.QRect(20, 20, 611, 411)) self.groupBox_3.setObjectName("groupBox_3") self.btncap = QtWidgets.QPushButton(self.groupBox_3) self.btncap.setGeometry(QtCore.QRect(150, 30, 72, 23)) self.btnget.setObjectName("pushButton") self.widget_2 = QCameraViewfinder(self.groupBox_3) self.widget_2.setGeometry(QtCore.QRect(50, 100, 171, 271)) self.widget_2.setObjectName("widget_2") self.label_6 = QtWidgets.QLabel(self.groupBox_3) self.label_6.setGeometry(QtCore.QRect(50, 21, 101, 31)) self.label_6.setLineWidth(1) self.label_6.setTextFormat(QtCore.Qt.AutoText) self.label_6.setScaledContents(False) self.label_6.setStyleSheet("font:14pt '楷体';color:rgb(255,255,255);") self.label_6.setObjectName("label_6") self.plainTextEdit_3 = QtWidgets.QPlainTextEdit(self.groupBox_3) self.plainTextEdit_3.setGeometry(QtCore.QRect(320, 100, 201, 31)) self.plainTextEdit_3.setObjectName("plainTextEdit_3") self.plainTextEdit_3.setStyleSheet("font:14pt '楷体';") self.label_7 = QtWidgets.QLabel(self.groupBox_3) self.label_7.setGeometry(QtCore.QRect(230, 100, 80, 19)) self.label_7.setObjectName("label_7") self.label_7.setStyleSheet("font:14pt '楷体';color:rgb(255,255,255);") self.label_8 = QtWidgets.QLabel(self.groupBox_3) self.label_8.setGeometry(QtCore.QRect(230, 180, 81, 31)) self.label_8.setObjectName("label_8") self.label_8.setStyleSheet("font:14pt '楷体';color:rgb(255,255,255);") self.label_9 = QtWidgets.QLabel(self.groupBox_3) self.label_9.setGeometry(QtCore.QRect(230, 260, 81, 31)) self.label_9.setObjectName("label_9") self.label_9.setStyleSheet("font:14pt '楷体';color:rgb(255,255,255);") self.plainTextEdit_4 = QtWidgets.QPlainTextEdit(self.groupBox_3) self.plainTextEdit_4.setGeometry(QtCore.QRect(320, 180, 201, 31)) self.plainTextEdit_4.setObjectName("plainTextEdit_4") self.plainTextEdit_4.setStyleSheet("font:14pt '楷体';") self.plainTextEdit_5 = QtWidgets.QPlainTextEdit(self.groupBox_3) self.plainTextEdit_5.setGeometry(QtCore.QRect(320, 260, 201, 31)) self.plainTextEdit_5.setObjectName("plainTextEdit_5") self.plainTextEdit_5.setStyleSheet("font:14pt '楷体';") self.label_10 = QtWidgets.QLabel(self.groupBox_3) self.label_10.setGeometry(QtCore.QRect(250, 350, 61, 21)) self.label_10.setObjectName("label_10") self.label_10.setStyleSheet("font:14pt '楷体';color:rgb(255,255,255);") self.plainTextEdit_6 = QtWidgets.QPlainTextEdit(self.groupBox_3) self.plainTextEdit_6.setGeometry(QtCore.QRect(320, 340, 201, 31)) self.plainTextEdit_6.setObjectName("plainTextEdit_6") self.plainTextEdit_6.setStyleSheet("font:14pt '楷体';") self.tabWidget.addTab(self.tab_3, "") self.tab_2 = QtWidgets.QWidget() self.tab_2.setObjectName("tab_2") self.btndata = QtWidgets.QPushButton(self.tab_2) self.btndata.setGeometry(QtCore.QRect(30, 210, 75, 23)) self.btndata.setObjectName("pushButton") self.btndata.raise_() self.plainTextEdit_7 = QtWidgets.QPlainTextEdit(self.tab_2) self.plainTextEdit_7.setGeometry(QtCore.QRect(130, 60, 431, 331)) self.plainTextEdit_7.setObjectName("plainTextEdit_7") self.plainTextEdit_7.setStyleSheet("font:14pt '楷体';") self.label_11 = QtWidgets.QLabel(self.tab_2) self.label_11.setGeometry(QtCore.QRect(60, 60, 54, 12)) self.label_11.setObjectName("label_11") self.tabWidget.addTab(self.tab_2, "") self.groupBox = QtWidgets.QGroupBox(self.centralwidget) self.groupBox.setGeometry(QtCore.QRect(0, 10, 121, 471)) self.groupBox.setObjectName("groupBox") self.addnew = QtWidgets.QPushButton(self.groupBox) self.addnew.setGeometry(QtCore.QRect(20, 40, 91, 51)) self.addnew.setObjectName("addnew") self.searchinfo = QtWidgets.QPushButton(self.groupBox) self.searchinfo.setGeometry(QtCore.QRect(20, 170, 91, 51)) self.searchinfo.setObjectName("searchinfo") self.pushButton_3 = QtWidgets.QPushButton(self.groupBox) self.pushButton_3.setGeometry(QtCore.QRect(20, 300, 91, 51)) self.pushButton_3.setObjectName("pushButton_3") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") self.menuwtf = QtWidgets.QMenu(self.menubar) self.menuwtf.setObjectName("menuwtf") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.toolBar = QtWidgets.QToolBar(MainWindow) self.toolBar.setEnabled(True) self.toolBar.setIconSize(QtCore.QSize(60, 60)) self.toolBar.setObjectName("toolBar") MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.toolBar) self.actionActStartCamera = QtWidgets.QAction(MainWindow) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap("E:/aipicture/videocam_video_72px.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionActStartCamera.setIcon(icon) self.actionActStartCamera.setObjectName("actionActStartCamera") self.actionActCloseCamrera = QtWidgets.QAction(MainWindow) icon1 = QtGui.QIcon() icon1.addPixmap( QtGui.QPixmap("E:/aipicture/videocam_off_video_72px.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionActCloseCamrera.setIcon(icon1) self.actionActCloseCamrera.setObjectName("actionActCloseCamrera") self.actionActCaputure = QtWidgets.QAction(MainWindow) icon2 = QtGui.QIcon() icon2.addPixmap(QtGui.QPixmap("E:/aipicture/camcorder_72px.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionActCaputure.setIcon(icon2) self.actionActCaputure.setObjectName("actionActCaputure") self.actionActExit = QtWidgets.QAction(MainWindow) icon3 = QtGui.QIcon() icon3.addPixmap(QtGui.QPixmap("E:/aipicture/power_exit_72px.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.actionActExit.setIcon(icon3) self.actionActExit.setObjectName("actionActExit") self.menuwtf.addAction(self.actionActStartCamera) self.menuwtf.addSeparator() self.menuwtf.addAction(self.actionActCloseCamrera) self.menuwtf.addSeparator() self.menuwtf.addAction(self.actionActCaputure) self.menuwtf.addSeparator() self.menuwtf.addAction(self.actionActExit) self.menuwtf.addSeparator() self.menubar.addAction(self.menuwtf.menuAction()) self.toolBar.addAction(self.actionActStartCamera) self.toolBar.addSeparator() self.toolBar.addAction(self.actionActCloseCamrera) self.toolBar.addSeparator() self.toolBar.addAction(self.actionActCaputure) self.toolBar.addSeparator() self.toolBar.addAction(self.actionActExit) self.toolBar.addSeparator() self.retranslateUi(MainWindow) # self.tabWidget.setCurrentIndex(0) # self.addnew.clicked['bool'].connect(self.addnew.click) # self.searchinfo.clicked.connect(self.searchinfo.click) # self.pushButton_3.clicked['bool'].connect(self.pushButton_3.click) QtCore.QMetaObject.connectSlotsByName(MainWindow)
def __init__(self, parent=None): super().__init__(parent) self.setSubTitle(self.tr("<h2>Create Your Avatar</h2>")) vlayout = QVBoxLayout(self) labelLayout = QHBoxLayout() labelImage = QLabel() labelImage.setPixmap(QPixmap(":/data/images/preferences-desktop-personal.png")) labelImage.setMaximumSize(64, 64) labelLayout.addWidget(labelImage) label = QLabel(self) label.setWordWrap(True) label.setText(self.tr("<p>This screen helps you set your <strong>user picture</strong>. You can either choose an image from a \ file or you can capture an image from your camera. Select an option from the <strong>options</strong> menu.</p>")) labelLayout.addWidget(label) vlayout.addLayout(labelLayout) vlayout.addItem(QSpacerItem(20, 40, QSizePolicy.Preferred, QSizePolicy.Preferred)) centerLayout = QHBoxLayout() centerLayout.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) groupBox = QGroupBox() groupBox.setMaximumWidth(500) vlayout2 = QVBoxLayout(groupBox) hlayout = QHBoxLayout() comboBox = QComboBox() comboBox.setMinimumWidth(250) comboBox.addItems([self.tr("Options"), self.tr("Choose an image...")]) #Camera control self.cameraInfo = None self.camera = None self.cameraImageCapture = None cameras = QCameraInfo.availableCameras() if len(cameras): self.cameraInfo = cameras[0] comboBox.addItem(self.tr("Camera ") + self.cameraInfo.deviceName()) self.camera = QCamera(self.cameraInfo) self.camera.setCaptureMode(QCamera.CaptureStillImage) self.cameraImageCapture = QCameraImageCapture(self.camera) self.imageProcessing = self.camera.imageProcessing() self.imageProcessing.setWhiteBalanceMode(QCameraImageProcessing.WhiteBalanceSunlight) self.imageProcessing.setContrast(1) self.imageProcessing.setSaturation(1) self.imageProcessing.setSharpeningLevel(1) self.imageProcessing.setDenoisingLevel(1) #self.imageProcessing.setColorFilter(QCameraImageProcessing.ColorFilterWhiteboard) #FIXME Qt5.5 self.cameraImageCapture.imageCaptured.connect(self.imageCapture) self.buttonCam = QPushButton() self.buttonCam.setText(self.tr("Capture")) self.buttonCam.setIcon(QIcon(":/data/images/webcamreceive.png")) self.buttonCam.setVisible(False) self.buttonReplay = QPushButton() self.buttonReplay.setText(self.tr("Recapture")) self.buttonReplay.setIcon(QIcon(":/data/images/view-refresh.png")) self.buttonReplay.setVisible(False) hlayout.addWidget(comboBox) hlayout.addItem(QSpacerItem(300, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) hlayout.addWidget(self.buttonCam) hlayout.addWidget(self.buttonReplay) vlayout2.addLayout(hlayout) hlayout2 = QHBoxLayout() hlayout2.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) self.cameraLabel = QLabel() self.cameraLabel.setScaledContents(True) self.cameraLabel.setStyleSheet("background-color: black;") self.cameraLabel.setMinimumSize(320, 240) self.cameraLabel.setMaximumSize(320, 240) self.cameraView = QCameraViewfinder() self.cameraView.setMaximumSize(320,240) self.cameraView.setMinimumSize(320,240) self.cameraView.hide() hlayout2.addWidget(self.cameraLabel) hlayout2.addWidget(self.cameraView) hlayout2.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) vlayout2.addLayout(hlayout2) centerLayout.addWidget(groupBox) centerLayout.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) vlayout.addLayout(centerLayout) vlayout.addItem(QSpacerItem(20, 40, QSizePolicy.Preferred, QSizePolicy.Preferred)) comboBox.currentIndexChanged.connect(self.avatarSelect) self.buttonCam.clicked.connect(self.buttonCamChanged) self.buttonReplay.clicked.connect(self.buttonReplayChanged) self.userAvatar = None
class AvatarWidget(QWizardPage): def __init__(self, parent=None): super().__init__(parent) self.setSubTitle(self.tr("<h2>Create Your Avatar</h2>")) vlayout = QVBoxLayout(self) labelLayout = QHBoxLayout() labelImage = QLabel() labelImage.setPixmap(QPixmap(":/data/images/preferences-desktop-personal.png")) labelImage.setMaximumSize(64, 64) labelLayout.addWidget(labelImage) label = QLabel(self) label.setWordWrap(True) label.setText(self.tr("<p>This screen helps you set your <strong>user picture</strong>. You can either choose an image from a \ file or you can capture an image from your camera. Select an option from the <strong>options</strong> menu.</p>")) labelLayout.addWidget(label) vlayout.addLayout(labelLayout) vlayout.addItem(QSpacerItem(20, 40, QSizePolicy.Preferred, QSizePolicy.Preferred)) centerLayout = QHBoxLayout() centerLayout.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) groupBox = QGroupBox() groupBox.setMaximumWidth(500) vlayout2 = QVBoxLayout(groupBox) hlayout = QHBoxLayout() comboBox = QComboBox() comboBox.setMinimumWidth(250) comboBox.addItems([self.tr("Options"), self.tr("Choose an image...")]) #Camera control self.cameraInfo = None self.camera = None self.cameraImageCapture = None cameras = QCameraInfo.availableCameras() if len(cameras): self.cameraInfo = cameras[0] comboBox.addItem(self.tr("Camera ") + self.cameraInfo.deviceName()) self.camera = QCamera(self.cameraInfo) self.camera.setCaptureMode(QCamera.CaptureStillImage) self.cameraImageCapture = QCameraImageCapture(self.camera) self.imageProcessing = self.camera.imageProcessing() self.imageProcessing.setWhiteBalanceMode(QCameraImageProcessing.WhiteBalanceSunlight) self.imageProcessing.setContrast(1) self.imageProcessing.setSaturation(1) self.imageProcessing.setSharpeningLevel(1) self.imageProcessing.setDenoisingLevel(1) #self.imageProcessing.setColorFilter(QCameraImageProcessing.ColorFilterWhiteboard) #FIXME Qt5.5 self.cameraImageCapture.imageCaptured.connect(self.imageCapture) self.buttonCam = QPushButton() self.buttonCam.setText(self.tr("Capture")) self.buttonCam.setIcon(QIcon(":/data/images/webcamreceive.png")) self.buttonCam.setVisible(False) self.buttonReplay = QPushButton() self.buttonReplay.setText(self.tr("Recapture")) self.buttonReplay.setIcon(QIcon(":/data/images/view-refresh.png")) self.buttonReplay.setVisible(False) hlayout.addWidget(comboBox) hlayout.addItem(QSpacerItem(300, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) hlayout.addWidget(self.buttonCam) hlayout.addWidget(self.buttonReplay) vlayout2.addLayout(hlayout) hlayout2 = QHBoxLayout() hlayout2.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) self.cameraLabel = QLabel() self.cameraLabel.setScaledContents(True) self.cameraLabel.setStyleSheet("background-color: black;") self.cameraLabel.setMinimumSize(320, 240) self.cameraLabel.setMaximumSize(320, 240) self.cameraView = QCameraViewfinder() self.cameraView.setMaximumSize(320,240) self.cameraView.setMinimumSize(320,240) self.cameraView.hide() hlayout2.addWidget(self.cameraLabel) hlayout2.addWidget(self.cameraView) hlayout2.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) vlayout2.addLayout(hlayout2) centerLayout.addWidget(groupBox) centerLayout.addItem(QSpacerItem(40, 20, QSizePolicy.Preferred, QSizePolicy.Preferred)) vlayout.addLayout(centerLayout) vlayout.addItem(QSpacerItem(20, 40, QSizePolicy.Preferred, QSizePolicy.Preferred)) comboBox.currentIndexChanged.connect(self.avatarSelect) self.buttonCam.clicked.connect(self.buttonCamChanged) self.buttonReplay.clicked.connect(self.buttonReplayChanged) self.userAvatar = None def avatarSelect(self, index): if index == 0: if self.camera != None: self.camera.stop() self.buttonReplay.hide() self.buttonCam.hide() self.cameraView.hide() self.cameraLabel.show() elif index == 1: if self.camera != None: self.camera.stop() self.userAvatar = None self.buttonReplay.hide() self.buttonCam.hide() self.cameraView.hide() self.cameraLabel.show() file_url, file_type = QFileDialog.getOpenFileName(self, self.tr("Choose Avatar"), QDir.homePath(), "Image (*.png *.jpg)") if file_url != "": p = QPixmap(file_url) self.cameraLabel.setPixmap(p) self.userAvatar = file_url elif index == 2: self.userAvatar = None self.cameraLabel.hide() self.cameraView.show() self.camera.setViewfinder(self.cameraView) self.camera.start() self.buttonCam.setVisible(True) self.buttonReplay.hide() def buttonCamChanged(self): self.buttonCam.hide() self.buttonReplay.show() self.camera.searchAndLock() self.cameraImageCapture.capture("/tmp/avatar.png") self.camera.unlock() self.userAvatar = "/tmp/avatar.png" def buttonReplayChanged(self): self.userAvatar = None self.buttonReplay.hide() self.buttonCam.show() self.camera.start() self.cameraLabel.hide() self.cameraView.show() def imageCapture(self, id, preview): pixmap = QPixmap.fromImage(preview) self.camera.stop() self.cameraView.hide() self.cameraLabel.show() self.cameraLabel.setPixmap(pixmap) def execute(self): if self.userAvatar: if os.path.exists(os.path.join(os.environ["HOME"], ".face.icon")): os.remove(os.path.join(os.environ["HOME"], ".face.icon")) shutil.copy(self.userAvatar, os.path.join(os.environ["HOME"], ".face.icon"))