当前位置:   article > 正文

yolov8调用摄像头嵌入pyqt界面(打开关闭)_yolov8 唤醒摄像头

yolov8 唤醒摄像头

本人是自己写yolov8项目时调用了摄像头,不会关闭,后来发现可以添加一个标志用来记录摄像头的状态。

self.is_camera_open = False  # 添加一个标志来表示摄像头是否已经打开

初始化代码:

  1. self.openCamera = QtWidgets.QPushButton(self.centralwidget)
  2. self.closeCamera = QtWidgets.QPushButton(self.centralwidget)
  3. self.openCamera.clicked.connect(self.chose_cam)
  4. self.closeCamera.clicked.connect(self.close_cam)
  5. self.label3 = QtWidgets.QLabel(self.centralwidget)
  6. self.label3.setGeometry(QtCore.QRect(600, 200, 461, 381))
  7. self.label3.setObjectName("label3")
  8. # 其他初始化代码...
  9. self.openCamera.setText(_translate("MainWindow", "打开摄像头"))
  10. self.closeCamera.setText(_translate("MainWindow", "关闭检测"))
  11. self.label3.setText(_translate("MainWindow", "这里显示检测结果"))
  12. self.is_camera_open = False # 添加一个标志来表示摄像头是否已经打开

点击响应函数:

  1. self.openCamera.clicked.connect(self.chose_cam) # 开启摄像头按钮
  2. self.closeCamera.clicked.connect(self.close_cam) # 关闭摄像头按钮

打开摄像头代码:

  1. def chose_cam(self):
  2. if not self.is_camera_open:
  3. # 加载 YOLOv8 模型
  4. model = YOLO("runs/detect/train4/weights/best.pt")
  5. # 获取摄像头内容,参数 0 表示使用默认的摄像头
  6. cap = cv2.VideoCapture(0)
  7. self.is_camera_open = True # 设置摄像头已经打开的标志
  8. while self.is_camera_open:
  9. loop_start = cv2.getTickCount()
  10. success, frame = cap.read() # 读取摄像头的一帧图像
  11. if success:
  12. results = model.predict(source=frame) # 对当前帧进行目标检测并显示结果
  13. annotated_frame = results[0].plot()
  14. # 中间放自己的显示程序
  15. loop_time = cv2.getTickCount() - loop_start
  16. total_time = loop_time / cv2.getTickFrequency()
  17. FPS = int(1 / total_time)
  18. self.label1.setText(f"FPS: {FPS:.2f}")
  19. # 将图像数据转换为QImage格式
  20. height, width, channel = annotated_frame.shape
  21. bytes_per_line = 3 * width
  22. qimage = QtGui.QImage(
  23. annotated_frame.data, width, height, bytes_per_line, QtGui.QImage.Format_RGB888
  24. )
  25. # 将QImage转换为QPixmap
  26. pixmap = QtGui.QPixmap.fromImage(qimage)
  27. # 都执行:
  28. self.label3.setPixmap(pixmap)
  29. self.label3.setScaledContents(True)
  30. cv2.waitKey(1)
  31. cap.release() # 释放摄像头资源
  32. cv2.destroyAllWindows() # 关闭OpenCV窗口

关闭摄像头代码:

  1. def close_cam(self):
  2. self.is_camera_open = False # 设置摄像头关闭的标志

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/447064
推荐阅读
相关标签
  

闽ICP备14008679号