建了个 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 的深度感知对头发不敏感,拿到的人体最高点的坐标往往是额头上的,而非头顶(光头除外)。
设备获取的点云坐标集合,除了人体坐标,还会有周围干扰物体的坐标(比如墙壁、沙发、天花板、吊灯等),需要用某种策略筛选人体坐标点,然后找出的最高点才能作为头顶坐标。
作者:zhaizu 发表于2017/6/24 18:35:43 原文链接
阅读:336 评论:0 查看评论