Pose2Sim新手教程:从视频到3D关节角度的8步流水线,无需标记点与动捕工作室
【免费下载链接】pose2sim
Markerless kinematics with any cameras — From 2D Pose estimation to 3D OpenSim motion
Pose2Sim是一个开源 Python 工具包,专门做3D 无标记点运动分析(markerless kinematics):只要用多部手机、摄像头或 GoPro 从不同角度拍几段视频,它就能自动完成 2D 姿态估计、多相机同步、标定、三角化、滤波,最后输出 OpenSim 格式的全身3D 关节角度(.mot 文件)。全程无需在身体上贴反光标记点,也无需昂贵的动捕工作室,本地运行、数据不出门。
一、为什么选 Pose2Sim?
传统标记点动捕系统价格高、搭建麻烦,且贴标记点会妨碍自然运动。Pose2Sim 用深度学习姿态估计替代了反光标记点:
- 🎯研究级精度:经同行评审研究验证,关节角度误差约 2–6°
- 📹任意相机:手机、网络摄像头、GoPro 均可,受试者可穿普通衣物
- 👥多人支持:可同时追踪多人并自动跨相机关联
- 🦴完整 3D 运动学:直接输出 OpenSim 骨架模型与关节角度,可继续做地面反作用力、肌肉分析、动画等
它的名字来源于 "OpenPose to OpenSim"——以 2D 关键点为输入,以 OpenSim 3D 关节角度为输出。
二、准备工作:5 分钟搭好环境
一键安装 Pose2Sim(uv 环境)
推荐使用 uv(快速、轻量)创建环境。以 Linux/macOS 为例:
# 安装 uv curl -LsSf https://astral.sh/uv/install.sh | sh # 创建并激活环境 uv venv ~/.venv/pose2sim --python 3.13 source ~/.venv/pose2sim/bin/activate # 安装 Pose2Sim uv pip install pose2sim --upgrade💡 如需开发/编辑最新源码版本,可克隆后安装:
git clone --depth 1 https://gitcode.com/gh_mirrors/po/pose2sim然后cd pose2sim && uv pip install -e .
用 Demo 项目当模板
仓库自带三个开箱即用的示例项目,包含视频、标定文件和配置文件:
| Demo 项目 | 适用场景 |
|---|---|
| Demo_SinglePerson/ | 单人、4 相机(本教程用它) |
| Demo_MultiPerson/ | 多人同时分析 |
| Demo_Batch/ | 批量处理多个试验 |
把Demo_SinglePerson复制到你的工作目录,把要分析的视频放进videos/文件夹,然后编辑 Config.toml 的[project]部分:
| 参数 | 默认值 | 说明 |
|---|---|---|
multi_person | false | 是否多人分析;单人为false |
participant_height | 'auto' | 受试者身高(米),'auto' 自动估计 |
frame_rate | 'auto' | 帧率,自动从视频读取 |
frame_range | 'auto' | 分析的帧范围,如[10, 300] |
所有参数都在Config.toml中有详尽注释,放心按需修改。
三、8 步流水线详解
整个流程就是依次调用 8 个函数(源码入口见 Pose2Sim.py),也可用一行Pose2Sim.runAll()全部跑完:
from Pose2Sim import Pose2Sim Pose2Sim.calibration() # 1. 相机标定 Pose2Sim.poseEstimation() # 2. 2D 姿态估计 Pose2Sim.synchronization() # 3. 多相机同步 Pose2Sim.personAssociation() # 4. 跨相机人员关联 Pose2Sim.triangulation() # 5. 3D 三角化 Pose2Sim.filtering() # 6. 3D 坐标滤波 Pose2Sim.markerAugmentation() # 7. 标记点增强 Pose2Sim.kinematics() # 8. OpenSim 运动学进入项目文件夹后启动ipython,逐段运行即可。下面逐步讲解。
第 1 步:相机标定(calibration)
标定分两部分:内参(焦距、畸变等镜头属性,一台相机只需算一次)和外参(相机在空间中的位置与朝向,每次移动相机都要重算)。
有两种模式(由 calibration.py 实现):
calibration_type = 'convert':导入现成标定文件(支持 Qualisys .qca.txt、Vicon .xcp、OpenCap .pickle、EasyMocap .yml 等,示例文件见 Demo_SinglePerson/calibration/Calib.qca.txt)calibration_type = 'calculate':从零计算- 内参:用棋盘格或 ChArUco 板拍摄每部相机,交互界面中按
Y接受检测、N丢弃、C手动修正 - 外参:推荐
scene方法——测量场景中 10 个以上已知坐标的点(地砖角、墙体线条等),在每路视频画面中点击对应位置
- 内参:用棋盘格或 ChArUco 板拍摄每部相机,交互界面中按
ChArUco 板选择要点:内参用角点多的小板(如 A4 尺寸 5×8),外参用大方格的板;行列数要不对称、四周留白边、板面平整、成像对焦清晰无反光。
📏 质量参考:内参重投影误差应接近或低于0.5 px,外参误差建议低于1 cm(最高不超过 2.5 cm)。
第 2 步:2D 姿态估计(poseEstimation)
默认使用集成在 Pose2Sim 内的RTMPose模型(通过 RTMLib),对每路视频逐帧检测 2D 关键点,输出 OpenPose 格式的 .json 文件(每帧一个,含坐标与置信度)。
常用[pose]参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
pose_model | 'Body_with_feet' | 骨架模型:身体+足部 26 点(还支持Whole_body133 点含手脸、Lower_body等) |
mode | 'balanced' | lightweight(快而轻)/balanced/performance(最准) |
det_frequency | 4 | 每 N 帧才跑一次人体检测,提速 |
device | 'auto' | 有 GPU 自动用 GPU,推理更快且不影响精度 |
也可以换用 DeepLabCut 自训模型、MediaPipe、AlphaPose 等,配套转换脚本在 Utilities/ 目录(如 DLC_to_OpenPose.py、Mediapipe_to_pose_or_trc.py)。
第 3 步:多相机同步(synchronization)
不同相机各自录制的视频时间轴往往有偏移,必须对齐后才能三角化。算法(synchronization.py)计算关键点的平均垂直速度,再搜索让各相机速度曲线相关性最大的时间偏移量。
💡 小技巧:拍摄时让受试者做一个快速上下挥手的动作,同步会又快又准。若相机原生同步(如通过快门/时间码),可直接跳过本步骤。
第 4 步:跨相机人员关联(personAssociation)
多人在场时,需要把每路视频里检测到的"人"对应到同一个人。Pose2Sim 通过测量各相机到关键点的 3D 射线交点误差来匹配(personAssociation.py),并能沿时间追踪 ID、处理遮挡。
- 单人场景(
multi_person = false):自动选择重投影误差最小的人 - 多人场景:调低
min_affinity可更宽松地匹配;若关联错人则反向调整
第 5 步:3D 三角化(triangulation)
核心步骤(triangulation.py):用多视角 2D 点做加权 DLT 三角化——每个点按其检测置信度加权,结果更稳健。内置三重保护机制:
- 置信度低于
likelihood_threshold_triangulation的 2D 点直接剔除 - 重投影误差超过
reproj_error_threshold_triangulation(15 px)时,逐台剔除相机重试 - 剩余相机少于
min_cameras_for_triangulation(2 台)则跳过该点
缺失帧自动插值。运行结束会输出每个关键点的平均重投影误差统计(像素 + 毫米):
第 6 步:3D 坐标滤波(filtering)
三角化结果带有噪声,需滤波后再进 OpenSim(filtering.py)。可选 9 种滤波器,默认Butterworth 零相位低通(生物力学最常用),另有 Kalman、OneEuro、GCV 样条、中值滤波等。
| 参数 | 建议 |
|---|---|
cut_off_frequency | 3–6 Hz 行走/慢动作;6–15 Hz 跑步/快动作;15+ Hz 爆发性动作 |
reject_outliers | 开启 Hampel 滤波剔除离群点(默认开启) |
第 7 步:标记点增强(markerAugmentation)
用 Stanford LSTM 模型(权重内置于 MarkerAugmenter/LSTM/)从 26 个关键点外推 47 个"虚拟标记点",模拟传统标记点动捕的密度,对相机少于 4 部时收益最大。
⚠️ 要求:
participant_height设置正确;.trc 中不能有未插值的缺失值;模型至少包含髋、膝、踝、脚跟、脚趾等 12 个腿部关键点(默认Body_with_feet满足)。
第 8 步:OpenSim 缩放与逆运动学(kinematics)
最后一步(kinematics.py):把全身 OpenSim 肌肉骨骼模型自动缩放到受试者体型(无需静态标定帧),然后运行逆运动学(IK),输出生物力学上合理的全身 3D 关节角度。
骨骼长度恒定、关节角度受约束,这正是标记点方法难以做到的稳健性来源。模型与缩放/IK 配置文件都在 OpenSim_Setup/ 目录中提供。
⚡ 提速技巧:设
use_simple_model = true(无肌肉、刚性脊柱),IK 速度快10 倍以上,对多数步态分析已足够。
四、跑完后你得到什么?
Pose2Sim_Project/ ├── Config.toml ├── videos/ # 原始视频 ├── calibration/ # Calib.toml(转换或计算得到的标定) ├── pose/ # 2D 姿态 .json ├── pose-sync/ # 同步后的 2D 姿态 ├── pose-3d/ # 3D 标记点轨迹 .trc(滤波前后) ├── kinematics/ # OpenSim 结果 │ ├── *_scaled.osim # 缩放后的个人模型 │ ├── *.mot # 全身关节角度(可用 Excel/OpenSim 打开) │ └── opensim_logs.txt └── logs.txt # 全流程详细日志可视化方式:
- OpenSim GUI:
File > Open Model打开.osim,File > Load Motion加载.mot,File > Preview Experimental Data预览.trc - Blender 插件:Pose2Sim_Blender 插件可叠加视频、查看相机位置与三角化关键点
- 关节角度转动捕软件格式:
make_bvh = true会额外导出 .bvh 文件
五、进阶玩法
🚀多人分析:复制 Demo_MultiPerson/,将multi_person设为true,然后:
from Pose2Sim import Pose2Sim Pose2Sim.runAll()📦批量处理:Demo_Batch/ 展示"根配置 + 每试验配置"的两级结构——全局参数写在根Config.toml,单个试验可只覆盖差异参数。
🛠扩展工具:仓库还附带 20 多个独立脚本(坐标格式转换、步态事件检测、人脸打码、标定文件互转等),见 Pose2Sim/Utilities/:
⚡速度不够?按顺序尝试:GPU 加速 →display_detection = false+parallel_workers_pose = 'auto'→det_frequency = 100→mode = 'lightweight'→use_simple_model = true。作者实测这些组合可把流水线提速10–20 倍,且基本不损失精度。
六、常见问题速查
| 问题 | 解决方向 |
|---|---|
| 三角化误差偏大 | 增大min_cameras_for_triangulation;再试提高likelihood_threshold_triangulation |
| 多人关联错误 | 调低/调高min_affinity、reconstruction_error_threshold |
| 滤波过度/不足 | 调整cut_off_frequency或换gcv_spline(自动选频) |
| 想复算更快 | 相机没动就直接复用上次的Calib.toml;姿态已算过则保持overwrite_pose = false |
| 隐私顾虑 | 用 face_blurring.py 打码人脸,对精度影响极小 |
总结:装好 Pose2Sim → 拷贝 Demo 项目放入视频 → 改Config.toml→ 依次(或一次性runAll())跑完 8 步,你就能得到研究级的 3D 关节角度数据。从第一帧视频到步态分析,全程免费、开源、本地运行——这就是无标记点运动分析的完整答案。
【免费下载链接】pose2sim
Markerless kinematics with any cameras — From 2D Pose estimation to 3D OpenSim motion
相关推荐
Dragonfly dfget gen-doc 命令详解:自动生成 Markdown 版 CLI 参考文档
Dragonfly dfget gen doc 命令详解:自动生成 Markdown 版 CLI 参考文档 dfget 是 Dragonfly 项目中负责 P2
Pose2Sim版本演进与路线图:10个关键里程碑带你从v0.1看懂无标记3D动作捕捉
Pose2Sim版本演进与路线图:10个关键里程碑带你从v0.1看懂无标记3D动作捕捉 Pose2Sim 是一款开源的无标记人体运动捕捉(markerless
huobao-canvas新手5步实战:文本节点连线图片视频节点,拖拽即得文生图→图生视频AI流水线
huobao canvas新手5步实战:文本节点连线图片视频节点,拖拽即得文生图→图生视频AI流水线 huobao canvas(火宝无限画布)是一款开源的节点
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考