def selectCamera(self, index): pre_index = self.index(self.available_cameras, self.selected_camera) if pre_index is index: if self.camera.state() == QtMultimedia.QCamera.LoadedState: self.camera.start() return if pre_index is not None: self.releaseCamera() for imageObject in self.images: if "pixmap" not in imageObject: print( "detected unfulfilled capture while switching camera, removing..." ) self.images.remove(imageObject) self.captureButton.setDisabled(True) self.selected_camera = self.available_cameras[index] self.camera = QtMultimedia.QCamera(self.selected_camera) self.camera.setViewfinder(self.viewfinder) self.camera.setCaptureMode(QtMultimedia.QCamera.CaptureStillImage) self.camera.statusChanged.connect( lambda status: self.enableCaptureButton() if status == QtMultimedia .QCamera.ActiveStatus and len(self.images) < 12 else None) self.camera.error.connect( lambda: self.alert("camera error", self.camera.errorString())) self.camera.start() self.capture = QtMultimedia.QCameraImageCapture(self.camera) self.capture.error.connect( lambda i, e, s: self.alert("capture error", s)) self.capture.imageCaptured.connect(self.imageCaptured)
def img_capture(self): # Function for capture image. image_capture = QtMultimedia.QCameraImageCapture(self.camera) image_capture.setCaptureDestination( # Modes and Destination. QtMultimedia.QCameraImageCapture.CaptureToFile) self.camera.setCaptureMode(QtMultimedia.QCamera.CaptureStillImage) filename = os.path.dirname(os.path.abspath(__file__)) camera_path = os.path.join(filename, "camera/captures/") image_capture.capture(os.path.normpath(camera_path))
def __init__(self, camera): super().__init__() self._camera = camera self._camera_viewfinder = QtMultimediaWidgets.QCameraViewfinder() self._camera.setCaptureMode(QtMultimedia.QCamera.CaptureStillImage) self._image_capture = QtMultimedia.QCameraImageCapture(self._camera) self._image_capture.setCaptureDestination( QtMultimedia.QCameraImageCapture.CaptureToFile) self._tag = None self._standard_img = None self._current_frame = None self._current_image_name = None
def captureToggle(self): tabs = self.mainWindow.previewTabs if tabs.currentWidget() != self.mainWindow.cameraTab: tabs.setCurrentWidget(self.mainWindow.waitTab) try: if self.camera is None: if self.cameraInfo is None: self._showError('No camera selected!') tabs.setCurrentWidget(self.mainWindow.badgePreviewTab) return self.camera = QtMultimedia.QCamera(self.cameraInfo) self.camera.viewfinderSettings().setResolution(640, 480) self.camera.setViewfinder(self.mainWindow.cameraViewFinder) def statusChanged(status): if status == QtMultimedia.QCamera.ActiveStatus: tabs.setCurrentWidget(self.mainWindow.cameraTab) self.camera.statusChanged.connect(statusChanged) QtCore.QTimer.singleShot(1, self.camera.start) except Exception as exc: print(exc) self._showError('Failed to initialize camera. :(') tabs.setCurrentWidget(self.mainWindow.badgePreviewTab) return elif tabs.currentWidget() == self.mainWindow.cameraTab: def imageSaved(id, filename): self.useImage(filename) self.imageCapture = QtMultimedia.QCameraImageCapture(self.camera) self.imageCapture.imageSaved.connect(imageSaved) tmpFile = os.path.abspath(os.path.join('archive', '_capture.jpg')) self.imageCapture.capture(tmpFile) self.camera.stop()