基于 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 核心功能
- 图片检测:打开单张图片,进行摔倒检测并展示结果
- 视频检测:加载视频文件,逐帧实时检测并播放
- 摄像头实时检测:调用本地摄像头,实现实时摔倒监控
- 批量图片检测:选择文件夹,自动检测其中所有图片
- 结果保存:将检测结果(图片/视频)保存到本地
- 参数调节:
- 置信度阈值滑块(默认 0.25)
- IOU 阈值滑块(默认 0.45)
- 标签显示开关
- 检测结果展示:
- 目标类别与置信度
- 目标边界框坐标(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/

浙公网安备 33010602011771号