赞
踩
本人是自己写yolov8项目时调用了摄像头,不会关闭,后来发现可以添加一个标志用来记录摄像头的状态。
self.is_camera_open = False # 添加一个标志来表示摄像头是否已经打开
初始化代码:
- self.openCamera = QtWidgets.QPushButton(self.centralwidget)
- self.closeCamera = QtWidgets.QPushButton(self.centralwidget)
-
- self.openCamera.clicked.connect(self.chose_cam)
- self.closeCamera.clicked.connect(self.close_cam)
- self.label3 = QtWidgets.QLabel(self.centralwidget)
- self.label3.setGeometry(QtCore.QRect(600, 200, 461, 381))
- self.label3.setObjectName("label3")
-
- # 其他初始化代码...
- self.openCamera.setText(_translate("MainWindow", "打开摄像头"))
- self.closeCamera.setText(_translate("MainWindow", "关闭检测"))
- self.label3.setText(_translate("MainWindow", "这里显示检测结果"))
-
- self.is_camera_open = False # 添加一个标志来表示摄像头是否已经打开
点击响应函数:
- self.openCamera.clicked.connect(self.chose_cam) # 开启摄像头按钮
- self.closeCamera.clicked.connect(self.close_cam) # 关闭摄像头按钮
打开摄像头代码:
- def chose_cam(self):
- if not self.is_camera_open:
- # 加载 YOLOv8 模型
- model = YOLO("runs/detect/train4/weights/best.pt")
-
- # 获取摄像头内容,参数 0 表示使用默认的摄像头
- cap = cv2.VideoCapture(0)
-
- self.is_camera_open = True # 设置摄像头已经打开的标志
-
- while self.is_camera_open:
- loop_start = cv2.getTickCount()
- success, frame = cap.read() # 读取摄像头的一帧图像
-
- if success:
- results = model.predict(source=frame) # 对当前帧进行目标检测并显示结果
- annotated_frame = results[0].plot()
-
- # 中间放自己的显示程序
- loop_time = cv2.getTickCount() - loop_start
- total_time = loop_time / cv2.getTickFrequency()
- FPS = int(1 / total_time)
- self.label1.setText(f"FPS: {FPS:.2f}")
-
- # 将图像数据转换为QImage格式
- height, width, channel = annotated_frame.shape
- bytes_per_line = 3 * width
- qimage = QtGui.QImage(
- annotated_frame.data, width, height, bytes_per_line, QtGui.QImage.Format_RGB888
- )
-
- # 将QImage转换为QPixmap
- pixmap = QtGui.QPixmap.fromImage(qimage)
-
- # 都执行:
- self.label3.setPixmap(pixmap)
- self.label3.setScaledContents(True)
- cv2.waitKey(1)
-
- cap.release() # 释放摄像头资源
- cv2.destroyAllWindows() # 关闭OpenCV窗口
关闭摄像头代码:
- def close_cam(self):
- self.is_camera_open = False # 设置摄像头关闭的标志
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。