如何使用PySide2(Qt5)提升QCamera/QCameraViewfinder的帧率
摄像头监控应用帧率优化问题
我正在开发一个基于PySide2(Qt5)的简易摄像头监控拍照应用,原本参考的是PySide6(Qt6)的摄像头示例,但因为部署环境是i386架构的32位Debian 11,只能使用PySide2(版本5.15.2.1)。以下是我的可用代码:
from pathlib import Path from tempfile import NamedTemporaryFile from PySide2 import QtWidgets, QtMultimedia, QtMultimediaWidgets class SimpleCameraGUI(QtWidgets.QMainWindow): def __init__(self): super(SimpleCameraGUI, self).__init__(None) # main GUI elelements central_widget = QtWidgets.QWidget() hlayout = QtWidgets.QHBoxLayout() vlayout = QtWidgets.QVBoxLayout() self.start = QtWidgets.QPushButton('Start camera') self.stop = QtWidgets.QPushButton('Stop camera') self.take_pic = QtWidgets.QPushButton('Take Picture') self.camera_widget = QtMultimediaWidgets.QCameraViewfinder() # elements to Layout hlayout.addWidget(self.start) hlayout.addWidget(self.stop) hlayout.addWidget(self.take_pic) vlayout.addWidget(self.camera_widget) vlayout.addLayout(hlayout) central_widget.setLayout(vlayout) self.setCentralWidget(central_widget) # camera elements self.info = QtMultimedia.QCameraInfo() self.camera = QtMultimedia.QCamera(self.info.defaultCamera()) self.image = QtMultimedia.QCameraImageCapture(self.camera) self.camera.setViewfinder(self.camera_widget) # connections self.start.clicked.connect(self.camera.start) self.stop.clicked.connect(self.camera.stop) self.take_pic.clicked.connect(self.save_temp_picture) # show GUI self.show() def save_temp_picture(self): filename = NamedTemporaryFile(suffix='.jpg', delete=True) self.image.capture(filename.name) QtWidgets.QMessageBox.information( None, 'Temporary file saved', f'Location: <a href={Path(filename.name).as_uri()}>{filename.name}</a>' ) if __name__ == '__main__': app = QtWidgets.QApplication() win = SimpleCameraGUI() win.resize(640, 480) app.exec_()
应用能正常运行,但QCameraViewfinder部件内的视频帧率极低。我猜测这和帧率设置有关,但找不到修改参数的方法。试过使用QVideoWidget替代QCameraViewfinder,结果帧率依旧很低;也尝试过调用QCamera的setViewfinderSettings方法,但不清楚具体该怎么用。
内容的提问来源于stack exchange,提问作者kstenio
相关产品推荐
相关产品推荐

