# post_dect **Repository Path**: jack_cheng/post_dect ## Basic Information - **Project Name**: post_dect - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-02 - **Last Updated**: 2026-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 姿态分析 Demo 单文件 MediaPipe 姿态分析脚本。 读取一张输入图片,检测人体关键点,根据视角(正面/背面/侧面)采用不同的异常判断策略,并输出带有骨骼覆盖层的图片。 ## 功能说明 - 使用 [MediaPipe Pose](https://developers.google.com/mediapipe/solutions/vision/pose_landmarker) 检测 33 个人体关键点。 - 自动判断视角:`front`(正面)、`back`(背面)、`side`(侧面)。 - **正面/背面**:沿用动态最大距离策略,`max_distance = k * body_height`,默认 `k = 0.30`。 - **侧面**:使用 3D 深度(`z`)和肢体角度策略: - 头部前后偏移过大 - 躯干倾斜过大 - 膝盖/肘关节角度异常(过弯或过直) - 四肢在深度方向伸展过远 - 在输入图片副本上绘制绿色骨骼与关键点,跳过面部(0–10)和手部(17–22)关键点。 ## 项目文件 ``` . ├── pose_analysis.py # 主脚本 ├── pyproject.toml # 项目依赖配置 ├── person.jpg # 示例输入图片 ├── *_output_*.jpg # 运行后生成的示例输出图片 └── yolo11n-pose.pt # 当前脚本未使用(未来模型) ``` ## 环境要求 - Python 3.10 或 3.11(`pyproject.toml` 已限制为 `<3.12`) - [uv](https://docs.astral.sh/uv/getting-started/installation/) ## 安装依赖并运行 依赖已写入 `pyproject.toml`。由于新版 MediaPipe 不再提供 Intel Mac(x86_64)的 wheel,本项目已固定使用 `mediapipe==0.10.5`。推荐用 `uv` 一键创建虚拟环境并运行。 ### 方式一:自动安装依赖并运行 ```bash uv run pose_analysis.py ``` uv 会读取 `pyproject.toml`,自动创建 `.venv`、安装依赖并执行脚本。 ### 方式二:先同步依赖,再运行 ```bash uv sync uv run pose_analysis.py ``` `uv sync` 会根据 `pyproject.toml` 安装/更新依赖;`uv run` 使用 `.venv` 运行脚本。 ### 方式三:手动创建虚拟环境(可选) 如果你希望显式管理环境: ```bash uv venv --python 3.10 source .venv/bin/activate uv pip install -e . python pose_analysis.py ``` ## 运行示例 工作目录下已包含 `person.jpg`,直接执行: ```bash uv run pose_analysis.py ``` 预期输出: ```text View: front Body height: 1214.50 Max distance: 364.35 Abnormal pairs: 72 Output image: person_output_20260717144942.jpg ``` 输出图片会保存为 `{原文件名}_output_{时间戳}.jpg`。 ## 指定输入图片 脚本使用命令行参数读取输入图片,默认值为 `person.jpg`。 ```bash uv run pose_analysis.py --image_path="your_image.jpg" ``` 也可以同时调整阈值 `k`: ```bash uv run pose_analysis.py --image_path="your_image.jpg" --k=0.20 ``` 参数说明: - `image_path`:输入图片路径,支持常见图片格式(jpg、png 等)。 - `k`:动态距离阈值系数,默认 `0.30`。 ## 调整阈值 `k` 参数仅影响正面/背面视图的判断: 打开 `pose_analysis.py`,修改调用 `analyze_pose` 时的 `k` 参数: ```python result = analyze_pose(image_path, k=0.30) ``` - `k` 越小 → 阈值越严格,报告的异常点对越多。 - `k` 越大 → 阈值越宽松,报告的异常点对越少。 侧面视图的阈值在 `check_side()` 函数中固定,如需调整可修改其中的比例系数(如 `0.25 * body_height`、`0.35 * body_height` 等)。 ## 注意事项 - 本脚本使用 **MediaPipe Pose 0.10.5**,仓库中的 `yolo11n-pose.pt` 当前未被使用。 - 选择 `mediapipe==0.10.5` 是为了兼容 Intel Mac(x86_64);新版 MediaPipe 不再提供该平台的 wheel。 - 颜色值采用 OpenCV 的 BGR 格式。 - 目前暂无测试、lint 和 CI 配置。 - 如果未检测到人体姿态,`analyze_pose()` 会返回 `None`,此时访问 `result["body_height"]` 会报错。