基于YOLOv12和MediaPipe的人体跌倒检测系统


一个使用计算机视觉技术的实时跌倒检测系统,采用YOLOv12进行人体检测,MediaPipe进行姿态估计。该系统具有直观的仪表盘,用于监控和分析跌倒事件。
功能特点
- 实时检测:实时处理来自网络摄像头或视频文件的视频流
- 跌倒类型分类:区分四种跌倒类型:绊倒、滑倒、跌倒和绊跌
- 现代化PyQt5仪表盘:具有统计信息、图表和历史记录跟踪的用户友好界面
- 多人检测:可同时跟踪和分析多个人员
- 高级姿态分析:监测关键身体点(肩膀、臀部、脚部)以准确评估跌倒
- 可调节灵敏度:为不同环境微调检测阈值
- 智能跌倒计数:通过人员跟踪和冷却时间防止重复计数
- 自动跌倒快照:检测到跌倒时捕获并存储图像
- 声音警报:检测到跌倒时发出音频通知
- 命令行模式:还支持无头命令行模式以进行部署
系统要求
- Python 3.7-3.10(Python 3.11+可能与某些依赖项存在兼容性问题)
- PyTorch
- OpenCV
- MediaPipe
- Ultralytics (YOLOv12)
- PyQt5
- Matplotlib
- NumPy
安装说明
-
下载源码:
-
安装依赖项:
pip install -r requirements.txt -
安装PyQt5(如果requirements中未包含):
pip install PyQt5==5.15.10 PyQt5-Qt5==5.15.2 PyQt5-sip==12.13.0 matplotlib -
下载YOLOv12模型(首次运行时自动下载,或手动放置在项目根目录)
使用方法
仪表盘模式(推荐)
python fall_detection_system.py --mode dashboard
命令行模式
python fall_detection_system.py --mode cli --source 0
选项参数
--mode:应用程序模式(dashboard或cli)--model:YOLOv12模型文件路径(默认:yolov12n1.pt)--conf:检测置信度阈值(0-1)--source:视频源(0表示网络摄像头,或视频文件路径)--fall-threshold:跌倒检测灵敏度阈值(0-1)--angle-threshold:身体角度阈值(0-90度)--save-falls:检测到跌倒时保存帧--output-dir:保存跌倒快照的目录
系统架构
系统由几个关键组件组成:
- YOLOv12人体检测:识别视频帧中的人体
- MediaPipe姿态估计:从检测到的人体中提取骨骼数据
- 跌倒检测算法 :分析姿态数据以检测跌倒,标准包括:
- 相对于垂直方向的身体角度
- 身体纵横比(水平与垂直方向)
- 突然的垂直位置变化
- 运动模式分析
- 人员跟踪:跨帧跟踪个人以保持身份识别
- PyQt5仪表盘:提供实时监控和分析
跌倒分类标准
- 绊倒:逐渐的角度变化伴中等速度
- 滑倒:快速角度变化伴高速度
- 跌倒:前向动量伴中等角度变化
- 绊跌:最小水平移动伴显著垂直下降
项目结构
fall-detection-system/
├── models/
│ └── fall_detector.py # 核心跌倒检测模型
├── dashboard/
│ └── dashboard_app.py # PyQt5仪表盘UI应用程序
├── utils/
│ └── utils.py # 工具函数
├── fall_snapshots/ # 跌倒图像目录
├── fall_detection_system.py # 主应用程序脚本
├── README.md # 项目文档
└── requirements.txt # 项目依赖
最近改进
- 增强了跌倒检测算法,采用更严格的标准
- 添加了冷却时间以防止重复跌倒计数
- 改进了针对不同环境的灵敏度控制
- 添加了全面的跌倒类型分类
- 修复了关键点检测以获得更准确的姿态分析
- 改进了摄像头访问和处理的错误处理
- 优化了快照保存以减少磁盘使用
- 从Tkinter迁移到PyQt5以获得更现代的界面