大家好,
我一直在独立开发 GesturePlay——一款完全通过摄像头控制的Android游戏,无需控制器或可穿戴设备。刚刚发布了其最新模式 Pose Match,想在这里分享,因为这个社区一直很有帮助。
它是什么
一个3D化身摆出姿势。你模仿它。保持姿势稳定即可得分。
目前有五个姿势——T型、V字上举、左臂、右臂、休息。听起来简单,其实不然。在应用对你进行评判时,保持T型姿势几秒钟比看起来要难。
它会追踪完成的姿势、每次估算消耗的卡路里,并记录每日历史,让你看到连续记录的增长。
技术栈
- Kotlin、Android
- 设备端姿势检测(无服务器、无云端,所有数据不离开手机)
- 通过SceneView使用Filament进行实时3D化身渲染
- CameraX用于图像输入
比预期更困难的地方
姿势分类是模糊的,不是二元的。 我的第一个版本比较原始关节坐标,效果很差——因为人们站的距离、身高、身体比例各不相同。不得不改用基于关节角度的分类,使其与尺度无关。效果好多了。
“保持姿势”机制挽救了游戏。 早期版本在姿势匹配瞬间就计分,导致你可以胡乱晃动而偶然得分。加入保持并确认的窗口后,从bug制造器变成了一个真正的游戏机制。
3D渲染全程都在与我作对。 由于渲染器的预构建材质与我锁定的Filament版本不匹配,导致了原生崩溃。这浪费了我大量时间。最终我放弃了使用预构建加载器,自己构建了材质。
卡路里估算只是估算。 我使用了基于MET的近似值。在用户界面上我特意用~符号显示,因为我宁愿坦诚,也不想假装用手机摄像头就能达到实验室级别的精度。
关于隐私
一切都在本地运行。不上传任何帧,不存储照片或视频,不向任何地方发送任何数据。这是我做出的第一个架构决策,并约束了之后的所有决策——但对于一款要求人们在客厅里把摄像头对准全身的应用来说,这是不容商量的。
目前的状态
共有三种模式:Pose Match(姿势匹配)、Air Drawing(空中画图,用手在空中描画)、Body Motion Control(身体动作控制,通过倾斜身体控制小球滚动)。
链接:https://play.google.com/store/apps/details?id=com.tarantiansystems.gestureplay
真心寻求反馈——特别是关于姿势集是否太少,以及评分是否公平或过于苛刻。乐意回答任何关于计算机视觉或渲染方面的问题。
评论 (0)