ARFoundation之路-3D物體識別之二

版權聲明:Davidwang原創文章,嚴禁用於任何商業途徑,授權後方可轉載。

  在獲取到參考物體的空間特徵信息Elephant.arobject文件後就可以將其做爲參考物體進行真實環境3D物體的檢測識別跟蹤了。雖然3D物體檢測識別跟蹤在技術上與2D圖像檢測識別跟蹤有非常大的差異,但在ARFoundation中,3D物體識別跟蹤與2D圖像識別跟蹤操作幾乎完全一致,這大大的方便了開發者的使用。

(一) 術語

  在ARFoundation中,3D物體跟蹤系統依據參考物體庫中的參考物體空間特徵信息嘗試在周圍環境中檢測匹配的3D物體並跟蹤,與2D圖像識別跟蹤類似,3D物體識別跟蹤也有一些特定的術語,如下表如示。

術語 描述
參考物體(Reference Object) 識別3D物體的過程也是一個特徵值對比的過程,ARFoundation將從攝像頭中獲取的圖像信息與參考物體庫的參考物體空間特徵點信息進行對比,存儲在參考物體庫中的用於對比的物體空間特徵信息就叫做參考物體(物體空間特徵信息並不是物體,也不能據此恢復出3D物體)。一旦對比成功,真實環境中的3D物體將與參考物體庫的參考物體建立對應關係,每一個真實3D物體的姿態信息也一併被檢測。
參考物體庫(Reference Object Library) 參考物體庫用來存儲一系列的參考物體空間特徵信息用於對比,每一個3D物體跟蹤程序都必須有一個參考物體庫,但需要注意的是,參考物體庫中存儲的實際是參考物體的空間特徵值信息而不是原始3D物體網格信息,這有助於提高對比速度與魯棒性。參考物體庫越大,3D物體檢測對比就會越慢,相比與2D圖像檢測識別,3D物體檢測識別需要比對的數據更大、計算也更密集,因此,在同等條件下,參考物體庫中的參考物體數量要比2D圖像庫中的參考圖像數量少得多。
跟蹤組件提供方(Provider) ARFoundation是架構在底層SDK3D物體跟蹤API之上的,也即是說ARFoundation並不具體負責3D物體識別過程的算法,它只提供一個接口,具體3D物體識別由算法提供方提供。
AR物體錨點(ARObjectAnchor) 記錄真實世界被檢測識別的3D物體位置與姿態的錨點,該錨點由Session在檢測識別到3D物體後自動添加到每一個被檢測到的對象上。通過該錨點,可以將虛擬物體對象渲染到指定的空間位置上。

(二)AR Tracked Object Manager

  在ARFoundation中,3D物體屬於可跟蹤對象,由AR Tracked Object Manager組件進行統一管理,該組件通常掛載在AR Session Origin對象上,其有Reference Library和Tracked Object Prefab兩個屬性,如下圖所示。

在這裏插入圖片描述
  AR Tracked Object Manager組件負責對3D物體的檢測識別和跟蹤,並可以在已檢測到3D物體上渲染虛擬對象,該組件依據參考物體庫中的參考物體空間特徵信息不斷嘗試在環境中檢測3D物體,因此,只有預製在參考物體庫中的3D物體纔有可能被檢測到。

  Reference Library
  參考物體庫,ARFoundation檢測3D物體的依據,可以靜態設置也可以在運行時添加,但AR Tracked Object Manager一開始跟蹤3D物體,參考物體庫就不能爲null。

  Tracked Object Prefab
  在檢測到3D物體後需要被實例化的預製體,在實例化時,ARFoundation會確保每一個實例化後的對象都有一個ARTrackedObject組件,可以在運行時通過代碼獲取到該實例化對象。

(三)3D物體識別跟蹤基本操作

  在ARFoundation中,3D物體跟蹤與2D圖像跟蹤操作基本一致,分成兩步,第一步是建立一個參考物體庫,第二步是在場景中掛載AR Tracked Object Manager組件,並將一個需要實例化的Prefab賦給其Tracked Object Prefab即可,下面我們來具體操作。

  按上述步驟,在Unity中新建一個工程,第一步建立一個參考物體庫,首先在Project窗口中的ObjectLib文件夾下點擊鼠標右鍵並依次選擇Create->XR->Reference Object Library新建一個參考物體庫,並命名爲RefObjectLib,如下圖所示。

在這裏插入圖片描述
  選擇新建的RefObjectLib參考物體庫,在Inspector窗口中,點擊“Add Reference Object”添加參考物體,將上節中導出的Elephant.arobject文件拖入到工程中,並將其拖動到到Reference Object Assets框中,如下圖所示。

在這裏插入圖片描述
  每一個參考物體還有一個Name屬性,Name用於標識參考物體,這個名字在做3D物體檢測對比時沒有作用,但在比對匹配成功後我們可以通過參考物體名字獲知是哪個參考物體,參考物體名字可以重複,因爲在跟蹤時,跟蹤系統還會給每一個參考物體一個referenceObject.guid值,這個值是唯一值,可用於唯一標識一個參考物體。

  在完成上述工作之後,在Hierarchy窗口中選擇AR Session Origin,併爲其掛載AR Tracked Object Manager組件,將第一步製作的RefObjectLib參考物體庫拖到Reference Library屬性中,並設置相應的Prefab,如下圖所示。

在這裏插入圖片描述

  最後需要說明的是,動態物體跟蹤與底層SDK的算法有非常大的關係,不同的底層對參考物體的格式、處理方式都有不同的要求,對指定平臺具體應用需要參閱該平臺的SDK資料。ARFoundation目前只支持動態iOS平臺對3D物體的檢測識別跟蹤。編譯運行,效果如下圖所示。

在這裏插入圖片描述

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