PoseCap 产品
Pose CLI PyPI 开源可用

Pose CLI 文档

面向运动科学家的开源运动分析工具包。使用 20+ 内置工具分析 3D 骨骼数据,或构建你自己的工具 — 全部在本地机器上运行。

概览

Pose CLI 将原始 3D 人体骨骼数据(来自 ARKit 或任何姿态估计系统)转化为可实践的运动分析报告。它完全在你的机器上运行:你的数据永远不会离开你的电脑。

获取方式:Pose CLI 通过 PyPI 分发。详见安装指南

Pose Coach 录制 → JointData3D CSV → Pose CLI → JSON 输出
                                              │
                                              ├── stats
                                              ├── detect_peak_energy
                                              ├── segment_motion_phases
                                              ├── detect_velocity
                                              ├── detect_action_boundaries
                                              ├── detect_highlight
                                              ├── annotate (web UI)
                                              └── ... 超过 15 个工具

内置轻量后端

Pose CLI 内置 pose serve — 一个零配置的本地服务器,将你的电脑变为 Pose Coach iOS App 的开发后端:

pose serve
# → http://0.0.0.0:8000
# → LAN  →  http://192.168.1.x:8000  (在 iPhone 上配置此地址)

运行前需先安装 pip install 'pose-platform[server]'(fastapi + uvicorn)。详见安装指南 →

在 iPhone 上录制 → 骨骼文件自动到达你的电脑。分析、AI 教练对话、训练计划和综合报告全部通过同一本地服务器运行。Pose Coach iOS App 将 pose serve 作为全功能后端连接。无需数据库、无需云端。配置指南 →

数据如何到达 Pose CLI

三种将录制数据从 iPhone(Pose Coach)传输到电脑的方式:

路径 A — 手动传输(零配置,始终可用)

iPhone 录制 → 文件 App → iCloud Drive 或 AirDrop → 电脑 → pose analyze
✅ 全区域可用    ✅ 完整会话文件夹(视频 + 骨骼 + 附属文件)    ⚠ 每次手动操作
• iCloud Drive:通过文件 App 导出文件夹 → 通过 iCloud 同步到电脑
• AirDrop:导出全部数据 → ZIP 包含所有会话文件,直接发送(仅 Mac)

路径 B — 本地后端(一个命令,自动上传)

iPhone 录制 → 你的电脑(WiFi, pose serve)→ pose analyze
✅ 全区域可用    ✅ 自动上传 + 分析 + 对话    🔧 pip install pose-platform[server,llm]
(需要 TestFlight 版本 — 设置中的 研究者后端)

路径 C — 云端后端(仅限美国/欧洲)

iPhone 录制 → Staging API(自动上传)→ pose data seed-session → 电脑 → pose analyze
✅ 全自动化      ❌ 中国不可用    ⚠ 不含 .mov 视频
路径 配置 网络 区域 获得内容
A. 手动传输无需iCloud 或 AirDrop全部完整会话(视频 + 骨骼 + 附属文件)
B. 本地后端pose serve同一 WiFi全部骨骼 + 附属文件(每次录制自动)
C. Staging后端访问权限互联网(美国/欧洲)仅美国/欧洲骨骼 + 附属文件(每次录制自动)

推荐:首次录制使用AirDrop(路径 A)— 即时传输,无需配置。频繁录制时,一个命令即可配置路径 Bpose serve完整本地后端配置指南 →

为未支持运动录制

如果你想分析 Pose Coach 尚未正式支持的运动(如篮球、高尔夫、网球):

  1. 打开 Pose Coach → 选择 Freeplay 作为运动
  2. 正常录制 — 你会获得完整的 3D 骨骼数据
  3. 将数据传输到电脑(使用上述路径 A 或 B)
  4. 使用 Pose CLI 的通用工具(statssegment_motion_phasesdetect_action_boundariesdetect_highlight)进行分析
  5. 在此基础上构建运动专项工具 — 参见贡献指南

适用人群

角色 可做的事
运动科学家 / 研究员 分析运动数据、发表论文、构建新的分析工具
教练 / 表现分析师 评估技术动作、追踪进步、对比运动员
运动科学学生 通过动手分析数据学习生物力学
开发者 / 实验室 构建自定义工具、集成到现有数据处理流程

运动即插件

Pose CLI 使用 Python entry_points 自动发现运动包。内置运动(freeplaysprint)随基础安装提供。额外运动以独立 pip 包形式安装:

# 内置(始终可用)
pose version
# → sports: freeplay, sprint

# 安装羽毛球 — 由羽毛球研究者维护的独立包
pip install pose-platform[badminton]
# → 安装 pose-sport-badminton(v1.13.4,8 个工具)

# 或直接安装运动包
pip install pose-sport-badminton

# 创建你自己的运动包
pose sports create basketball
# → 生成 sports/basketball/ 脚手架及示例工具
# → pip install -e sports/basketball
# → pose tools --sport basketball

