ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Pose2Sim新手教程:从视频到3D关节角度的8步流水线,无需标记点与动捕工作室

Pose2Sim新手教程:从视频到3D关节角度的8步流水线,无需标记点与动捕工作室

【免费下载链接】pose2sim

Markerless kinematics with any cameras — From 2D Pose estimation to 3D OpenSim motion

项目地址:https://gitcode.com/gh_mirrors/po/pose2sim
点击查看免费下载

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_personfalse是否多人分析;单人为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 板选择要点:内参用角点多的小板(如 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_frequency4每 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 三角化——每个点按其检测置信度加权,结果更稳健。内置三重保护机制:

  1. 置信度低于likelihood_threshold_triangulation的 2D 点直接剔除
  2. 重投影误差超过reproj_error_threshold_triangulation(15 px)时,逐台剔除相机重试
  3. 剩余相机少于min_cameras_for_triangulation(2 台)则跳过该点

缺失帧自动插值。运行结束会输出每个关键点的平均重投影误差统计(像素 + 毫米):

第 6 步:3D 坐标滤波(filtering)

三角化结果带有噪声,需滤波后再进 OpenSim(filtering.py)。可选 9 种滤波器,默认Butterworth 零相位低通(生物力学最常用),另有 Kalman、OneEuro、GCV 样条、中值滤波等。

参数建议
cut_off_frequency3–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

项目地址:https://gitcode.com/gh_mirrors/po/pose2sim
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进