HoloLens開發之遠程視頻AR標註功能開發

HoloLens2系統自帶的軟件中包含的官方開發的Dynamics 365 Remote Assist軟件,想必大部分用戶及開發者看過官方的宣傳視頻,通過移動端和HoloLens視頻通話進行遠程協作,其中一個比較大亮點就是遠程空間標註,能夠精準實現遠程指導,但是Remote Assist尚未落地中國,國內的很多用戶還無法直接使用。

下面我就圍繞這個功能簡單談下如何開發遠程程協助標註功能。該方案通過搭建音視頻通訊,傳輸包含HoloLens空間矩陣信息的視頻數據,經過HoloLens與Unity空間矩陣轉換及2D標註到3D空間的轉換實現遠程空間標註。

Demo演示視頻

https://www.bilibili.com/video/BV1Jg4y1B7Ts

一、音視頻通訊方案

1. 基於原生的WebRTC進行開發

微軟官方Github已經提供了一個MixedReality-WebRTC的工程,這個對於熟悉WebRTC的開發者可以嘗試,是否可以採用市場上成熟的第三方音視頻SDK呢?目前主流的音視頻SDK主要適配的是PC、Web、Android、IOS,針對HoloLens設備的UWP平臺幾乎沒有,短期內各大廠家可能還不會適配UWP,WebRTC的方案需要適配所需要的各個平臺,開發難度較高、工作量較大、週期長、成本高。

MixedReality-WebRTC鏈接:https://github.com/microsoft/MixedReality-WebRTC

2. 使用Unity進行開發

Unity對HoloLens一直有很好的支持,使用微軟官方發佈的MRTK工具,能夠快速完成原型的搭建,由於Unity較好的跨平臺特性,可以輕鬆的將項目部署到HoloLens和移動設備上,下面我將使用MRTK和Unity音視頻插件實現HoloLens遠程協助功能,這是本案例所使用到的GitHub工程。

通過HoloLens API獲取HoloLens的全息混合視頻畫面,在HoloCaptureManager上可以設置HoloLens的設備類型、分辨率、幀率、是否開啓全息混合、全息畫面的透明度、是否發送相機矩陣數據。

通過全息混合視頻可以讓專家端能夠確認標註是正確的,標註有誤時可以清除重新標註。但全息混合視頻也存在一個小問題,眼睛通過HoloLens看到的虛實畫面和獲取的全息混合畫面有微小的位置偏差,近距離時比較明顯,這個問題有待官方更新底層接口。

GitHub MRTK鏈接:https://github.com/microsoft/MixedRealityToolkit-Unity

本文相關的工程鏈接:https://github.com/ShanguUncle/UnityChatHololens

 

獲取HoloLens混合視頻

專家端對HoloLens混合視頻畫面進行標註

參考文檔:https://docs.microsoft.com/en-us/windows/mixed-reality/locatable-camera-in-unity

二、HoloLens空間標註的幾個關鍵點

1. 獲取HoloLens相機空間矩陣數據

通過TryGetCameraToWorldMatrixAPI獲取VideoCaptureSample的相機矩陣和投射矩陣數據,這兩個矩陣數據存儲了HoloLens當前相機的方向和位置,再將HoloLens空間矩陣轉換到Unity空間矩陣。

 

相機矩陣轉換示意圖

參考文檔:https://docs.microsoft.com/en-us/windows/mixed-reality/unity-xrdevice-advanced

2.二維標註到三維空間的位置轉換

右圖:HoloLens相機空間投射示意,左圖:根據標註數據計算出的空間標註

HoloLens每一幀的視頻數據都包含了空間矩陣數據,專家端在二維畫面標註後確定了標註的形狀(i)、中心點(X1,Y1)、長寬(L1、W1)數據,然後發送到HoloLens端,通過空間矩陣數據計算出標註時間點的相機位置C1以及視頻畫面的四個投射點(P1、P2、P3、P4),通過(X1,Y1)數據可以按比例計算出投射面標註點位置C2及長寬(L2、W2),通過Ray由標註時間點相機位置 C1C2發射線碰撞檢測出空間中的實際的標註點位置C3,長寬尺寸可以通過C1、C2、C3和 (L2、W2)按距離比例計算出在空間中的尺寸(L3、W3),最終計算出的標註數據(C3、L3、W3)生成相應的標註實例(i),標註的方向可以朝向C1或者現在的相機位置。

射線檢測需要開啓HoloLens的空間感知(Spatial Awareness)功能,設置較高的掃描精度以提高碰撞精度,如果沒有檢測到碰撞點說明該點空間網格未掃描,可以設置個固定距離確定C3,比如1~2m,或者提示掃描該空間。

總結

這個方案可以實現Remote Assist遠程協助的部分功能,但還是會存在一些不足,所以尚不能稱爲一個完整的解決方案。今天的分享,主要希望能夠對想要開發類似Remote Assist功能的開發者提供一種思路,如果大家感興趣我之後會將案例錄製成視頻教程以供參考。

技術交流羣:211031265

HoloLens2開發教程大全

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