class QmyMainWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) #调用父类构造函数,创建窗体 self.ui = Ui_MainWindow() #创建UI对象 self.ui.setupUi(self) #构造UI界面 self.__LabCameraState = QLabel("摄像头state:") self.__LabCameraState.setMinimumWidth(150) self.ui.statusBar.addWidget(self.__LabCameraState) self.__LabImageID = QLabel("图片文件ID:") self.__LabImageID.setMinimumWidth(100) self.ui.statusBar.addWidget(self.__LabImageID) self.__LabImageFile = QLabel("") #保存的图片文件名 ## self.ui.statusBar.addWidget(self.__LabImageFile) self.ui.statusBar.addPermanentWidget(self.__LabImageFile) self.camera = None #QCamera对象 cameras = QCameraInfo.availableCameras() #list[QCameraInfo] if len(cameras) > 0: self.__iniCamera() #初始化摄像头 self.__iniImageCapture() #初始化静态画图 self.camera.start() ## ==============自定义功能函数======================== def __iniCamera(self): ##创建 QCamera对象 camInfo = QCameraInfo.defaultCamera() #获取缺省摄像头,QCameraInfo self.ui.comboCamera.addItem(camInfo.description()) #摄像头描述 self.ui.comboCamera.setCurrentIndex(0) self.camera = QCamera(camInfo) #创建摄像头对象 self.camera.setViewfinder(self.ui.viewFinder) #设置取景框预览 ## camera.setCaptureMode(QCamera.CaptureViewfinder) #预览 self.camera.setCaptureMode(QCamera.CaptureStillImage) #设置为抓图 ## camera.setCaptureMode(QCamera.CaptureVideo) mode = QCamera.CaptureStillImage supported = self.camera.isCaptureModeSupported(mode) self.ui.checkStillImage.setChecked(supported) #支持拍照 supported = self.camera.isCaptureModeSupported(QCamera.CaptureVideo) self.ui.checkVideo.setChecked(supported) #支持视频录制 supported = self.camera.exposure().isAvailable() self.ui.checkExposure.setChecked(supported) #支持曝光补偿 supported = self.camera.focus().isAvailable() self.ui.checkFocus.setChecked(supported) #支持变焦 self.camera.stateChanged.connect(self.do_cameraStateChanged) def __iniImageCapture(self): ##创建 QCameraImageCapture对象 self.capturer = QCameraImageCapture(self.camera) settings = QImageEncoderSettings() #拍照设置 settings.setCodec("image/jpeg") #设置抓图图形编码 settings.setResolution(640, 480) #分辨率 settings.setQuality(QMultimedia.HighQuality) #图片质量 self.capturer.setEncodingSettings(settings) self.capturer.setBufferFormat(QVideoFrame.Format_Jpeg) #缓冲区格式 if self.ui.chkBoxSaveToFile.isChecked(): dest = QCameraImageCapture.CaptureToFile #保存到文件 else: dest = QCameraImageCapture.CaptureToBuffer #保存到缓冲区 self.capturer.setCaptureDestination(dest) #保存目标 self.capturer.readyForCaptureChanged.connect(self.do_imageReady) self.capturer.imageCaptured.connect(self.do_imageCaptured) self.capturer.imageSaved.connect(self.do_imageSaved) ## ==============event处理函数========================== ## ==========由connectSlotsByName()自动连接的槽函数============ @pyqtSlot(bool) ##设置保存方式 def on_chkBoxSaveToFile_clicked(self, checked): if checked: dest = QCameraImageCapture.CaptureToFile #保存到文件 else: dest = QCameraImageCapture.CaptureToBuffer #保存到缓冲区 self.capturer.setCaptureDestination(dest) #保存目标 @pyqtSlot() ##拍照 def on_actCapture_triggered(self): QSound.play("shutter.wav") #播放快门音效 self.camera.searchAndLock() #快门半按下时锁定摄像头参数 self.capturer.capture() #拍照 self.camera.unlock() #快门按钮释放时解除锁定 @pyqtSlot() ##打开摄像头 def on_actStartCamera_triggered(self): self.camera.start() @pyqtSlot() ##关闭摄像头 def on_actStopCamera_triggered(self): self.camera.stop() ## =============自定义槽函数=============================== def do_cameraStateChanged(self, state): ##摄像头状态变化 if (state == QCamera.UnloadedState): self.__LabCameraState.setText("摄像头state: UnloadedState") elif (state == QCamera.LoadedState): self.__LabCameraState.setText("摄像头state: LoadedState") elif (state == QCamera.ActiveState): self.__LabCameraState.setText("摄像头state: ActiveState") self.ui.actStartCamera.setEnabled(state != QCamera.ActiveState) self.ui.actStopCamera.setEnabled(state == QCamera.ActiveState) def do_imageReady(self, ready): ##是否可以拍照了 self.ui.actCapture.setEnabled(ready) def do_imageCaptured(self, imageID, preview): ##图片被抓取到内存 #preview是 QImage H = self.ui.LabImage.height() W = self.ui.LabImage.width() scaledImage = preview.scaled(W, H, Qt.KeepAspectRatio, Qt.SmoothTransformation) self.ui.LabImage.setPixmap(QPixmap.fromImage(scaledImage)) self.__LabImageID.setText("图片文件ID:%d" % imageID) self.__LabImageFile.setText("图片保存为: ") def do_imageSaved(self, imageID, fileName): ##图片被保存 self.__LabImageID.setText("图片文件ID:%d" % imageID) self.__LabImageFile.setText("图片保存为: " + fileName)
class QmyCamerawindow(QMainWindow): def __initCamera(self): camInfo = QCameraInfo.defaultCamera() self.camera = QCamera(camInfo) self.camera2 = QCamera(camInfo) self.camera.setViewfinder(self._ui.widget) self.camera2.setViewfinder(self._ui.widget_2) self.camera.setCaptureMode( QCamera.CaptureStillImage) #captureviewfinder self.camera2.setCaptureMode(QCamera.CaptureStillImage) def _initImageCapture(self): self.capture = QCameraImageCapture(self.camera) self.capture2 = QCameraImageCapture(self.camera2) setting = QImageEncoderSettings() setting.setCodec("image/jpeg") self.capture.setEncodingSettings(setting) self.capture.setBufferFormat(QVideoFrame.Format_Jpeg) self.capture.setCaptureDestination(QCameraImageCapture.CaptureToBuffer) self.capture.readyForCaptureChanged.connect(self.do_imageReady) self.capture.imageCaptured.connect(self.do_imageCaptured) self.capture2.setEncodingSettings(setting) self.capture2.setBufferFormat(QVideoFrame.Format_Jpeg) self.capture2.setCaptureDestination( QCameraImageCapture.CaptureToBuffer) self.capture2.readyForCaptureChanged.connect(self.do_imageReady) self.capture2.imageCaptured.connect(self.do_imageCaptured2) # self.capture.setCaptureDestination(QCameraImageCapture.CaptureToFile) def do_imageReady(self, ready): self._ui.actionActCaputure.setEnabled(ready) def do_imageCaptured2(self, image_id, preview): self.getpicname2() preview.save(self.picname2) cv2.waitKey(500) resultid = useract.find_one(self.facealbum_token, self.picname2) print(resultid) cv2.waitKey(500) data = sqlact.search_sql("student", resultid) print(data) self._ui.plainTextEdit_3.setPlainText(data[0][1]) self._ui.plainTextEdit_4.setPlainText(data[0][2]) self._ui.plainTextEdit_5.setPlainText(str(data[0][3])) # print(preview) def do_imageCaptured(self, image_id, preview): H = self._ui.label_2.height() W = self._ui.label_2.width() scaledImage = preview.scaled(W, H, Qt.KeepAspectRatio, Qt.SmoothTransformation) self._ui.label_2.setPixmap(QPixmap.fromImage(scaledImage)) self.getpicname() preview.save(self.picname) # useract.add_newone("student",name) def on_actionActCaputure_triggered(self): # QSound.play("shutter.wav") self.camera.searchAndLock() self.capture.capture() self.camera.unlock() # FName = fr"E:\iddatabasepic\cap{time.strftime('%Y%m%d%H%M%S', time.localtime())}" # self.flag += 1 # self.capture.capture(FName) # print(f"捕获图像保存到文件:{FName}.jpg") def on_actionActStartCamera_triggered(self): self.camera.start() self.flag = 1 def on_actionActCloseCamrera_triggered(self): self.camera.stop() self.flag = 0 def on_actionActExit_triggered(self): self.camera.stop() self.close() def gettext(self): self.text = self._ui.plainTextEdit.toPlainText() self.text2 = self._ui.plainTextEdit_2.toPlainText() useract.add_newone("student", self.text, self.text2, self.facealbum_token, self.picname) def getpicname(self): #获取图片名 self.picname = fr"E:\iddatabasepic\cap{time.strftime('%Y%m%d%H%M%S', time.localtime())}" + ".jpg" # print(self.text) def getpicname2(self): #获取图片名 self.picname2 = fr"E:\iddatabasepic\capnew{time.strftime('%Y%m%d%H%M%S', time.localtime())}" + ".jpg" def tabshift1(self): # print(self.tabWidget.currentIndex()) # print("hello") self._ui.tabWidget.setCurrentIndex(0) if self.flag2 == 1: self.camera2.stop() self.flag2 = 0 def tabshift2(self): self._ui.tabWidget.setCurrentIndex(1) if self.flag == 1: self.camera.stop() self.flag = 0 self.flag2 = 1 useract.group_all(self.facealbum_token) self.camera2.start() def tabshift3(self): self._ui.tabWidget.setCurrentIndex(2) if self.flag == 1: self.camera.stop() self.flag = 0 if self.flag2 == 1: self.camera2.stop() self.flag2 = 0 def searchcap(self): self.camera2.searchAndLock() self.capture2.capture() self.camera2.unlock() def dataview(self): view = sqlact.search_all_sql("student") self._ui.plainTextEdit_7.setPlainText(",".join( [str(t) for i in view for t in i])) def __init__(self, parent=None): super().__init__(parent) self._ui = Ui_MainWindowcamera() self.flag = 1 self.flag2 = 0 self._ui.setupUi(self) self.camera = None self.picname2 = "" self.picname = "" self.facealbum_token = "1577420387-3990379c-dcc2-4fe8-ae47-bf37a299118d" self._ui.btnget.clicked.connect(self.gettext) self._ui.addnew.clicked.connect(self.tabshift1) self._ui.searchinfo.clicked.connect(self.tabshift2) self._ui.pushButton_3.clicked.connect(self.tabshift3) self._ui.btncap.clicked.connect(self.searchcap) self._ui.btndata.clicked.connect(self.dataview) cameras = QCameraInfo.availableCameras() if len(cameras) > 0: self.__initCamera() self._initImageCapture() self.camera.start()