依据 Gitea v1.27.3 modules/charset/escape_stream.go 的判定规则 (analyzeDetectResults:仅当左右相邻字符都不是非 ASCII 时才标记, 且 _common 表恒定生效),把说明文档中会被标记的全角标点 (,:;?!() 等)改为半角,并保证成对括号宽度一致。 中文语境中的全角标点(左右均为中文)保持原样,不动代码与契约语义。
49 lines
1.5 KiB
Markdown
49 lines
1.5 KiB
Markdown
# T-AND-003 MediaPipe Pose 端侧推理
|
|
|
|
- **状态**: done
|
|
- **依赖**: T-AND-002
|
|
|
|
## 目标
|
|
|
|
用 MediaPipe Tasks Vision 在设备本地做姿态推理,输出 33 个归一化关键点。
|
|
|
|
## load
|
|
|
|
```
|
|
DSH.md
|
|
contracts/skeleton-topology.md # 锚点:1 33 点、4 坐标系
|
|
app/src/main/java/com/opendance/studio/pose/PoseDetector.kt
|
|
```
|
|
|
|
## 交付物
|
|
|
|
`pose/PoseDetector.kt` + `app/src/main/assets/pose_landmarker_lite.task`(5.7 MB)。
|
|
|
|
## 关键实现
|
|
|
|
| 项 | 说明 |
|
|
|--|--|
|
|
| 运行模式 | `LIVE_STREAM` + `detectAsync`,不阻塞相机线程 |
|
|
| 模型 | `pose_landmarker_lite.task`(随 APK 分发,`noCompress "task"` 保证可读) |
|
|
| 置信度阈值 | detection / presence / tracking 均 0.5 |
|
|
| 背压 | `busy` 标志:上一帧仍在推理时直接丢弃新帧并计数,不排队 |
|
|
| 时间戳 | 单调递增校正(MediaPipe 要求严格递增) |
|
|
| 缺失点 | 置信度置 0、坐标归零,接收端按契约插值 |
|
|
|
|
## 坐标与镜像语义
|
|
|
|
- 发送**未镜像的原始 MediaPipe 坐标**(契约 4)
|
|
- 是否镜像由帧头 `flags.bit0` 声明,接收端据此决定如何还原
|
|
- 叠加层绘制时才取 `1 - x`,与前置摄像头预览的镜像观感一致
|
|
|
|
这保证了同一份关键点数据在「镜像预览」与「真实左右」两种解释下都不会歧义。
|
|
|
|
## 上半身模式
|
|
|
|
`upperBodyOnly = true` 时,髋部及以下点置信度置 0 并置 `flags.bit2`,
|
|
接收端会插值。用于带宽/算力不足时降级。
|
|
|
|
## 验收
|
|
|
|
`assembleDebug` 通过;运行页在真机上可看到骨架叠加层(见 tasks/009)。
|