建了个 QQ 群(群号:524439406),用于交流 tango 技术,欢迎加入:
Image may be NSFW.
Clik here to view.
本文介绍一个运行于 tango 手机的应用 demo,功能是测量人体高度。
效果预览
Image may be NSFW.
Clik here to view.
原理概述
Image may be NSFW.
Clik here to view.
该应用主要使用了 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 查看评论