pose_estimation

License OS Python

CodeQL Advanced CI Python Lint

🇺🇸 English | 🇮🇳 हिंदी | 🇯🇵 日本語 | 🇨🇳 简体中文 | 🇪🇸 Español | 🇧🇷 Português (Brasil) | 🇰🇷 한국어 | 🇩🇪 Deutsch | 🇫🇷 Français

"web_ui"

[!NOTE] 这是 README 的翻译版本。英文版本是权威版本。

用于从 2D 图像进行姿态估计的容器。


Pose-to-VRM 骨骼映射

后端会返回 BODY_25 风格的姿态关键点和骨骼对。在 MediaPipe mode 中,NeckLShoulderRShoulder 合成,MidHipLHipRHip 合成。将估计出的姿态迁移到 VRM humanoid skeleton 时,请使用下表。

估计姿态向量 输入关键点 VRM humanoid bone 优先级 说明
身体根部 MidHip, LHip, RHip hips Required 主要用于 root rotation。不要过度信任来自单张图像的 root translation。
Spine MidHip -> Neck spine Required 上半身的主要方向。
Chest MidHip -> Neck chest Recommended 使用比 spine 更弱的 weight,避免弯曲过度夸张。
Upper chest MidHip -> Neck upperChest Optional 仅当加载的 VRM model 具有此 bone 时使用。
Neck Neck -> Nose neck Recommended 单图姿态估计中的 head 和 neck landmarks 噪声较大,因此应轻柔应用。
Head Neck -> Nose, Nose -> LEye, Nose -> REye, LEye -> LEar, REye -> REar head Recommended simple fallback 可以只使用 Neck -> Nose;eye 和 ear points 可以改善朝向估计。
Left shoulder Neck -> LShoulder leftShoulder Optional 仅当 VRM 具有 shoulder bones 时使用。即使没有此 bone,也可以驱动 arm。
Left upper arm LShoulder -> LElbow leftUpperArm Required 左上臂的主要旋转。
Left lower arm LElbow -> LWrist leftLowerArm Required 左前臂的主要旋转。
Left hand LElbow -> LWrist or hand landmarks leftHand Optional BODY_25 无法提供足够的 wrist orientation。除非有 hand landmarks,否则请使用较弱的 fallback。
Right shoulder Neck -> RShoulder rightShoulder Optional 仅当 VRM 具有 shoulder bones 时使用。
Right upper arm RShoulder -> RElbow rightUpperArm Required 右上臂的主要旋转。
Right lower arm RElbow -> RWrist rightLowerArm Required 右前臂的主要旋转。
Right hand RElbow -> RWrist or hand landmarks rightHand Optional BODY_25 无法提供足够的 wrist orientation。除非有 hand landmarks,否则请使用较弱的 fallback。
Left upper leg LHip -> LKnee leftUpperLeg Required 左大腿的主要旋转。
Left lower leg LKnee -> LAnkle leftLowerLeg Required 左小腿的主要旋转。
Left foot LAnkle -> LBigToe, LAnkle -> LHeel leftFoot Recommended toe 和 heel points 可见时使用。
Left toes LHeel -> LBigToe leftToes Optional 仅当 VRM 具有 toe bones 且 toe landmarks 稳定时使用。
Right upper leg RHip -> RKnee rightUpperLeg Required 右大腿的主要旋转。
Right lower leg RKnee -> RAnkle rightLowerLeg Required 右小腿的主要旋转。
Right foot RAnkle -> RBigToe, RAnkle -> RHeel rightFoot Recommended toe 和 heel points 可见时使用。
Right toes RHeel -> RBigToe rightToes Optional 仅当 VRM 具有 toe bones 且 toe landmarks 稳定时使用。
Left eye Nose -> LEye leftEye Optional 仅 gaze 或 expression features 需要。
Right eye Nose -> REye rightEye Optional 仅 gaze 或 expression features 需要。

最小可用的 VRM bones 是 spine, leftUpperArm, leftLowerArm, rightUpperArm, rightLowerArm, leftUpperLeg, leftLowerLeg, rightUpperLegrightLowerLeg。这些稳定后,再添加 hips, chest, neck, head, leftFootrightFoot,以获得更易读的 avatar pose。


启动项目

cp .env.example .env
docker compose up --build

打开浏览器:

http://localhost:8081

检查 API:

curl http://localhost:8000/api/v1/health

使用方法

  1. 按下 “Select image”。
  2. 选择一张 image。
  3. 查看叠加在 image 上的 2D keypoints。
  4. 在下方的 “3D skeleton check” view 中查看 pose direction。

Tests

运行 backend tests:

docker compose -f docker-compose.test.yml run --rm backend_test

运行 frontend smoke test:

docker compose -f docker-compose.yml -f docker-compose.test.yml run --rm frontend_test

License

  • Apache License 2.0