Files
opendance-android/README.txt
T

183 lines
7.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
================================================================
OpenDance Studio —— Android 辅助 App v0.1.0 使用说明
================================================================
手机端姿态采集器:用摄像头做**端侧**姿态推理,把 33 个骨骼关键点通过
WebSocket 推送给 Windows 客户端,由后者驱动 VRM 角色并实时评分。
隐私:画面不会离开手机。通过网络发送的只有 33 个关键点坐标。
----------------------------------------------------------------
一、安装
----------------------------------------------------------------
方式一(推荐):直接安装随附的 app-release.apk
- 在手机上允许「安装未知来源应用」
- 点击 APK 安装
方式二:用 adb 安装
adb install -r app-release.apk
要求:Android 10(API 29)或更高版本。
----------------------------------------------------------------
二、快速开始
----------------------------------------------------------------
1. 在 Windows 电脑上启动 OpenDance Studio 客户端
(Windows 客户端会自动监听 8765 端口)
2. 确保手机与电脑连在**同一个 WiFi**
3. 打开本应用,进入「连接设置」页
4. 填写电脑的 IP 地址,或直接点「扫描局域网」自动发现
(扫描会探测局域网内开放 8765 端口的主机,约 2~3 秒)
5. 可点「测试连接」确认端口可达
6. 按需调整推流参数(见下)
7. 点「开始推流」,授予相机权限
8. 站到画面中央,屏幕上会出现骨架叠加:
- 黄色圆点 = 识别良好的关节
- 红色圆点/红色连线 = 置信度低(光线不足或被遮挡)
9. 在 Windows 客户端上确认已连接,即可开始跟练
----------------------------------------------------------------
三、推流参数
----------------------------------------------------------------
分辨率
低(480×360) 最省电,适合老机型
中(640×480) 推荐,识别精度与功耗平衡
高(1280×720) 最清晰,但推理更慢、更耗电
目标帧率
默认 30 FPS。低端机若「识别帧率」明显低于目标值,可降到 20 或 15。
镜像画面
默认开启。前置摄像头的常见用法。
注意:本应用发送的是**未镜像的原始坐标**,是否镜像由帧头 flags.bit0 声明,
Windows 客户端据此正确还原左右。因此无论开关如何,动作方向都不会错。
仅上半身模式
下半身关键点置信度置 0(显示为红点),Windows 端会插值。
带宽或算力不足时开启可明显降负载。
----------------------------------------------------------------
四、运行页状态说明
----------------------------------------------------------------
连接状态 未连接 / 连接中 / 已连接 / 重连中(第 N 次)/ 已断开
目标 正在连接的 WebSocket 地址
会话 服务端返回的会话 ID
已发送 累计发送帧数
已丢弃 因推理或连接跟不上而丢弃的帧数(>0 说明设备吃力)
发送帧率 实际推流帧率
识别帧率 实际推理帧率
推理耗时 单帧 MediaPipe 推理毫秒数
人体识别 已识别 / 未识别到人体
平均置信度 < 70% 时转黄,提示改善光线或减少遮挡
最近错误 连接或推理的错误原因
网络中断时会**自动重连**(1s → 2s → 4s … 最长 15s 退避),
无需手动操作。
----------------------------------------------------------------
五、常见问题
----------------------------------------------------------------
Q: 扫描不到电脑
A: 1) 确认手机与电脑在同一 WiFi(不是手机热点)
2) 确认 Windows 客户端已启动并正在监听 8765
3) 在 Windows 防火墙放行 OpenDance.exe 的 TCP 8765 入站
4) 部分路由器开启了「AP 隔离」,会阻断设备互访,需在路由器关闭
Q: 显示「已连接」但电脑端没有画面
A: 查看运行页的「已发送」是否在增长。若为 0,说明相机或推理没出帧;
若「人体识别」一直是「未识别到人体」,请站到画面中央并保证光线充足。
Q: 帧率很低 / 已丢弃帧数持续增长
A: 依次尝试:降低分辨率 → 降低目标帧率 → 开启「仅上半身模式」→ 关闭其他后台应用。
Q: 关键点抖动明显
A: 正常现象,Windows 端有 DTW 带状对齐与平滑处理,不要求逐帧完全一致。
改善光照可显著提高稳定性。
Q: 应用退到后台会怎样?
A: 返回键或离开运行页会立即停止推流并释放相机,不会在后台占用摄像头。
----------------------------------------------------------------
六、从源码构建
----------------------------------------------------------------
环境要求:
JDK 17 AGP 8.7.3 要求(JDK 25 未经测试)
Android SDK platforms;android-34 与 build-tools;34.0.0
Gradle 8.9 已随 gradlew 提供
构建:
export JAVA_HOME=/path/to/jdk17
export ANDROID_HOME=/path/to/android-sdk
# 生成发布签名密钥库(首次;文件不会入库,请自行备份)
bash build/gen-keystore.sh
# 构建并校验产物
bash build/build-apk.sh all
# 一键验证(单元测试 → 构建 → 产物校验)
bash build/verify.sh
产物:
app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/release/app-release.apk
Android Studio 路径:
打开本目录 → Build → Generate Signed Bundle / APK → APK → 选择 keystore → release
----------------------------------------------------------------
七、测试
----------------------------------------------------------------
./gradlew testDebugUnitTest
19 项单元测试(JVM,无需设备),核心是**金标准字节向量测试**:
用 opendance-web 已通过验收的 TypeScript 实现产出的 239 字节向量,
断言本端 Kotlin 实现逐位相同 —— 这是三端契约一致性的硬证据。
测试报告:app/build/reports/tests/testDebugUnitTest/index.html
----------------------------------------------------------------
八、目录结构
----------------------------------------------------------------
settings.gradle.kts / build.gradle.kts 工程与插件配置
gradle/wrapper/ Gradle 8.9 wrapper
project.yaml 任务清单与状态
DSH.md 本项目 DSH 执行约束
tasks/ 单任务说明书(T-AND-001 ~ 009)
contracts/ 只读契约快照(来源 opendance-web v0.1.0)
app/src/main/java/com/opendance/studio/
MainActivity.kt 三页导航
model/ 239 字节帧编解码 + 33 点拓扑
camera/ CameraX 采集
pose/ MediaPipe 端侧推理
net/ WebSocket 推流 + 主机发现
data/ 设置
ui/ 连接页 / 运行页 / 关于页
app/src/main/assets/pose_landmarker_lite.task MediaPipe 模型
build/ 打包与验证脚本
----------------------------------------------------------------
九、许可
----------------------------------------------------------------
本应用代码以 MIT 许可发布。第三方开源项目声明见 THIRD_PARTY.md
(应用内「关于」页同样可查看)。
未使用 SMPL 模型及其衍生拓扑,统一采用 MediaPipe 33 点拓扑。