192 lines
6.4 KiB
Markdown
192 lines
6.4 KiB
Markdown
|
|
# PoseFind 项目上下文指南
|
|||
|
|
|
|||
|
|
## 项目概述
|
|||
|
|
|
|||
|
|
PoseFind 是一个基于 MediaPipe 的人像姿态识别项目,专注于实现人体姿态估计和可视化。项目使用 Python 开发,主要面向计算机视觉和人机交互应用场景。
|
|||
|
|
|
|||
|
|
### 主要功能
|
|||
|
|
- 摄像头实时姿态检测
|
|||
|
|
- 图片单张/多人姿态识别
|
|||
|
|
- 33个全身姿态关键点检测
|
|||
|
|
- 姿态骨架可视化绘制
|
|||
|
|
|
|||
|
|
### 技术栈
|
|||
|
|
- **语言**: Python 3.7+
|
|||
|
|
- **核心框架**: MediaPipe (Google 开源的姿态估计库)
|
|||
|
|
- **图像处理**: OpenCV (opencv-python)
|
|||
|
|
- **图像操作**: Pillow
|
|||
|
|
- **许可证**: Apache License 2.0
|
|||
|
|
|
|||
|
|
### 架构设计
|
|||
|
|
项目采用面向对象设计,核心类为 `PoseDetector`,包含以下关键组件:
|
|||
|
|
- 双检测器模式:静态检测器(用于多人检测)和流式检测器(用于实时视频)
|
|||
|
|
- 姿态检测与绘制功能分离
|
|||
|
|
- 支持单人和多人姿态信息提取
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
posefind/
|
|||
|
|
├── pose_detector.py # 主程序文件,包含 PoseDetector 类和主函数
|
|||
|
|
├── requirements.txt # Python 依赖列表
|
|||
|
|
├── README.md # 项目简介和快速开始指南
|
|||
|
|
├── USAGE.md # 详细使用说明文档
|
|||
|
|
├── LICENSE # Apache 2.0 许可证
|
|||
|
|
├── test.webp # 测试图片
|
|||
|
|
├── yolov8s.onnx # YOLOv8 模型文件(当前未使用)
|
|||
|
|
├── .gitignore # Git 忽略规则(标准 Python 项目配置)
|
|||
|
|
└── AGENTS.md # 本文件,AI 助手上下文指南
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 构建和运行
|
|||
|
|
|
|||
|
|
### 环境准备
|
|||
|
|
```bash
|
|||
|
|
# 安装依赖
|
|||
|
|
pip install -r requirements.txt
|
|||
|
|
|
|||
|
|
# 如遇网络问题,可使用国内镜像源
|
|||
|
|
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 运行命令
|
|||
|
|
|
|||
|
|
#### 摄像头实时检测
|
|||
|
|
```bash
|
|||
|
|
python pose_detector.py
|
|||
|
|
```
|
|||
|
|
- 自动打开默认摄像头(索引 0)
|
|||
|
|
- 实时显示姿态检测结果
|
|||
|
|
- 按 `q` 键退出
|
|||
|
|
|
|||
|
|
#### 图片检测
|
|||
|
|
```bash
|
|||
|
|
python pose_detector.py <图片路径>
|
|||
|
|
```
|
|||
|
|
- 示例:`python pose_detector.py test.webp`
|
|||
|
|
- 显示带有姿态骨架的图片
|
|||
|
|
- 打印姿态关键点坐标信息
|
|||
|
|
- 按任意键关闭窗口
|
|||
|
|
|
|||
|
|
### 测试说明
|
|||
|
|
- 项目使用 `test.webp` 作为示例测试图片
|
|||
|
|
- 暂无自动化测试脚本,需手动测试功能
|
|||
|
|
|
|||
|
|
## 开发约定
|
|||
|
|
|
|||
|
|
### 代码风格
|
|||
|
|
- **注释语言**: 中文(项目主要面向中文用户)
|
|||
|
|
- **文档字符串**: 使用 Google 风格的 docstring
|
|||
|
|
- **类和函数命名**: 遵循 PEP 8 规范,使用驼峰命名法(类名)和下划线命名法(函数/变量)
|
|||
|
|
- **代码组织**: 将核心逻辑封装在类中,功能模块化
|
|||
|
|
|
|||
|
|
### 关键类和方法
|
|||
|
|
|
|||
|
|
#### PoseDetector 类
|
|||
|
|
**位置**: `pose_detector.py`
|
|||
|
|
|
|||
|
|
核心方法:
|
|||
|
|
- `__init__()`: 初始化两个 MediaPipe Pose 检测器(静态和流式)
|
|||
|
|
- `detect_pose(image)`: 单人姿态检测(流式模式,用于视频)
|
|||
|
|
- `detect_poses(image)`: 多人姿态检测(静态模式,用于图片)
|
|||
|
|
- `draw_pose(image, results, color)`: 绘制单个姿态骨架
|
|||
|
|
- `draw_poses(image, pose_results)`: 绘制多个姿态骨架(不同颜色)
|
|||
|
|
- `get_pose_info(results)`: 获取单人姿态信息
|
|||
|
|
- `get_poses_info(pose_results)`: 获取多人姿态信息
|
|||
|
|
|
|||
|
|
**配置参数**:
|
|||
|
|
- `model_complexity=1`: 中等复杂度模型
|
|||
|
|
- `min_detection_confidence=0.5`: 最小检测置信度
|
|||
|
|
- `min_tracking_confidence=0.5`: 最小追踪置信度
|
|||
|
|
|
|||
|
|
#### 主函数
|
|||
|
|
- `run_webcam()`: 摄像头检测模式的主循环
|
|||
|
|
- `run_image(image_path)`: 图片检测模式
|
|||
|
|
- `main()`: 程序入口,根据命令行参数选择运行模式
|
|||
|
|
|
|||
|
|
### 依赖版本
|
|||
|
|
```
|
|||
|
|
opencv-python==4.8.1.78
|
|||
|
|
mediapipe==0.10.8
|
|||
|
|
Pillow==10.1.0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 多人检测说明
|
|||
|
|
- MediaPipe Pose 主要优化单人检测
|
|||
|
|
- 静态模式下可以尝试检测多个人物
|
|||
|
|
- 每个人物使用不同颜色区分(绿、红、蓝、黄、紫、青)
|
|||
|
|
- 对于复杂多人场景,检测结果可能不完整
|
|||
|
|
|
|||
|
|
### 常见问题处理
|
|||
|
|
1. **摄像头无法打开**: 检查摄像头占用,尝试修改索引(0, 1, 2...)
|
|||
|
|
2. **检测效果不佳**: 确保光线充足、人物完整可见、避免复杂背景
|
|||
|
|
3. **依赖安装失败**: 使用国内镜像源安装
|
|||
|
|
4. **多人检测不准确**: MediaPipe 局限性,可考虑集成 YOLO 等目标检测器
|
|||
|
|
|
|||
|
|
### 扩展方向建议
|
|||
|
|
- 添加姿态识别功能(站立、坐着、举手等)
|
|||
|
|
- 支持视频文件输入
|
|||
|
|
- 姿态数据保存和加载
|
|||
|
|
- 集成目标检测器实现更精确的多人检测
|
|||
|
|
- 姿态异常检测
|
|||
|
|
- 姿态轨迹跟踪
|
|||
|
|
|
|||
|
|
## Git 工作流
|
|||
|
|
|
|||
|
|
### 分支信息
|
|||
|
|
- **当前分支**: main
|
|||
|
|
- **远程仓库**: http://47.107.61.133:3000/lirh/posefind.git
|
|||
|
|
|
|||
|
|
### 提交规范
|
|||
|
|
- 提交信息应简洁明确,说明"为什么"而非"是什么"
|
|||
|
|
- 示例:`Add pose detector implementation with YOLOv8 and supporting files`
|
|||
|
|
|
|||
|
|
### 忽略规则
|
|||
|
|
项目使用标准 Python `.gitignore`,忽略以下内容:
|
|||
|
|
- Python 编译文件 (`__pycache__/`, `*.pyc`)
|
|||
|
|
- 虚拟环境 (`.venv/`, `venv/`)
|
|||
|
|
- IDE 配置 (`.idea/`, `.vscode/`)
|
|||
|
|
- 构建产物 (`dist/`, `build/`)
|
|||
|
|
- 测试覆盖率文件 (`.coverage`, `htmlcov/`)
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **MediaPipe 局限性**: MediaPipe Pose 模型主要针对单人优化,多人检测能力有限
|
|||
|
|
2. **模型文件**: 项目中包含 `yolov8s.onnx` 文件,但当前代码未使用,可能是未来的扩展方向
|
|||
|
|
3. **中文环境**: 项目文档和注释使用中文,维护时保持一致性
|
|||
|
|
4. **跨平台**: 代码支持 Windows/Linux/macOS,但摄像头索引可能因系统而异
|
|||
|
|
5. **资源管理**: 使用 `try-finally` 确保摄像头和窗口正确释放
|
|||
|
|
|
|||
|
|
## 开发工具
|
|||
|
|
|
|||
|
|
### 可用工具
|
|||
|
|
- Python (需在虚拟环境中运行)
|
|||
|
|
- Git (版本 2.45.1.windows.1)
|
|||
|
|
- FFmpeg (已安装,可用于视频处理)
|
|||
|
|
- curl (已安装)
|
|||
|
|
|
|||
|
|
### 不可用工具
|
|||
|
|
- `rg` (ripgrep) - 使用 `search_file_content` 工具替代
|
|||
|
|
- `gh` (GitHub CLI)
|
|||
|
|
- `wget` - 使用 `curl` 替代
|
|||
|
|
|
|||
|
|
### Python 执行
|
|||
|
|
注意:当前环境中 `python` 命令不可用,需要在虚拟环境中运行。项目使用 `.venv` 虚拟环境(已忽略)。
|
|||
|
|
|
|||
|
|
## 维护指南
|
|||
|
|
|
|||
|
|
### 修改代码时
|
|||
|
|
1. 保持中文注释和文档字符串的一致性
|
|||
|
|
2. 遵循现有的类和方法命名规范
|
|||
|
|
3. 确保资源正确释放(摄像头、窗口)
|
|||
|
|
4. 添加功能时更新相关文档(USAGE.md)
|
|||
|
|
|
|||
|
|
### 添加新依赖时
|
|||
|
|
1. 在 `requirements.txt` 中添加具体版本号
|
|||
|
|
2. 测试在不同平台上的兼容性
|
|||
|
|
3. 更新 USAGE.md 中的环境要求部分
|
|||
|
|
|
|||
|
|
### 修复 Bug 时
|
|||
|
|
1. 先在 USAGE.md 的"常见问题"部分记录
|
|||
|
|
2. 如涉及核心逻辑,更新相关方法文档
|
|||
|
|
3. 考虑添加错误处理和用户友好的提示信息
|