地球上第一款測身高的安卓手機應用——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 的深度感知對頭髮不敏感,拿到的人體最高點的座標往往是額頭上的,而非頭頂(光頭除外)。

設備獲取的點雲座標集合,除了人體座標,還會有周圍干擾物體的座標(比如牆壁、沙發、天花板、吊燈等),需要用某種策略篩選人體座標點,然後找出的最高點才能作爲頭頂座標。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章