# 列出已安装的运动
pose sports
运动 安装
freeplay内置默认
sprint内置默认
badmintonpose-sport-badmintonpip install pose-platform[badminton]
basketball(模板)通过 pose sports create 创建pip install -e sports/basketball
你的运动你的包pip install pose-sport-<名称>

面向研究者:运动包是由领域专家维护的独立 PyPI 包。每个包有自己的版本、发布周期和维护者。参见贡献指南 →

Web 标注工具

在浏览器中交互式标注录制数据,视频与 2D 骨骼叠加同步显示:

pose annotate serve data/session.csv
# → 自动打开 http://localhost:8001

在时间轴上拖拽即可标记动作(短跑阶段、挥拍、投篮)。标注数据可作为校准和算法验证的标准答案。

前提条件

Web 标注工具需要骨骼 CSV 和原始视频文件(.mov)。视频通过 iCloud Drive 或 AirDrop(路径 A)传输时包含,但本地后端和 Staging(路径 B/C)不包含视频。

界面

  • 左侧面板:视频播放器 + 2D 骨骼叠加(15 根骨骼,21 个关节)+ 播放控制
  • 右侧面板:标注列表 + 创建表单(起止时间、标签、质量、备注)

CLI 命令

# 创建标注
pose annotate create data/session.csv --start 2.3 --end 3.1 --label "sprint_drive"

# 列出所有标注
pose annotate list data/session.csv

# 打开 Web 标注界面
pose annotate serve data/session.csv

校准工作流

  1. 标注录制数据(Web 或 CLI)— pose annotate serve
  2. 自动评分已标注动作 — pose calib auto-label
  3. 人工审查并修正评分(专家审核)
  4. 验证工具一致性 — pose calib validate

核心原则

  • 数据本地化。所有分析在你的机器上运行。无需上传到云端。
  • 内置本地后端。pose serve 提供完整的开发后端 — iPhone 自动上传、分析和 AI 对话全部在本地运行。
  • 一次编写,全平台使用。构建一个工具 — 即可在 CLI、Pose Coach 应用或你的自定义应用中使用。
  • 可扩展设计。每个工具都是一个 Python 类。编写你自己的,注册后即可随处使用。
  • 内置缓存。分析结果自动缓存。重复运行同一文件 → 即时返回结果。

快速入门 — 5 分钟

从零到完成首次分析。

第一步:安装

pip install pose-platform
pose version

第二步:获取示例数据

Pose CLI 内置了短跑示例录制数据 — 无需下载:

pose sample
# → sample_sprint.csv 已复制到当前目录(438 KB)

第三步:运行首次分析

pose analyze sample_sprint.csv --tool stats

你将看到一份 JSON 报告,包含录制时长、帧率、关节数量、抖动比、数据质量评估以及每个关节的统计信息。

  • data_quality: "good" — 追踪质量可靠
  • tracking_coverage: 0.98 — 98% 的帧有有效骨骼数据
  • jitter_ratio < 0.1 — 稳定性极佳

第四步:尝试更多工具

# 找出运动片段(短跑 vs 站立)
pose analyze sample_sprint.csv --tool segment_motion_phases

# 检测速度峰值
pose analyze sample_sprint.csv --tool detect_velocity --param joint=body_position

# 提取高光时刻
pose analyze sample_sprint.csv --tool detect_highlight --param sport_id=sprint

# 使用运动员档案测量短跑速度
pose analyze sample_sprint.csv --tool measure_running_speed \
    --param age=16 --param gender=male --param region=cn

第五步:使用你自己的数据

pose analyze /path/to/your/data.csv --tool stats

pose analyze 指向你自己的 JointData3D CSV 文件。参见数据格式了解如何从其他姿态估计系统准备数据。

第六步:用 Pose Coach 录制你自己的数据

获取 JointData3D 文件最简单的方式是用 Pose Coach iOS App 录制。

使用 Windows?直接跳到下方的"自动上传" — pose serve 原生支持 Windows,完全无需用到 AirDrop。

快速上手(无需配置):

  1. 通过 TestFlight 安装 Pose Coach(联系我们获取邀请链接)
  2. 录制一个会话 — 选择 Freeplay 作为运动
  3. 传输数据到电脑:
  • AirDrop(最快,仅限 macOS — Windows 没有 AirDrop 客户端):回放菜单 → 导出全部数据 → AirDrop 到你的 Mac
  • iCloud Drive(Windows 也可用):点击导出 → 保存到文件 → iCloud Drive → 在 Microsoft Store 安装 iCloud for Windows,用同一个 Apple ID 登录,然后在同步的本地文件夹中取出文件
  1. _3d.csv 文件运行 pose analyze

自动上传(一个命令,Windows 推荐):

  1. 安装服务端扩展:
pip install 'pose-platform[server,llm]'
  1. 启动本地后端:
pose serve
# → LAN  →  http://192.168.1.x:8000
  1. 在 Pose Coach 设置 → 研究者后端 → 自定义 URL → 输入你电脑的局域网 IP
  2. 开始录制 — 骨骼文件自动到达你的 pose-data/ 目录
  3. 分析和 AI 教练对话直接在 App 内运行(路由到你的本地服务器)

