地球上第一款测身高的安卓手机应用——AR 测身高

来源:互联网 发布:nginx redis模块 编辑:程序博客网 时间:2024/05/17 07:09

  • 效果预览
  • 原理概述
  • 开发思路
    • 寻找地面坐标
    • 寻找头顶坐标
  • 一些经验

建了个 QQ 群(群号:524439406),用于交流 tango 技术,欢迎加入:

这里写图片描述

本文介绍一个运行于 tango 手机的应用 demo,功能是测量人体高度。

效果预览

这里写图片描述

原理概述

该应用主要使用了 tango 的深度感知技术。

如上图,通过深度感知技术,我们可以获取设备周围物体的点云坐标集合。如果深度相机前面站着一个人,我们可以拿到这个人的身体的三维坐标集合(当然也混杂着无关物体的坐标),然后对这些集合进行筛选,筛选出人的头顶坐标和地面坐标,再将这两个坐标的 y 值相减,绝对值即为人体身高。

开发思路

本应用的开发环境是 tango + unity,测试机型是联想 phab2 pro。

最关键的步骤是找出头顶坐标和地面坐标,找出这两点坐标之后,就可以算出身高值了,同时也可以通过 untiy 在坐标位置绘制出线条和箭头以及高度文本等。

寻找地面坐标

寻找地面坐标有两种方式:

  • 遍历人体的点云坐标集合,找出 y 值最小的坐标点,即可近似认为是地面的 y 坐标;
  • 通过 TangoPointCloud.FindFloor() 方法找到地面(使用方法见官方demo:ExperimentalFloorFinding)及其 y 坐标值;

寻找头顶坐标

寻找头顶坐标,也有两种方法:

  • 遍历人体的点云坐标集合,找出 y 值最小的点,即可近似做为地面的 y 坐标;
  • TangoPointCloud.FindClosetPoint() 方法(使用方法见官方 demo:PointToPoint),在手机屏幕上点击预览帧图像上的人的头顶,通过该方法找出离点击位置最近的人体三维坐标点,即可近似做为头顶坐标;

为简单起见,笔者都是采用第一种方式得到两个目标坐标点的。

目前能想到的最优的方法是围绕人体进行 360 度扫描,然后将获取的身体坐标集合进行 3d 建模,这样得到的人体数据(不止是身高,连三围数据都易如反掌)才最靠谱最准确。目前还未验证该想法的可行性。

一些经验

tango 的深度感知对头发不敏感,拿到的人体最高点的坐标往往是额头上的,而非头顶(光头除外)。

设备获取的点云坐标集合,除了人体坐标,还会有周围干扰物体的坐标(比如墙壁、沙发、天花板、吊灯等),需要用某种策略筛选人体坐标点,然后找出的最高点才能作为头顶坐标。