相機幀訪問 (實驗性)

警告!

相機幀訪問功能被标記爲實驗性,因爲插件和(hé) Snapdragon Spaces 服務的(de)優化(huà)在每個(gè)版本之間可(kě)能會打破向後兼容性。


該示例演示了(le)如何從支持的(de)設備中訪問相關的(de)相機信息,包括相機圖像和(hé)内參。目前,這(zhè)項功能僅适用(yòng)于 RGB 相機。

 

示例工作原理(lǐ)

默認情況下(xià),示例運行時(shí),用(yòng)戶界面會顯示設備捕獲的(de) RGB 圖像及其相關的(de)内參值。用(yòng)戶可(kě)以通(tōng)過相應的(de)按鈕暫停和(hé)恢複幀捕獲。

 

圖片37.png


如果設備未授權相機訪問權限,則圖像、按鈕和(hé)相機信息将被一條警告消息替換,提醒用(yòng)戶啓用(yòng)相機權限。

 

相機幀訪問 AR 管理(lǐ)器

該示例使用(yòng) BP_CameraFrameAccessARManager 藍圖資産(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > Placeable)來(lái)啓動和(hé)停止相機捕獲。使用(yòng) Toggle AR Capture 方法來(lái)控制捕獲狀态,設置爲 ON 以開始捕獲,設置爲 OFF 以停止捕獲。此外,相機必須設置爲該節點的(de)捕獲類型。此功能支持任何 SpacesSessionConfig 資産的(de)配置,也(yě)可(kě)以通(tōng)過 Toggle Spaces Feature 方法來(lái)啓用(yòng)或禁用(yòng)。


相機捕獲庫

Unreal AR 接口提供了(le)從相機獲取信息的(de)功能:

● 獲取 AR 紋理(lǐ)

○ 返回相機幀。Snapdragon Spaces 插件擴展了(le)信息,提供 RGB 幀作爲 2D 紋理(lǐ),可(kě)以轉換爲 Spaces AR Camera Image Texture 類來(lái)獲取 RGB 幀紋理(lǐ)。此外,相機圖像必須設置爲該節點的(de)紋理(lǐ)類型。

● 獲取相機内參

○ 返回相機的(de)圖像分(fēn)辨率、焦距和(hé)主點位置。

 

圖片38.png


Snapdragon Spaces 插件提供了(le)額外的(de)功能,以幫助通(tōng)過藍圖管理(lǐ)相機捕獲:

 

● 獲取相機外部位姿

○ 返回一個(gè) FTransform,表示相機在世界坐(zuò)标系中的(de)實際位置。

 

● 設置相機幀訪問狀态

○ 要暫停相機捕獲,将 Active 設置爲 FALSE;要恢複相機捕獲,将 Active 設置爲 TRUE。此功能在 0.15.0 版本中已被棄用(yòng),請改用(yòng) Pause AR Session 或 Pause Spaces Feature。

 

● 檢查相機幀訪問是否受支持

○ 如果相機捕獲功能可(kě)用(yòng),返回 TRUE;否則返回 FALSE,如果應用(yòng)程序使用(yòng)相機捕獲,建議(yì)在 Tick 期間檢查此結果。此功能在 0.15.0 版本中已被棄用(yòng),請改用(yòng) Is Feature Available。


圖片39.png

 

● 設置相機幀分(fēn)辨率

○ 用(yòng)于選擇幀的(de)質量,此功能接受一個(gè) ECameraFrameResolution 枚舉值,允許開發者選擇 Full、Half、Quarter 或 Eighth 分(fēn)辨率。


圖片40.png

 

高(gāo)級功能

本節介紹了(le)如何直接訪問原始的(de) YUV 相機幀數據,而不需要從生成的(de)紋理(lǐ)中提取數據。同時(shí),也(yě)解釋了(le)如何獲取藍圖中無法訪問的(de)額外數據。所有涉及的(de)數據類型和(hé)結構體,包括 USpacesRuntimeBlueprintLibrary 中的(de)可(kě)用(yòng)函數,都在SpacesRuntimeBlueprintLibrary.h 中提供。

 

圖片41.png

 

數據

ESpacesPlaneCameraFrameType枚舉描述幀中的(de)平面類型。

 

圖片42.png

 

ESpacesDistortionCameraFrameModel 枚舉描述用(yòng)于相機校準的(de)不同鏡頭畸變模型。


圖片43.png

 

ESpacesCameraFrameFormat 枚舉描述相機幀的(de)不同格式。


圖片44.png

 

FFrameDataOffset 結構體描述幀緩沖區(qū)數據中傳感器圖像數據的(de)偏移量。


圖片45.png

 

FSpacesPlaneCameraFrameData 結構體描述幀緩沖區(qū)中的(de)一個(gè)平面。


圖片46.png

 

● PlaneOffset:表示從緩沖區(qū)開始到平面數據開始的(de)偏移量。

● PlaneStride:表示從一行到下(xià)一行的(de)字節距離。

● PlaneType:描述幀數據的(de)類型。

 

FSpacesSensorCameraFrameData 結構體 包含了(le)擴展的(de)相機内參數據:


圖片47.png

 

● SensorCameraIntrinsics 包括圖像分(fēn)辨率、主點和(hé)焦距。

● SensorImageOffset 是幀緩沖區(qū)數據中傳感器圖像數據的(de)偏移量。

● SensorRadialDistortion 是一個(gè)浮點數組,描述了(le)徑向畸變系數。

● SensorTangentialDistortion 是一個(gè)浮點數組,描述了(le)切向畸變系數。

● DistortionCameraFrameModel 描述了(le)用(yòng)于相機校準的(de)鏡頭畸變模型。

FSpacesCameraFrameData 結構體 包含了(le)幀數據和(hé)相機數據。

 

圖片48.png


● BufferSize:表示包含數據的(de)緩沖區(qū)的(de)大(dà)小。

● Buffer:指向幀數據的(de)指針。

● FrameFormat:相機幀的(de)格式。

● Planes:包含幀平面的(de)數組。

● SensorData:包含捕獲該幀的(de)相機的(de)擴展内參數據。

 

函數

● static FSpacesCameraFrameData GetCameraYUVFrameData():訪問并返回最新的(de)相機幀數據,格式爲 FSpacesCameraFrameData。

● static bool ReleaseCameraFrameData():釋放之前訪問的(de)幀,在訪問另一個(gè)幀之前,必須使用(yòng)此函數釋放之前的(de)相機幀數據。