完整本地后端指南 →

安装指南

系统要求

依赖项 最低版本 推荐版本
Python3.103.12+
pip22.024.0+
操作系统macOS 12+ / Linux (glibc 2.28+) / Windows WSL2
磁盘空间约 500 MB(含依赖)

方式一:pip(推荐)

pip install pose-platform
pose version

方式二:从源码安装(适用于工具开发者)

git clone https://github.com/posecap/pose-platform.git
cd pose-platform
pip install -e .

-e 参数表示"可编辑"模式 — 源码修改立即生效。

方式三:虚拟环境(干净隔离)

python3 -m venv pose-env
source pose-env/bin/activate        # macOS / Linux
# pose-env\Scripts\activate         # Windows

pip install pose-platform

可选依赖

# 运动包 — 安装专项运动分析工具
pip install 'pose-platform[badminton]'         # 羽毛球:挥拍检测、击球分类、评分
# pip install 'pose-platform[basketball]'     # 篮球(即将推出)

# 全部运动
pip install 'pose-platform[all-sports]'

# 本地后端 (pose serve) — 接收 iPhone 上传 + 运行分析服务器
pip install 'pose-platform[server]'

# LLM 对话 (pose chat) — 三种模式可选
pip install 'pose-platform[llm]'                   # REPL 模式(openai SDK)
pip install 'pose-platform[mcp]'                   # Claude Code 模式(mcp SDK, >=1.0,<2.0)

# 全部 — 所有运动 + 后端 + AI 对话
pip install 'pose-platform[all]'

# Claude Code 前端(可选,用于 --mode claude / --mode claude-ds)
npm install -g @anthropic-ai/claude-code
Extra 包含 用途
[badminton]pose-sport-badminton羽毛球分析
[all-sports]所有运动包多运动研究
[server]fastapi, uvicorn, python-multipartpose serve
[llm]openai, anthropicpose chatpose serve /chat
[mcp]mcp>=1.0,<2.0pose chat --mode claude / --mode claude-ds
[all]all-sports + server + llm完整安装

常见问题排查

pip: command not found

python3 -m ensurepip --upgrade

error: externally-managed-environment(macOS Homebrew Python)

使用虚拟环境(方式三)或:

pip install --break-system-packages pose-platform

pip 安装后 pose: command not found

# 添加到 ~/.zshrc 或 ~/.bashrc
export PATH="$HOME/.local/bin:$PATH"

# Windows(原生安装)— 先找到 Scripts 目录:
python -c "import sysconfig; print(sysconfig.get_path('scripts'))"
# → 例如 C:\Users\you\AppData\Roaming\Python\Python312\Scripts
# 将该目录加入 PATH(系统属性 → 环境变量),然后重启终端。

# 任何系统上的替代方案 — 不通过 pose 命令运行
python3 -m products.pose_cli.cli version   # Windows 上用 python

Apple Silicon(M1/M2/M3)

平台原生支持 ARM 架构。验证:

python3 -c "import platform; print(platform.machine())"
# 应输出:arm64

Windows

推荐使用 WSL2。原生 Windows 也可以 —— 若 pip 安装后 pose 命令不存在,请按上一条将 Python 的 Scripts 目录加入 PATH。

wsl --install
wsl
# 然后按上述 Linux 方式操作

pose chat 启动后提示 "HTTP API key not set" 退出

pose chat 需要 openai 包和 API key:

pip install openai>=1.50
echo 'POSE_DEEPSEEK_API_KEY=sk-xxx' > .env   # 免费注册:platform.deepseek.com
pose chat

完整 LLM 配置 →

数据格式 — JointData3D

这是使用 Pose CLI 之前需要理解的最重要概念。每个工具都读取 JointData3D CSV 文件。

⚠️ 重要:理解世界坐标与模型坐标的区别对于正确分析至关重要。详见下文。

12 列格式

Pose CLI 接受无表头的 CSV 文件。每行代表一个时间戳上的一个关节。

timestamp, joint, wx, wy, wz, mx, my, mz, ldq_x, ldq_y, ldq_z, ldq_w
# 列名 类型 说明
1timestampfloat自录制开始的秒数
2jointint 或 string关节标识符(名称或索引)
3–5wx, wy, wzfloat世界坐标(ARKit 世界锚点坐标)
6–8mx, my, mzfloat模型坐标(相对于身体质心)
9–12ldq_x … ldq_wfloat局部旋转四元数(x, y, z, w)

世界坐标 vs. 模型坐标

坐标系统 来源 适用场景 稳定性
wx, wy, wz ARKit 世界锚点 绝对场地位置、热力图 ⚠️ 跨会话可能漂移
mx, my, mz 身体质心相对坐标 关节角度、相对运动、技术分析 ✅ 单次会话内稳定

经验法则:所有生物力学分析都使用模型坐标(mx/my/mz)。所有内置工具默认使用模型坐标。

