gpt4 book ai didi

python - 使用PyQt5录制视频

转载 作者:行者123 更新时间:2023-12-02 16:34:18 34 4
gpt4 key购买 nike

鉴于以下PyQt代码,我可以完美捕获网络摄像头的流视频。

现在,我想修改代码,以便添加一个名为“记录”按钮的按钮,一旦按下该按钮,就可以捕获流视频并保存视频。 我该怎么做?

我想录制视频以进行脸部识别训练。

class MainWindow(QWidget):
# class constructor
def __init__(self):
# call QWidget constructor
super().__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)

# icon
self.setWindowIcon(QtGui.QIcon('icon.png'))
# create a timer
self.timer = QTimer()
# set timer timeout callback function

self.timer.timeout.connect(self.viewCam)
# set control_bt callback clicked function
self.ui.control_bt.clicked.connect(self.controlTimer)

# view camera
def viewCam(self):
# read image in BGR format
ret, image = self.cap.read()
# convert image to RGB format
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# get image infos
height, width, channel = image.shape
step = channel * width
# create QImage from image
# cv2.imshow('dna', image)
qImg = QImage(image.data, width, height, step, QImage.Format_RGB888)
# show image in img_label
self.ui.image_label.setPixmap(QPixmap.fromImage(qImg))


# start/stop timer
def controlTimer(self):
# if timer is stopped
if not self.timer.isActive():
# create video capture
self.cap = cv2.VideoCapture(0)
# start timer
self.timer.start(20)
# update control_bt text
self.ui.control_bt.setText("Stop")
# if timer is started
else:
# stop timer
self.timer.stop()
# release video capture
self.cap.release()
# update control_bt text
self.ui.control_bt.setText("Start")
self.ui.image_label.setText("Camera")



if __name__ == '__main__':
app = QApplication(sys.argv)

# create and show mainWindow
mainWindow = MainWindow()
mainWindow.show()

sys.exit(app.exec_())

最佳答案

回答

class MainWindow(QWidget):
# class constructor
def __init__(self):
# call QWidget constructor
super().__init__()
self.ui = Ui_Form()
self.ui.setupUi(self)
# icon
self.setWindowIcon(QIcon('icon.png'))
# create a timer
self.viewTimer = QTimer()
self.saveTimer = QTimer()
# set timer timeout callback function
self.viewTimer.timeout.connect(self.viewCam)
self.saveTimer.timeout.connect(self.saveCam)
# set control_bt callback clicked function
self.ui.control_bt.clicked.connect(self.controlView)
self.ui.save_bt.clicked.connect(self.controlSave)
# set video output
self.out = cv2.VideoWriter('outpy.avi',cv2.VideoWriter_fourcc('M', 'J', 'P', 'G'), 24, (640, 480))
# waring message box
self.msg = QMessageBox()
self.msg.setWindowIcon(QIcon('warning.png'))


# view camera
def viewCam(self):
if not self.saveTimer.isActive():
# read image in BGR format
ret, image = self.cap.read()
# get image infos
height, width, channel = image.shape
step = channel * width
# create QImage from image
qImg = QImage(image.data, width, height, step, QImage.Format_BGR888)
# show image in img_label
self.ui.image_label.setPixmap(QPixmap.fromImage(qImg))


# start/stop timer
def controlSave(self):
# if camera timer active
if self.viewTimer.isActive():
self.msg.setWindowTitle("Warning")
self.msg.setText("Please stop the camera")
self.msg.exec_()
# if timer is stopped
if not self.saveTimer.isActive():
if not self.viewTimer.isActive():
# create video capture
self.cap = cv2.VideoCapture(0)
# start timer
self.saveTimer.start(30)
# update save_bt text
self.ui.save_bt.setText("Stop")
# if timer is started
else:
# stop timer
self.saveTimer.stop()
# release video capture
self.cap.release()
# update save_bt text
self.ui.save_bt.setText("Save")
self.ui.image_label.setText("Camera")

def controlView(self):
# if timer is stopped
if self.saveTimer.isActive():
self.msg.setWindowTitle("Warning")
self.msg.setText("Please stop recording")
self.msg.exec_()
if not self.viewTimer.isActive():
if not self.saveTimer.isActive():
# create video capture
self.cap = cv2.VideoCapture(0)
# start timer
self.viewTimer.start(30)
# update control_bt text
self.ui.control_bt.setText("Stop")
# if timer is started
else:
# stop timer
self.viewTimer.stop()
# release video capture
self.cap.release()
# update control_bt text
self.ui.control_bt.setText("Start")
self.ui.image_label.setText("Camera")

def saveCam(self):
if not self.viewTimer.isActive():
ret, image = self.cap.read()
# get image infos
height, width, channel = image.shape
step = channel * width
# write video
self.out.write(image)
# create QImage from image
qImg = QImage(image.data, width, height, step, QImage.Format_BGR888)
# show image in img_label
self.ui.image_label.setPixmap(QPixmap.fromImage(qImg))

关于python - 使用PyQt5录制视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61265568/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com