当前位置: 首页 > news >正文

PySide6集成yolo v8实现图片人物检测、视频人物检测以及摄像头人物检测

  本篇博客介绍Python YOLO目标检测, 并在PySide6应用里集成YOLO v8实现图片人物检测、视频人物检测以及摄像头人物检测。例如下面是图片人物检测:
在这里插入图片描述
视频人物检测

在这里插入图片描述
摄像头人物检测

在这里插入图片描述
视频讲解地址:https://www.bilibili.com/video/BV1NtyQBwE4q/?spm_id_from=333.1007.0.0&vd_source=dddbd48a76f0f870e223c6781ad043ab

一、YOLO介绍

  YOLO(You Only Look Once)是一种基于深度学习的实时目标检测算法,由 Joseph Redmon 等人于 2016 年提出。它最大的特点是:一次性地(Only Once)完成图像中所有目标的检测与分类。

1.1 YOLO版本演化

  YOLOv1 (2016) 首次提出,把检测变成回归问题,速度快但小目标检测弱。
  YOLOv2 (2017) 加入 BatchNorm、Anchor Boxes,提高精度。
  YOLOv3 (2018) 多尺度预测、残差结构(Darknet-53),兼顾速度与精度。
  YOLOv4 (2020) 引入 CSPDarknet、Mish 激活、PANet 结构,进一步提升性能。
  YOLOv5 (2020, Ultralytics) PyTorch 实现,易部署,支持自动混合精度(AMP)、模型剪枝等。
  YOLOv7 (2022) 引入 E-ELAN 模块,性能极高。
  YOLOv8 (2023) 由 Ultralytics 推出,支持检测、分割、姿态估计等一体化任务。
  YOLOv9 (2024) 提出 G2Flow 结构与 Gelan 主干,精度与速度再度提升。

1.2 YOLO 的优势

  • 实时性强:一次推理即可输出结果(30~150 FPS)
  • 端到端训练:无需复杂的候选框生成
  • 结构简单、易部署:广泛应用于嵌入式设备(如 Jetson、RK3588)
  • 可扩展性强:可用于检测、分割、姿态估计、多任务融合

1.3 YOLO 的典型应用

  • 车载摄像头目标检测(行人、车辆、交通标志)
  • 安防监控(人流统计、异常检测)
  • 医学影像分析(肿瘤检测)
  • 工业缺陷检测(瑕疵识别)
  • 智能零售(顾客行为分析)
  • 航拍目标识别(船只、建筑、农田)

二、YOLO环境安装

  在安装yolo环境时建议使用python虚拟环境,本篇博客使用的是miniconda创建python虚拟环境。关于PySide6、conda的学习可以看这个教程:PySide6教程,下面在win11系统,演示yolo环境的安装:

(1)使用conda创建虚拟环境

conda create --name yolo python=3.13
conda activate yolo

(2)安装opencv-python

pip install opencv-python

(3)安装torch
  torch分为gpu和cpu版本,如果电脑有英伟达显卡,可以先安装cuda, 关于cuda的安装可以去cuda官网下载cuda运行时进行安装。输入nvcc --version 可以查看电脑cuda的版本,如下图:
在这里插入图片描述

  进入pytorch官网 https://pytorch.org/,点击Get started查看torch安装命令:
在这里插入图片描述
  我的电脑是RTX3060, cuda12.9, 那么可以选择CUDA12.8版本,命令如下:

pip3 install torch torchvision --index-url https://download.pytorch.org/whl/cu128

  如果电脑是核心显卡,可以选择cpu版本,命令如下:

pip3 install torch torchvision

(4)安装yolo, 命令如下:

pip install ultralytics

(5)安装pyside6

pip install PySide6

三、YOLO代码演示

示例代码1:

import ultralytics
from ultralytics import YOLOprint(ultralytics.__version__)
model = YOLO("yolov8n.pt")  # 自动下载模型
print("YOLO loaded successfully!")

输入结果
8.3.223
YOLO loaded successfully!
由上面输出可知,当前用的是YOLO v8

示例代码2:

下面是在PySide6程序里使用yolo:

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog, QComboBox
from PySide6.QtCore import QTimer, Qt
from PySide6.QtGui import QImage, QPixmap
import cv2
from ultralytics import YOLOclass YOLODetectionApp(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("YOLOv8 Person Detection with PySide6")self.setGeometry(100, 100, 800, 600)# 初始化 YOLO 模型(使用 nano 版本,轻量级,适合 CPU)self.model = YOLO("yolov8n.pt")  # 自动下载,如果没有# GUI 组件self.central_widget = QWidget()self.setCentralWidget(self.central_widget)layout = QVBoxLayout(self.central_widget)self.label = QLabel(self)self.label.setAlignment(Qt.AlignCenter)layout.addWidget(self.label)# 按钮:加载图片self.load_image_btn = QPushButton("Load Image for Person Detection", self)self.load_image_btn.clicked.connect(self.load_and_detect_image)layout.addWidget(self.load_image_btn)# 下拉框:选择视频源self.video_source_combo = QComboBox(self)self.video_source_combo.addItems(["Camera", "Load Video File"])layout.addWidget(self.video_source_combo)# 按钮:启动视频检测self.start_video_btn = QPushButton("Start Video Person Detection", self)self.start_video_btn.clicked.connect(self.start_video_detection)layout.addWidget(self.start_video_btn)# 定时器用于视频帧更新self.timer = QTimer(self)self.timer.timeout.connect(self.process_video_frame)# 视频捕获对象self.cap = Noneself.is_video_running = Falsedef load_and_detect_image(self):# 打开文件对话框选择图片file_path, _ = QFileDialog.getOpenFileName(self, "Select Image", "", "Image Files (*.png *.jpg *.bmp)")if not file_path:return# 读取图片frame = cv2.imread(file_path)if frame is None:self.label.setText("Failed to load image!")return# 进行检测results = self.model(frame)# 过滤并绘制只显示人物annotated_frame = self.draw_person_boxes(frame, results)# 显示在 QLabelself.display_frame(annotated_frame)def start_video_detection(self):if self.is_video_running:self.stop_video()self.start_video_btn.setText("Start Video Person Detection")returnsource = self.video_source_combo.currentText()if source == "Camera":self.cap = cv2.VideoCapture(0)  # 摄像头else:file_path, _ = QFileDialog.getOpenFileName(self, "Select Video", "", "Video Files (*.mp4 *.avi)")if not file_path:returnself.cap = cv2.VideoCapture(file_path)if not self.cap.isOpened():self.label.setText("Failed to open video source!")returnself.is_video_running = Trueself.timer.start(30)  # 每 30ms 更新一帧self.start_video_btn.setText("Stop Video Detection")def process_video_frame(self):ret, frame = self.cap.read()if not ret:self.stop_video()return# 进行检测results = self.model(frame, verbose=False)  # verbose=False 减少日志# 过滤并绘制只显示人物annotated_frame = self.draw_person_boxes(frame, results)# 显示self.display_frame(annotated_frame)def draw_person_boxes(self, frame, results):# 复制帧以绘制annotated_frame = frame.copy()for result in results:for box in result.boxes:if int(box.cls) == 0:  # 0 是 COCO 数据集中的 'person' 类别x1, y1, x2, y2 = map(int, box.xyxy[0])conf = float(box.conf)cv2.rectangle(annotated_frame, (x1, y1), (x2, y2), (0, 255, 0), 2)  # 绿色框cv2.putText(annotated_frame, f"Person: {conf:.2f}", (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)return annotated_framedef display_frame(self, frame):# 转换为 RGB 并创建 QImagergb_image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)height, width, channel = rgb_image.shapebytes_per_line = 3 * widthq_img = QImage(rgb_image.data, width, height, bytes_per_line, QImage.Format_RGB888)self.label.setPixmap(QPixmap.fromImage(q_img).scaled(self.label.size(), Qt.KeepAspectRatio))def stop_video(self):self.timer.stop()if self.cap:self.cap.release()self.is_video_running = Falseself.label.clear()def closeEvent(self, event):self.stop_video()super().closeEvent(event)if __name__ == "__main__":app = QApplication(sys.argv)window = YOLODetectionApp()window.show()sys.exit(app.exec())

运行结果:
在这里插入图片描述
点击上方按钮,即可进行加载图片视频进行YOLO目标检测。

注意事项和调试
● 性能:CPU 模式下,视频检测可能延迟。如果太慢,尝试:
○ 使用更小的输入大小:修改 results = self.model(frame, imgsz=320)。
○ 或切换到 YOLOv8 的更轻模型(如 yolov8n.pt 已是最小)。
● 常见错误:
○ “No module named …”:检查 pip 安装。
○ 摄像头权限:Win11 设置 > 隐私 > 摄像头,确保允许。
○ 模型下载失败:手动下载 yolov8n.pt 从 https://github.com/ultralytics/assets/releases 并放在脚本同目录。
● 扩展:如果你想检测其他类别,修改 if int(box.cls) == 0(COCO 类别列表见 Ultralytics 文档)。
● 资源消耗:CPU 使用率高时,关闭其他程序。

除了在Python里使用,也可以在C++代码中使用yolo, 只是稍微复杂一点。

http://www.dtcms.com/a/556988.html

相关文章:

  • 求解器的智能决策之道
  • 卡片式网站p2p网站建设公司哪家好
  • Spring AI实现一个智能客服
  • 【浅析赛题,一等奖水平】思路模型数据相关资料!2025 年“大湾区杯”粤港澳金融数学建模竞赛B 题 稳定币的综合评价与发展分析~
  • 【攻防实战】通达OA文件上传联动Cobalt Strike打穿三层内网(上)
  • Linux应用开发-7-串口通讯与终端设备
  • 河北廊坊做网站一个网站后台怎么做
  • 企业培训考试系统源码php答题考试、题库、错题、练习考试等功能
  • 开拓视野:漫谈WebView领域相关技术
  • 如何在机器学习中使用特征提取对表格数据进行处理
  • UMI企业智脑助力数字化转型与智能化升级
  • xshell使用scp命令上传和下载文件
  • 命令行传参及调试——vscode平台
  • 【面试进阶】JavaScript 函数与对象进阶知识总结(重难点+记忆模板)
  • 《赋能AI解锁Coze智能体搭建核心技能(2)--- 智能体开发基础》
  • 自贡网站优化js网站开发视频教程
  • 驱动增长,而非浪费:8步整合SEO与PMax,解锁Google AI的隐藏流量
  • 【图像处理基石】如何在图像中实现光晕的星芒效果?
  • Node.js 解释环境变量的定义、作用及在Node.js中的重要性,区分开发、测试、生产环境配置需求。
  • Rust 快速入门:从零到上手的系统指南
  • 做家政网站网站公司做的网站有最字
  • kafka 延迟消费配置
  • Win32 API 简洁版
  • RocketMQ 是什么?它的架构是怎么样的?和 Kafka 又有什么区别?
  • 企业微信网站建设方案模板下载wordpress几种系统
  • Token Activation Map to Visually Explain Multimodal LLMs
  • RHCSA-15网络管理
  • cpp 02
  • 中国建设银行官网网站忻州市城乡建设管理局网站
  • 【机器学习深度学习】强化学习与监督学习SFT、RL、RLHF、PPO、DPO