基于 YOLOv8 的摔倒检测系统

基于 YOLOv8 的摔倒检测系统

利用深度学习目标检测技术,实现对人员摔倒行为的实时识别与预警,保障老年人、独居者等弱势群体的安全。


一、项目概述

本项目基于 Ultralytics YOLOv8 目标检测框架,构建了一套完整的摔倒检测系统。系统能够自动识别图像或视频中是否存在人员摔倒行为,并通过直观的图形化界面(GUI)实时展示检测结果,包括目标类别、置信度、边界框坐标等信息。

应用场景:

  • 养老院、医院等医疗机构的跌倒监护
  • 独居老人家庭安全监测
  • 公共场所(如地铁站、商场)的安全预警
  • 智能安防视频分析

二、数据集介绍

2.1 数据来源

本项目的训练数据集来源于 Roboflow Universe 平台(wizo 数据集),采用 CC BY 4.0 开源许可协议。数据集经过 Roboflow 平台统一预处理和标注,标注格式为 YOLO v7 PyTorch 格式(与 YOLOv8 兼容)。

2.2 数据集规模

划分 图片数量 说明
训练集(Train) 909 张 用于模型参数学习
验证集(Valid) 101 张 用于训练过程中的模型评估
测试集(Test) 51 张 用于最终模型性能测试
合计 1061 张 —

2.3 识别类别

本系统为二分类目标检测任务,共识别 2 个类别:

类别 ID 英文名称 中文名称 说明
0 Fall Detected 摔倒 检测到人员处于摔倒/跌倒状态
1 NoFall Detected 正常 检测到人员处于正常站立/行走状态

2.4 数据预处理与增强

数据集在 Roboflow 平台上进行了以下预处理和增强操作:

  • 预处理:

    • 自动方向校正(去除 EXIF 方向信息)
    • 统一缩放到 640×640 像素(拉伸方式)
  • 数据增强:

    • 50% 概率的水平翻转(Horizontal Flip)
    • 等概率的 90° 旋转(无旋转 / 顺时针 / 逆时针)

三、模型训练

3.1 模型架构

采用 YOLOv8n(nano 版本)作为基础模型,该模型在精度与推理速度之间取得了良好的平衡,非常适合实时检测场景。

3.2 训练超参数

参数 值 说明
模型 YOLOv8n 轻量级目标检测模型
训练轮数(Epochs) 50 最大训练轮数
批次大小(Batch Size) 4 每批次处理的图片数量
输入尺寸(Image Size) 640×640 模型输入分辨率
优化器 SGD 随机梯度下降
初始学习率 0.01 学习率起点
动量(Momentum) 0.937 SGD 动量参数
权重衰减 0.0005 正则化参数
IOU 阈值 0.7 NMS 交并比阈值
数据增强 Mosaic、Flip、Rotate 马赛克增强 + 翻转 + 旋转

3.3 训练结果

模型训练完成后,最佳权重保存于 models/best.pt。训练过程中生成了以下评估图表:

  • PR 曲线(Precision-Recall Curve):评估精确率与召回率的权衡
  • F1 曲线:综合评估模型性能
  • P 曲线 / R 曲线:分别展示精确率和召回率随置信度的变化
  • 混淆矩阵:分析各类别的分类准确性

四、系统功能

4.1 技术栈

技术 版本 用途
Python ≥ 3.8 开发语言
PyTorch 1.9.0 深度学习框架
Ultralytics 8.0.199 YOLOv8 模型库
OpenCV 4.8.1.78 图像处理与视频读取
PyQt5 5.15.2 图形用户界面
NumPy / SciPy — 科学计算

4.2 核心功能

  1. 图片检测:打开单张图片,进行摔倒检测并展示结果
  2. 视频检测:加载视频文件,逐帧实时检测并播放
  3. 摄像头实时检测:调用本地摄像头,实现实时摔倒监控
  4. 批量图片检测:选择文件夹,自动检测其中所有图片
  5. 结果保存:将检测结果(图片/视频)保存到本地
  6. 参数调节:
    • 置信度阈值滑块(默认 0.25)
    • IOU 阈值滑块(默认 0.45)
    • 标签显示开关
  7. 检测结果展示:
    • 目标类别与置信度
    • 目标边界框坐标(xmin, ymin, xmax, ymax)
    • 检测结果表格(序号、文件路径、类别、置信度、坐标位置)