数据质量检查清单

  • jitter_ratio < 0.3(运行 pose analyze data.csv --tool stats
  • tracking_coverage > 0.5(大部分录制时间骨骼被追踪到)
  • 录制距离 2–8 米(ARKit 最佳范围)
  • 全身可见(未被物体或其他人遮挡)
  • 画面中仅一人(ARKit 只能追踪一个身体)
  • 设备保持静止(建议使用三脚架)

从其他系统准备数据

如果你使用 OpenPose、MediaPipe、BlazePose 或动作捕捉系统,请将数据转换为 12 列格式。关键要求:

  1. 时间戳:单调递增,自起始秒数
  2. 关节顺序:必须匹配 19 关节 ARKit 人体骨骼(或使用字符串名称)
  3. 模型坐标:如不可用,设为与世界坐标相同(部分工具精度会降低)
  4. 四元数:如不可用,设为 ldq_x=0, ldq_y=0, ldq_z=0, ldq_w=1(单位四元数)
import numpy as np

# 你的数据:timestamps (T,), joint_names 列表, world_positions (T, J, 3)
for t_idx, t in enumerate(timestamps):
    for j_idx, jname in enumerate(joint_names):
        wx, wy, wz = world_positions[t_idx, j_idx]
        mx, my, mz = world_positions[t_idx, j_idx]  # 或计算模型坐标
        # 单位四元数:无旋转数据
        print(f"{t},{jname},{wx},{wy},{wz},{mx},{my},{mz},0,0,0,1")

CLI 命令参考

所有命令在本地运行。分析命令无需网络连接。

pose analyze

对 JointData3D CSV 文件运行分析工具。

pose analyze <file.csv> [--tool <name>] [--no-cache] [--param KEY=VALUE ...]
选项 说明
<file.csv>JointData3D CSV 文件路径(必填)
--tool <name>要运行的工具(默认:stats
--no-cache跳过缓存,强制重新计算
--param KEY=VALUE向工具传递参数(可重复使用)。自动检测类型
--env <env>后端环境:localstagingprod(默认:自动检测)
--subject-id <ID>用于训练计划停滞检测(需要 POSE_API_TOKEN
# 基本分析
pose analyze data/session.csv

# 指定工具
pose analyze data/session.csv --tool detect_peak_energy

# 带参数
pose analyze data/session.csv --tool measure_running_speed \
    --param age=16 --param gender=male --param region=cn

# 强制重新计算
pose analyze data/session.csv --tool stats --no-cache

pose tools

列出所有已注册的工具,含版本号。

pose tools                  # 简洁表格:名称、版本、状态、运动、描述
pose tools --detail         # 每个工具的完整参数详情
pose tools --sport <id>     # 按运动筛选(如 badminton、sprint)

pose sample

将内置的示例数据文件(sample_sprint.csv)复制到当前目录。无需网络 — 示例文件已包含在 pip 包中。

pose sample
# → 示例数据已复制到当前目录(438 KB)
# → 下一步:pose analyze sample_sprint.csv --tool stats

pose sports

管理运动:列出已安装的运动、添加自定义运动或创建新的运动包。

pose sports list                # 内置 + 已安装运动包(默认)
pose sports add <id>            # 添加自定义运动(写入 .pose/config.json)
pose sports remove <id>         # 移除自定义运动
pose sports create <id>         # 生成新的运动包脚手架

安装运动包:额外运动以独立 pip 包形式分发。通过 pip extras 或直接安装:

pip install pose-platform[badminton]
# 或
pip install pose-sport-badminton

创建新运动:使用 pose sports create 生成脚手架,然后以可编辑模式安装:

pose sports create basketball
# → 生成 sports/basketball/ 含 pyproject.toml、示例工具、测试
pip install -e sports/basketball
pose tools --sport basketball

pose gaps

管理能力缺口登记 — 本地追踪功能请求与工具构想。

pose gaps list                           # 活跃的缺口
pose gaps list --all-statuses            # 全部包括已解决的
pose gaps submit "<title>"               # 登记新的缺口
pose gaps show <gap_id>                  # 查看缺口详情及临时实现
pose gaps summary                        # 统计摘要

pose cache

管理分析结果缓存。当源文件或工具版本变更时缓存自动失效。

pose cache list                          # 所有缓存条目
pose cache clear                         # 清空全部缓存
pose cache clear <file.csv>             # 清空特定文件的缓存

pose version

显示版本信息 — 动态检测已安装的运动包。

pose version                            # 平台 + 已安装运动
pose version --changelog                # 技术更新日志(CHANGELOG.md)
pose version --release-notes            # 面向用户的发布说明

示例输出:

{
  "platform": "1.25.10",
  "sports": {
    "freeplay":  {"version": "1.25.10", "builtin": true},
    "sprint":    {"version": "1.25.10", "builtin": true},
    "badminton": {"version": "1.13.4", "builtin": false, "tools_count": 8}
  }
}

pose chat

启动交互式 LLM 分析会话。需要 [llm] 扩展(pip install openai)和 API key。配置方式见LLM 对话

pose chat [data_dir]                    # 默认数据目录:../pose-data

pose annotate

创建、列出和删除录制的标注。也可启动 Web 标注界面。

pose annotate create <file.csv> --start <s> --end <s> --label <名称>
                                [--peak_s <s>] [--hand left|right]
                                [--quality good|acceptable|poor] [--note "备注"]
pose annotate list <file.csv>
pose annotate delete <file.csv> <标注ID>
pose annotate serve <file.csv>       # Web 标注界面

pose calib

评分校准工作流 — 将工具评分与专家标注进行对比,验证算法准确性。

pose calib auto-label                  # 自动评分已标注动作
pose calib validate                    # 对比专家标注验证工具一致性
指标 说明
MAE工具评分与专家标注之间的平均绝对误差
Spearman ρ排名相关性 — 工具保留正确排序的程度
等级一致性工具等级与专家等级一致的比例(±1 个字母容差)

pose feedback

提交和管理反馈 — 包括 bug 报告、功能请求和工具改进建议。

pose feedback list                     # 列出所有反馈
pose feedback stats                    # 统计摘要
pose feedback resolve <id>            # 标记为已解决
pose feedback dismiss <id>            # 带原因驳回

pose telemetry

pose telemetry stats                    # 今日统计
pose telemetry stats --since 7d         # 最近 7 天
pose telemetry stats --since 24h        # 最近 24 小时

pose data

管理本地数据文件。

pose data delete <file> [--yes] [--dry-run]

工具参考

Pose CLI 拥有 20+ 内置工具。以下是三个主要的通用工具。运动专项工具文档见完整仓库。

stats

稳定 Tier 1 · 全运动 · 自 v1.4.0

计算 JointData3D 录制的综合统计信息。任何新数据都应先运行此工具 — 它是你的数据质量报告卡。

参数

参数 类型 默认值 说明
pathstringJointData3D CSV 文件路径
video_duration_sfloat(自动)手动指定录制时长

关键输出字段

字段 说明
recording_duration_s总录制时长
tracking_coverage有效骨骼帧占比(< 0.5 = 差)
jitter_ratio高抖动帧占比(< 0.1 = 好,> 0.3 = 差)
data_quality综合评定:"good"、"acceptable" 或 "poor"
per_joint.<name>.motion_std模型坐标运动标准差
pose analyze data/session.csv --tool stats

detect_action_boundaries

稳定 Tier 1 · 全运动 · 自 v1.1.0

使用全身能量分析检测动作边界 — 离散运动的开始、峰值和结束。无需针对特定运动调参即可工作。

参数

参数 类型 默认值 说明
onset_energy_ratiofloat0.01动作起始的能量阈值比例
max_filter_win_sfloat1.0最大能量平滑窗口
prominencefloat0.1最小峰值显著性
min_action_duration_sfloat0.2最短动作持续时间
min_peak_gap_sfloat0.5检测动作之间的最短间隔

输出字段

字段 说明
actions[].start_s动作起始 — 身体能量开始上升的时刻
actions[].peak_s最大能量时刻
actions[].end_s动作结束 — 能量回归基线
actions[].peak_energy峰值归一化能量(1.0 = 录制中的最大值)
actions[].duration_s动作总持续时间
# 篮球 — 找出跳跃、投篮、突破
pose analyze data/basketball_play.csv --tool detect_action_boundaries \
    --param min_action_duration_s=0.2 --param min_peak_gap_s=0.3

# 短跑 — 找出发力阶段
pose analyze data/sprint_100m.csv --tool detect_action_boundaries \
    --param onset_energy_ratio=0.01

何时使用此工具而非运动专项工具:探索新数据或分析未支持的运动时使用 detect_action_boundaries。需要动作分类(扣杀 vs 高远球、跳投 vs 上篮)时使用运动专项工具。

segment_motion_phases

稳定 Tier 1 · 全运动 · 自 v1.5.0

将录制分解为三个层级:在场片段、运动/静止片段和暂停。是理解训练节奏的基础工具。

参数

参数 类型 默认值 说明
presence_gap_sfloat1.0拆分在场片段的最大时间戳间隔
static_thresholdfloat0.03判定为静止的能量阈值
min_static_msint500有效静止片段的最短时长
min_motion_msint300有效运动片段的最短时长
pause_prominencefloat0.5运动片段内检测暂停的灵敏度
energy_filterstring"mean""mean" 或 "max" — 平滑滤波器
max_filter_win_sfloat1.0能量滤波窗口大小
motion_trailing_pad_sfloat0.3运动片段尾部额外填充(覆盖随挥动作)

输出字段

字段 说明
presence_segments画面中有人物的连续时间段
motion_segments活动时间段(挥拍、跑步、跳跃)
static_segments静止时间段(站立、等待)
pauses活动片段内的短暂停顿
summary.motion_ratio在场时间中运动所占比例
pose analyze data/basketball_drill.csv --tool segment_motion_phases

使用建议:爆发性运动(短跑、篮球突破)使用 energy_filter="max"。默认 "mean" 适合持续运动。结合 detect_action_boundaries 可在运动片段中定位具体动作峰值。

环境变量

分析与数据

变量 默认值 说明
POSE_DATA_DIR../pose-data数据文件目录
POSE_ENABLE_WIP_TOOLS0设为 1 以启用在研工具
POSE_PLATFORM_SPORTS(空)额外平台运动。格式:badminton:v1.0.0,fitness:v1.13.0。在 Pose Coach 后端设置以暴露 CLI 基准之外的运动

LLM 提供商(用于 pose chat

变量 提供商 说明
ANTHROPIC_API_KEYClaude(Anthropic)API key 来自 console.anthropic.com
POSE_DEEPSEEK_API_KEYDeepSeekAPI key 来自 platform.deepseek.com(免费额度可用)
POSE_DEEPSEEK_API_ENDPOINTDeepSeek覆盖 Base URL(默认:https://api.deepseek.com
POSE_CN_API_KEYQwen(DashScope)API key 来自 dashscope.aliyun.com
POSE_CN_API_ENDPOINTQwen(DashScope)覆盖 Base URL。国际访问使用 https://dashscope-intl.aliyuncs.com/compatible-mode/v1

对话模式

变量 默认值 说明
POSE_CHAT_MODErepl对话前端模式:repl(内置 + DeepSeek)、claude(Claude Code + Claude)、claude-ds(Claude Code + DeepSeek)。CLI --mode 参数可覆盖

区域与语言

变量 默认值 说明
POSE_REGIONusLLM 路由区域:useucncloud
POSE_LANG(自动检测)输出语言。未设置时从 LANG/LC_ALL 自动检测

缓存机制

Pose CLI 缓存工具结果以避免重复计算相同分析。缓存键为:文件标识(mtime + size)+ 工具名称 + 工具版本

缓存失效

源文件变更(mtime/size)或 pose-manifest.json 中工具版本变更时,缓存自动失效。工具升级后旧缓存自动作废。

缓存命令

pose cache list                          # 所有缓存条目
pose cache clear                         # 清空全部缓存
pose cache clear <file.csv>             # 清空特定文件的缓存

跳过缓存:pose analyze data.csv --tool stats --no-cache。命中缓存时 CLI 输出 [CACHE HIT]

CI/CD 集成

在 CI 流水线中缓存 .pose/cache/ 目录。以 pose-manifest.json 的哈希值作为缓存键可在工具版本升级时正确失效。

LLM 驱动的分析(pose chat

Pose CLI 包含 AI 对话模式,让你用自然语言询问数据问题。默认使用 DeepSeek — 免费额度,邮箱注册,全球可用。

快速配置

安装 LLM 扩展并创建 .env 文件 — Pose CLI 自动加载。无需 export、无需 source

pip install 'pose-platform[llm]'
echo 'POSE_DEEPSEEK_API_KEY=sk-xxx' > .env
pose chat

platform.deepseek.com 免费注册获取 DeepSeek API key。

提供商配置

DeepSeek(默认)

免费额度,邮箱注册,全球可用。

echo 'POSE_DEEPSEEK_API_KEY=sk-xxx' > .env
pose chat

Claude(最佳分析质量)

需要 Anthropic API key。可选安装 Claude Code CLI shell。

export ANTHROPIC_API_KEY=sk-ant-...
pose chat

Claude Code shell(可选):npm install -g @anthropic-ai/claude-code

Qwen / DashScope(中文优化)

export POSE_REGION=cn
export POSE_CN_API_KEY=sk-xxx
pose chat

对话模式

pose chat 支持三种前端模式。通过 --mode 参数或 POSE_CHAT_MODE 环境变量切换。

模式 前端 后端 安装
repl内置 REPLDeepSeek[llm] + key
claudeClaude Code CLIClaude 原生Claude Code + [mcp]
claude-dsClaude Code CLIDeepSeekClaude Code + [mcp] + key
# REPL 模式(默认)
pose chat

# Claude Code + Claude 原生(最佳体验)
npm install -g @anthropic-ai/claude-code
pip install 'pose-platform[mcp]'
pose chat --mode claude

# Claude Code + DeepSeek
echo 'POSE_DEEPSEEK_API_KEY=sk-xxx' > .env
pose chat --mode claude-ds

工作原理

pose chat 读取 POSE_DEEPSEEK_API_KEY,在启动 Claude Code 前自动将以下环境变量注入:

Claude Code 环境变量
ANTHROPIC_BASE_URLhttps://api.deepseek.com/anthropic
ANTHROPIC_AUTH_TOKEN$POSE_DEEPSEEK_API_KEY
ANTHROPIC_MODELdeepseek-v4-pro[1m]

这把 DeepSeek 兼容 Anthropic 的 API 端点桥接到 Claude Code 的原生认证模型。你只需要 POSE_DEEPSEEK_API_KEY — 转换过程由 pose chat 透明处理。

注意:如果你直接启动 Claude Code(不通过 pose chat),则需要自行设置 ANTHROPIC_BASE_URL + ANTHROPIC_AUTH_TOKENpose chat --mode claude-ds 会自动为你完成这些配置。

使用 --mode claude--mode claude-ds 时,Pose CLI 同时自动生成临时 .mcp.json,将 Claude Code 连接到 pose-analysis MCP 服务器并加载所有已注册工具 — 无需手动配置。

区域路由

默认配置在所有区域使用 DeepSeek。可通过 pose-manifest.json 或环境变量覆盖。

# 默认路由:
# US/EU 区域:DeepSeek (http_api) → Claude(如已配置则回退)
# CN 区域:  Qwen-Plus (http_api) → DeepSeek(回退)

# 强制指定区域:
export POSE_REGION=cn    # CN 路由(需 manifest 配置)
export POSE_REGION=us    # US 路由(默认)

示例会话

> 这段录制中有多少个动作片段?
[Tool: detect_action_boundaries] 检测到 14 个动作片段

> 最快的是哪个?
[Tool: detect_velocity] 峰值在 2.3 秒,18.5 m/s

> 分析跑步步态模式
[Tool: analyze_running_gait] 步频:180 spm,对称性:0.94,...

本地后端配置

用 iPhone 上的 Pose Coach 录制运动数据,骨骼文件自动传输到你的电脑 — 无需云端、无需 staging 服务器、无需 Mac。

iPhone (Pose Coach)
1录制会话
自动上传 CSV
WiFi :8000
你的电脑 (Win / Linux / Mac)
1pose serve
保存到 pose-data/
pose analyze data.csv

前提条件

  • iPhone 已通过 TestFlight 安装 Pose Coach(联系我们获取邀请链接)
  • 电脑 已安装 Pose CLI(在 pose_platform 仓库中 pip install -e .
  • 两台设备连接同一 WiFi 网络

步骤 1:启动本地后端

# 安装服务端扩展(如尚未安装)
pip install 'pose-platform[server,llm]'

# 启动后端
pose serve
# → http://0.0.0.0:8000
# → LAN  →  http://192.168.1.x:8000  (在 iPhone 上配置此地址)
# → data → /Users/you/pose-data

服务器默认监听所有网络接口,局域网 IP 自动打印。可选参数:pose serve --port 9000pose serve --data-dir ~/my-data

步骤 2:在 iPhone 上配置 Pose Coach

  1. 在 iPhone 上打开 Pose Coach
  2. 进入设置(齿轮图标)
  3. 滚动到 研究者后端 区域
  4. 选择自定义 URL
  5. 输入 http://<你的IP>:8000(例如 http://192.168.1.42:8000
  6. 点击应用
  7. 按提示重启应用

注意:研究者后端区域在 TestFlight 版本中自动可见。

步骤 3:录制与分析

  1. 在 Pose Coach 中选择 Freeplay(任何尚未正式支持的运动都用此模式)
  2. 录制动作 — 停止录制后骨骼 CSV 自动上传
  3. 文件自动到达 pose-data/ 目录
# 查看到达的文件
ls pose-data/*_3d.csv | tail -5

# 运行分析
pose analyze pose-data/20260723T140000_seg_1_iPhone_3d.csv --tool stats
pose analyze pose-data/20260723T140000_seg_1_iPhone_3d.csv --tool segment_motion_phases
pose analyze pose-data/20260723T140000_seg_1_iPhone_3d.csv --tool detect_action_boundaries

步骤 4(可选):获取视频文件

.mov 视频不会上传到后端(隐私保证)。获取方式:

  1. 在 Pose Coach 录制后,点击导出按钮(分享图标)
  2. 选择保存到文件 → iCloud Drive
  3. 在电脑上从 iCloud Drive 下载
  4. .mov 视频与 _3d.csv 骨骼文件同名配对

支持的端点

pose serve 实现了 20+ 个与 Pose Coach iOS App 兼容的 API 端点:

端点 方法 用途
/health /health/strictGET健康检查
/auth/anonymousPOST匿名认证(返回 JWT)
/auth/refreshPOST令牌刷新
/user/meGET用户档案
/sportsGET运动列表
/capabilitiesGET工具列表 + 缺口
/toolsGET工具定义
/models/{sport}GETAFM 模型状态
/uploadPOST接收录制数据
/sessionsGET录制列表
/sessions/metadataPOST自动生成标题/摘要
/analyzePOST运行分析工具
/chatPOSTAI 教练对话
/chat/streamPOSTSSE 流式对话
/subjectsGET受试者列表
/subjects/{id}/sessionsGET受试者录制记录
/subjects/{id}/progressGET进度数据
/generate_reportPOST综合报告
/generate_subject_training_planPOST跨录制训练计划
/annotations/statusPOST标注状态
/correctionsPOST骨骼修正
/ios/feature-flagsGET功能开关

pose serve 与云端后端对比

功能 pose serve 云端后端
文件上传
分析(全部工具)
AI 教练对话✅(SSE 流式)
训练计划(单次)
训练计划(综合)
综合报告
会话历史✅(内存)✅(数据库)
用户档案
用户账户
多设备
数据库

常见问题排查

iPhone 上显示 "无法连接后端"

  • 确认两台设备在同一 WiFi 网络
  • 检查防火墙:允许端口 8000 的入站连接
  • Windows:可能需要在 Windows 防火墙中允许 Python

录制后 "上传失败"

确认 pose serve 仍在运行,且数据目录存在且可写。

设置中没有显示 研究者后端

请确认使用的是 Pose Coach 的 TestFlight 版本(非 App Store 版本)。TestFlight 版本中研究者后端区域会自动显示。

切换回正常使用

设置 → 研究者后端 → 选择 Staging(或 Production)→ 应用 → 重启应用。

贡献指南

Pose CLI 被设计为可扩展的。构建新工具、添加运动支持或贡献代码。

构建新工具

一个工具就是一个 Python 类。编写一次,注册后即可在任何地方使用 — CLI、Pose Coach 应用、自定义应用。

步骤 1:capabilities/tools/my_tool.py 中创建工具类

from capabilities.tools.base import DirectTool
from capabilities.tools.loader import load_pose
import json
from pathlib import Path


class MyTool(DirectTool):
    name = "my_tool"
    description = "这个工具做什么"
    input_schema = {
        "type": "object",
        "properties": {
            "path": {"type": "string", "description": "CSV 文件路径"},
            "my_param": {"type": "number", "default": 1.0},
        },
        "required": ["path"]
    }
    status = "wip"                     # "wip" 或 "stable"
    supported_sports = []              # [] = 所有运动
    tier = 1                           # 1 = 主要, 2 = 备选
    depends_on = []                    # 可选:工具依赖
    requires_session_context_by_sport = ["badminton"]  # 可选:运动专项元数据

    def run(self, tool_input: dict, output_dir: Path) -> str:
        pose = load_pose(tool_input["path"])
        result = {"your_field": 42}
        return json.dumps(result, ensure_ascii=False)

步骤 2:capabilities/tools/registry.py 中注册 — 添加 import 和实例到 all_tools 列表。

步骤 3:启用并测试:

export POSE_ENABLE_WIP_TOOLS=1
pose tools | grep my_tool
pose analyze data/test.csv --tool my_tool

扩展运动支持

三行代码添加一项新运动:

# pose_platform_core/sports_catalog.py
OFFICIAL_SPORTS = [
    # ... 已有的 ...
    SupportedSport(id="basketball", since_version="1.24.0"),
]

然后构建工具时设置 supported_sports = ["basketball"]。通用工具会自动适用。

将工具提升为稳定版

  1. 编写单元测试(≥ 1 个)— pytest tests/unit/
  2. 使用 10+ 个真实录制数据进行测试
  3. 测试边缘情况(空数据、单帧、缺失关节)
  4. docs/features/<tool_name>.md 中添加文档
  5. 将工具类中的 status = "stable"
  6. pose-manifest.jsontools 中添加版本条目

分发你的工具

两种分发自定义工具的方式:

路径一:运动包 路径二:并入平台
最适合运动专项工具集通用工具
分发方式独立 PyPI 包成为 pose-platform 的一部分
版本管理你自己的版本号和发布周期跟随平台发布节奏
操作方法pose sports create <id> 然后发布posecap/pose-platform 提交 PR

数据加载最佳实践

  • 使用 pose.mpoints(模型坐标)进行生物力学分析
  • Oreason 过滤是自动的 — load_pose() 会排除异常帧
  • 使用 pose.joint_names 动态查找关节索引
  • 在输出中返回 data_quality 以帮助用户评估结果可靠性
  • 算法变更时在 pose-manifest.json 中提升工具版本 — 旧缓存自动失效

许可证

Pose CLI — 运动分析工具包 · 版权所有 © 2026 PoseCap Inc. 保留所有权利。

1. 研究许可(非商业用途)

学术研究人员、教育机构和个人学习者被授予免版税、非排他、不可转让的许可,可为非商业研究和教育目的使用、修改和创作衍生作品,但须遵守以下条件:

  • 署名 — 任何出版物必须引用 Pose Platform(BibTeX 引用格式见下文)
  • 禁止再分发 — 未经事先书面同意,不得向第三方再分发本软件或其核心算法
  • 禁止商业使用 — 不得嵌入商业产品、提供基于本软件的付费服务或出售分析结果
  • 修改 — 你开发的工具和扩展属于你自己的知识产权。向代码库贡献即授予 PoseCap Inc. 使用和分发你贡献的许可

2. 商业许可

任何商业用途均需与 PoseCap Inc. 另行签订书面协议。联系 contact@posecap.com 获取商业许可。

引用格式

如在研究中使用 Pose CLI,请引用:

@software{pose_platform,
  title = {Pose Platform: Open Motion Analysis Toolkit},
  author = {{PoseCap Inc.}},
  year = {2026},
  url = {https://github.com/posecap/pose-platform},
}

免责声明

本软件按"原样"提供,不提供任何明示或暗示的保证。在任何情况下,作者或版权持有人均不对因使用本软件而产生的任何索赔、损害或其他责任负责。

准备好分析你的运动数据了吗?

Pose CLI 已上架 PyPI,安装即可开始分析。给我们发邮件,告诉我们你想研究什么。