yolov8可视化界面源代码
时间: 2025-05-23 08:52:43 浏览: 16
### 使用 YOLOv8 实现可视化检测界面的源代码示例
以下是基于 PyQt6 的完整源代码示例,用于实现一个简单的可视化检测界面。该界面能够实时捕获摄像头画面并通过 YOLOv8 模型进行目标检测。
#### 完整源代码
```python
import sys
import cv2
from PyQt6.QtCore import QTimer
from PyQt6.QtGui import QImage, QPixmap
from PyQt6.QtWidgets import QApplication, QLabel, QMainWindow, QPushButton, QVBoxLayout, QWidget
from ultralytics import YOLO
class YOLOv8DetectionApp(QMainWindow):
def __init__(self):
super().__init__()
# 初始化变量
self.cap = None
self.timer = QTimer()
self.model = YOLO('yolov8n.pt') # 加载预训练模型
# 设置窗口属性
self.setWindowTitle("YOLOv8 Visualization Interface")
self.setGeometry(100, 100, 800, 600)
# 创建控件
self.video_label = QLabel(self)
self.start_button = QPushButton("Start Camera", self)
self.stop_button = QPushButton("Stop Camera", self)
# 布局管理器
layout = QVBoxLayout()
layout.addWidget(self.video_label)
layout.addWidget(self.start_button)
layout.addWidget(self.stop_button)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
# 绑定按钮事件
self.start_button.clicked.connect(self.start_camera)
self.stop_button.clicked.connect(self.stop_camera)
# 定义定时器更新函数
self.timer.timeout.connect(self.update_frame)
def start_camera(self):
"""启动摄像头并开始实时检测"""
if not self.cap:
self.cap = cv2.VideoCapture(0) # 打开默认摄像头
if not self.cap.isOpened():
print("无法打开摄像头")
return
self.timer.start(30) # 每隔30ms刷新一帧
def stop_camera(self):
"""停止摄像头"""
if self.cap:
self.timer.stop() # 停止定时器
self.cap.release() # 关闭摄像头
self.cap = None
self.video_label.clear()
def update_frame(self):
"""读取摄像头帧并进行目标检测"""
ret, frame = self.cap.read()
if ret:
# 对当前帧进行目标检测
results = self.model(frame)[0]
annotated_frame = results.plot()
# 将OpenCV图像转换为QImage
rgb_image = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
h, w, ch = rgb_image.shape
bytes_per_line = ch * w
qt_image = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
# 显示图像到标签中
pixmap = QPixmap.fromImage(qt_image.scaledToWidth(700))
self.video_label.setPixmap(pixmap)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = YOLOv8DetectionApp()
window.show()
sys.exit(app.exec())
```
---
#### 功能详解
- **YOLOv8 模型加载**:通过 `YOLO('yolov8n.pt')` 加载预训练的小型模型[^1]。
- **摄像头初始化**:使用 OpenCV 的 `cv2.VideoCapture(0)` 函数开启默认摄像头设备。
- **定时器机制**:利用 PyQt6 的 `QTimer` 控制每 30 毫秒触发一次 `update_frame()` 方法,从而实现实时视频流处理。
- **目标检测与标注**:每一帧数据经过 YOLOv8 推理后,会自动绘制边界框和类别名称至原图上。
- **图像显示**:将 OpenCV 返回的 BGR 图像转换成 RGB 格式,并进一步封装为 PyQt6 支持的 `QImage` 数据类型以供 UI 展示[^3]。
---
###
阅读全文
相关推荐


