五、界面运行效果

5.1 初始界面

在这里插入图片描述

系统启动后呈现整洁的蓝白配色界面,主要区域包括:

  • 顶部标题栏:显示"基于YOLOv8的摔倒检测系统"
  • 左侧显示区:图片/视频/摄像头画面的展示区域,初始状态显示提示文字"请点击左侧按钮打开图片/视频/摄像头,开始摔倒检测"
  • 右侧参数面板:
    • 检测参数设置:置信度阈值和交并比(IOU)阈值的滑块调节,以及标签显示复选框
    • 检测结果:显示检测用时、目标数目、目标选择下拉框、类别、置信度和目标位置坐标
    • 操作按钮:打开图片、打开文件夹、打开视频、打开摄像头
  • 底部表格:检测结果与坐标信息表,包含序号、文件路径、类别、置信度、坐标位置五列

5.2 检测效果展示

在这里插入图片描述

当打开一张包含摔倒人员的图片后,系统自动完成检测并展示结果:

  • 检测画面:图片中摔倒人员被蓝色矩形框准确框选,框上方标注类别名称 "Fall Detected" 和置信度 "0.85"
  • 检测结果面板:
    • 用时:0.047 秒(极速推理)
    • 目标数目:1
    • 类型:摔倒
    • 置信度:84.81%
    • 目标位置:xmin=0, ymin=0, xmax=638, ymax=640
  • 底部表格:详细记录了检测目标的文件路径、类别(摔倒)、置信度(84.81%)和坐标位置 [0, 0, 638, 640]

六、项目结构

摔倒检测系统8_gui/
├── MainProgram.py          # 主程序入口,GUI 界面逻辑
├── Config.py               # 全局配置(模型路径、类别名称等)
├── detect_tools.py         # 检测工具函数(绘图、坐标转换等)
├── train.py                # 模型训练脚本
├── login_widget.py         # 登录界面组件
├── datasets/               # 数据集目录
│   ├── train/              # 训练集(909张)
│   ├── valid/              # 验证集(101张)
│   ├── test/               # 测试集(51张)
│   └── data.yaml           # 数据集配置文件
├── models/                 # 模型权重
│   ├── best.pt             # 最佳模型权重
│   └── exp35/              # 训练实验输出
├── UIProgram/              # 界面程序
│   ├── UiMain.py           # PyQt5 界面代码
│   ├── UiMain.ui           # Qt Designer 界面文件
│   └── style.css           # 界面样式表
├── Font/                   # 字体文件
├── save_data/              # 检测结果保存目录
└── requirements.txt        # 项目依赖

七、快速开始

7.1 环境安装

# 克隆或下载项目后,安装依赖
pip install -r requirements.txt

核心依赖包括:

torch==1.9.0
ultralytics==8.0.199
opencv-python==4.8.1.78
PyQt5==5.15.2
numpy
scipy

7.2 运行系统

python MainProgram.py

7.3 重新训练模型

如需使用自定义数据集重新训练:

python train.py

训练参数可在 train.py 或 datasets/data.yaml 中修改。


八、总结

本项目基于 YOLOv8 目标检测算法,构建了一套功能完善的摔倒检测系统。系统具备以下特点:

  • 高精度:基于 1061 张标注图片训练,能够准确区分"摔倒"和"正常"两种状态
  • 实时性:单张图片推理仅需约 0.047 秒,满足实时检测需求
  • 易用性:提供友好的图形化界面,支持图片、视频、摄像头等多种输入方式
  • 灵活性:支持置信度和 IOU 阈值的实时调节,适应不同场景需求
  • 可扩展性:基于 YOLOv8 框架,可方便地扩展更多检测类别或迁移到其他场景

未来可进一步引入时序分析(如结合连续帧判断摔倒动作的发生过程)和报警机制(检测到摔倒后自动发送通知),使系统更加完善和实用。

九、代码下载路径

有训练代码和训练好的模型以及训练过程,提供数据,提供GUI界面代码
项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
https://www.bilibili.com/video/BV16JaS6sEtH/
在这里插入图片描述

导航