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


本文介绍一个运行于 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 的深度感知对头发不敏感,拿到的人体最高点的坐标往往是额头上的,而非头顶(光头除外)。

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

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值