yolov8 pyside6
时间: 2025-05-09 16:22:12 浏览: 24
### 集成 YOLOv8 到 PySide6 应用程序
YOLOv8 是一种先进的目标检测模型,而 PySide6 是基于 Qt 的 Python GUI 工具包。为了在 PySide6 中集成 YOLOv8,可以按照以下方法实现。
#### 准备工作
首先需要安装必要的依赖项。这包括 `ultralytics`(用于加载和运行 YOLOv8),以及 PySide6 和其他可能使用的库。
```bash
pip install ultralytics pyside6 opencv-python-headless numpy
```
#### 加载并初始化 YOLOv8 模型
通过 Ultralytics 提供的 API 来加载预训练的 YOLOv8 模型。以下是加载模型的一个简单示例:
```python
from ultralytics import YOLO
model = YOLO('yolov8n.pt') # Load pre-trained model (recommended for first-time users).
```
此代码片段展示了如何加载官方发布的轻量级版本 `yolov8n.pt`[^3]。
#### 创建图像处理函数
定义一个函数来执行对象检测并将结果显示出来。该函数会接收输入图片路径,并返回带有标注框的结果图。
```python
import cv2
import numpy as np
def detect_objects(image_path, model):
image = cv2.imread(image_path)
results = model.predict(source=image, conf=0.5)[0]
annotated_image = image.copy()
for box in results.boxes:
xyxy = box.xyxy[0].cpu().numpy() # Bounding box coordinates.
class_id = int(box.cls.cpu().numpy()[0]) # Class ID of detected object.
color = tuple(np.random.randint(0, 255, size=(3,)).tolist())
thickness = 2
label = f"{results.names[class_id]} {box.conf.item():.2f}"
# Draw bounding boxes and labels on the frame.
cv2.rectangle(
img=annotated_image,
pt1=(int(xyxy[0]), int(xyxy[1])),
pt2=(int(xyxy[2]), int(xyxy[3])),
color=color,
thickness=thickness
)
cv2.putText(
img=annotated_image,
text=label,
org=(int(xyxy[0]), max(int(xyxy[1])-10, 10)),
fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.9,
color=color,
thickness=thickness
)
return annotated_image
```
上述代码实现了对单张图片的目标检测功能,并绘制边界框与标签到原始图片上[^4]。
#### 将 OpenCV 图像转换为 QPixmap
由于 PySide 使用的是 Qt 组件,因此需要将由 OpenCV 处理后的 NumPy 数组转为 PyQt/PySide 可接受的数据结构——QPixmap 或 QImage。
```python
from PySide6.QtGui import QImage, QPixmap
def convert_cv_qt(cv_img):
"""Convert from an opencv image to QPixmap"""
rgb_image = cv2.cvtColor(cv_img, 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)
return QPixmap.fromImage(qt_image)
```
这段代码负责完成从 OpenCV 格式的图像数据至 PySide 显示组件所需的格式转化过程[^5]。
#### 构建 PySide6 用户界面并与逻辑绑定
创建一个简单的窗口应用程序,在其中展示摄像头捕获的画面或者本地文件夹中的静态照片经过 YOLOv8 分析之后的效果。
```python
from PySide6.QtWidgets import QApplication, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog
import sys
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("YOLOv8 Object Detection with PySide6")
layout = QVBoxLayout()
self.image_label = QLabel(self)
self.image_label.setFixedSize(640, 480)
button_select_file = QPushButton("Select Image", self)
button_select_file.clicked.connect(self.load_and_process_image)
layout.addWidget(self.image_label)
layout.addWidget(button_select_file)
self.setLayout(layout)
def load_and_process_image(self):
options = QFileDialog.Options()
file_name, _ = QFileDialog.getOpenFileName(self,"Choose an image","","Images (*.png *.jpg)",options=options)
if not file_name:
return
processed_image = detect_objects(file_name, model=model)
pixmap = convert_cv_qt(processed_image)
self.image_label.setPixmap(pixmap.scaled(self.image_label.width(), self.image_label.height()))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
```
以上脚本构建了一个基本图形化用户接口(GUI),允许使用者选取一张图片并通过调用之前编写的 `detect_objects()` 方法对其进行分析,最后更新界面上显示的内容[^6]。
---
###
阅读全文
相关推荐

















