# 基于YOLOv12和MediaPipe的人体跌倒检测系统
一个使用计算机视觉技术的实时跌倒检测系统,采用YOLOv12进行人体检测,MediaPipe进行姿态估计。该系统具有直观的仪表盘,用于监控和分析跌倒事件。
## 功能特点
- **实时检测**:实时处理来自网络摄像头或视频文件的视频流
- **跌倒类型分类**:区分四种跌倒类型:绊倒、滑倒、跌倒和绊跌
- **现代化PyQt5仪表盘**:具有统计信息、图表和历史记录跟踪的用户友好界面
- **多人检测**:可同时跟踪和分析多个人员
- **高级姿态分析**:监测关键身体点(肩膀、臀部、脚部)以准确评估跌倒
- **可调节灵敏度**:为不同环境微调检测阈值
- **智能跌倒计数**:通过人员跟踪和冷却时间防止重复计数
- **自动跌倒快照**:检测到跌倒时捕获并存储图像
- **声音警报**:检测到跌倒时发出音频通知
- **命令行模式**:还支持无头命令行模式以进行部署
## 系统要求
- Python 3.7-3.10(Python 3.11+可能与某些依赖项存在兼容性问题)
- PyTorch
- OpenCV
- MediaPipe
- Ultralytics (YOLOv12)
- PyQt5
- Matplotlib
- NumPy
## 安装说明
1. 下载源码:
2. 安装依赖项:
```
pip install -r requirements.txt
```
3. 安装PyQt5(如果requirements中未包含):
```
pip install PyQt5==5.15.10 PyQt5-Qt5==5.15.2 PyQt5-sip==12.13.0 matplotlib
```
4. 下载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`:保存跌倒快照的目录
## 系统架构
系统由几个关键组件组成:
1. **YOLOv12人体检测**:识别视频帧中的人体
2. **MediaPipe姿态估计**:从检测到的人体中提取骨骼数据
3. **跌倒检测算法**:分析姿态数据以检测跌倒,标准包括:
- 相对于垂直方向的身体角度
- 身体纵横比(水平与垂直方向)
- 突然的垂直位置变化
- 运动模式分析
4. **人员跟踪**:跨帧跟踪个人以保持身份识别
5. **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以获得更现代的界面