Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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()
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
    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()  # 开启摄像头
Ejemplo n.º 7
0
    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
Ejemplo n.º 8
0
    def showCamera(self):
        self.finder = QCameraViewfinder()
        self.finder.show()

        self.camera = QCamera()
        self.camera.setViewfinder(self.finder)
        self.camera.start()
        self.camera.stop()
Ejemplo n.º 9
0
    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)
Ejemplo n.º 10
0
 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)
Ejemplo n.º 11
0
    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)
Ejemplo n.º 12
0
    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)
Ejemplo n.º 13
0
    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)
Ejemplo n.º 14
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
Ejemplo n.º 15
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()
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
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"))
Ejemplo n.º 18
0
    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)
Ejemplo n.º 19
0
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()
Ejemplo n.º 20
0
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
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
    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)
Ejemplo n.º 23
0
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)
Ejemplo n.º 25
0
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};')
Ejemplo n.º 26
0
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()])
Ejemplo n.º 27
0
    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)
Ejemplo n.º 28
0
    def setupUi(self):
        self.gridLayout_3 = QtWidgets.QGridLayout(self)
        self.viewfinder = QCameraViewfinder()

        self.gridLayout_3.addWidget(self.viewfinder, 0, 0, 1, 1)
Ejemplo n.º 29
0
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()
Ejemplo n.º 30
0
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()
Ejemplo n.º 31
0
    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)
Ejemplo n.º 32
0
    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
Ejemplo n.º 33
0
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"))