警告! 相機幀訪問功能(néng)被标記為(wèi)實驗性,因為(wèi)插件和 Snapdragon Spaces 服務(wù)的優化在每個版本之間可(kě)能(néng)會打破向後兼容性。 |
該示例演示了如何從支持的設備中(zhōng)訪問相關的相機信息,包括相機圖像和内參。目前,這項功能(néng)僅适用(yòng)于 RGB 相機。
示例工(gōng)作(zuò)原理(lǐ)
默認情況下,示例運行時,用(yòng)戶界面會顯示設備捕獲的 RGB 圖像及其相關的内參值。用(yòng)戶可(kě)以通過相應的按鈕暫停和恢複幀捕獲。
如果設備未授權相機訪問權限,則圖像、按鈕和相機信息将被一條警告消息替換,提醒用(yòng)戶啓用(yòng)相機權限。
相機幀訪問 AR 管理(lǐ)器
該示例使用(yòng) BP_CameraFrameAccessARManager 藍圖資産(chǎn)(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > Placeable)來啓動和停止相機捕獲。使用(yòng) Toggle AR Capture 方法來控制捕獲狀态,設置為(wèi) ON 以開始捕獲,設置為(wèi) OFF 以停止捕獲。此外,相機必須設置為(wèi)該節點的捕獲類型。此功能(néng)支持任何 SpacesSessionConfig 資産(chǎn)的配置,也可(kě)以通過 Toggle Spaces Feature 方法來啓用(yòng)或禁用(yòng)。
相機捕獲庫
Unreal AR 接口提供了從相機獲取信息的功能(néng):
● 獲取 AR 紋理(lǐ)
○ 返回相機幀。Snapdragon Spaces 插件擴展了信息,提供 RGB 幀作(zuò)為(wèi) 2D 紋理(lǐ),可(kě)以轉換為(wèi) Spaces AR Camera Image Texture 類來獲取 RGB 幀紋理(lǐ)。此外,相機圖像必須設置為(wèi)該節點的紋理(lǐ)類型。
● 獲取相機内參
○ 返回相機的圖像分(fēn)辨率、焦距和主點位置。
Snapdragon Spaces 插件提供了額外的功能(néng),以幫助通過藍圖管理(lǐ)相機捕獲:
● 獲取相機外部位姿
○ 返回一個 FTransform,表示相機在世界坐(zuò)标系中(zhōng)的實際位置。
● 設置相機幀訪問狀态
○ 要暫停相機捕獲,将 Active 設置為(wèi) FALSE;要恢複相機捕獲,将 Active 設置為(wèi) TRUE。此功能(néng)在 0.15.0 版本中(zhōng)已被棄用(yòng),請改用(yòng) Pause AR Session 或 Pause Spaces Feature。
● 檢查相機幀訪問是否受支持
○ 如果相機捕獲功能(néng)可(kě)用(yòng),返回 TRUE;否則返回 FALSE,如果應用(yòng)程序使用(yòng)相機捕獲,建議在 Tick 期間檢查此結果。此功能(néng)在 0.15.0 版本中(zhōng)已被棄用(yòng),請改用(yòng) Is Feature Available。
● 設置相機幀分(fēn)辨率
○ 用(yòng)于選擇幀的質(zhì)量,此功能(néng)接受一個 ECameraFrameResolution 枚舉值,允許開發者選擇 Full、Half、Quarter 或 Eighth 分(fēn)辨率。
高級功能(néng)
本節介紹了如何直接訪問原始的 YUV 相機幀數據,而不需要從生成的紋理(lǐ)中(zhōng)提取數據。同時,也解釋了如何獲取藍圖中(zhōng)無法訪問的額外數據。所有(yǒu)涉及的數據類型和結構體(tǐ),包括 USpacesRuntimeBlueprintLibrary 中(zhōng)的可(kě)用(yòng)函數,都在SpacesRuntimeBlueprintLibrary.h 中(zhōng)提供。
數據
ESpacesPlaneCameraFrameType枚舉描述幀中(zhōng)的平面類型。
ESpacesDistortionCameraFrameModel 枚舉描述用(yòng)于相機校準的不同鏡頭畸變模型。
ESpacesCameraFrameFormat 枚舉描述相機幀的不同格式。
FFrameDataOffset 結構體(tǐ)描述幀緩沖區(qū)數據中(zhōng)傳感器圖像數據的偏移量。
FSpacesPlaneCameraFrameData 結構體(tǐ)描述幀緩沖區(qū)中(zhōng)的一個平面。
● PlaneOffset:表示從緩沖區(qū)開始到平面數據開始的偏移量。
● PlaneStride:表示從一行到下一行的字節距離。
● PlaneType:描述幀數據的類型。
FSpacesSensorCameraFrameData 結構體(tǐ) 包含了擴展的相機内參數據:
● SensorCameraIntrinsics 包括圖像分(fēn)辨率、主點和焦距。
● SensorImageOffset 是幀緩沖區(qū)數據中(zhōng)傳感器圖像數據的偏移量。
● SensorRadialDistortion 是一個浮點數組,描述了徑向畸變系數。
● SensorTangentialDistortion 是一個浮點數組,描述了切向畸變系數。
● DistortionCameraFrameModel 描述了用(yòng)于相機校準的鏡頭畸變模型。
FSpacesCameraFrameData 結構體(tǐ) 包含了幀數據和相機數據。
● BufferSize:表示包含數據的緩沖區(qū)的大小(xiǎo)。
● Buffer:指向幀數據的指針。
● FrameFormat:相機幀的格式。
● Planes:包含幀平面的數組。
● SensorData:包含捕獲該幀的相機的擴展内參數據。
函數
● static FSpacesCameraFrameData GetCameraYUVFrameData():訪問并返回最新(xīn)的相機幀數據,格式為(wèi) FSpacesCameraFrameData。
● static bool ReleaseCameraFrameData():釋放之前訪問的幀,在訪問另一個幀之前,必須使用(yòng)此函數釋放之前的相機幀數據。