警告! 相機幀訪問功能被标記爲實驗性,因爲插件和(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é)恢複幀捕獲。
如果設備未授權相機訪問權限,則圖像、按鈕和(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é)主點位置。
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。
● 設置相機幀分(fēn)辨率
○ 用(yòng)于選擇幀的(de)質量,此功能接受一個(gè) ECameraFrameResolution 枚舉值,允許開發者選擇 Full、Half、Quarter 或 Eighth 分(fēn)辨率。
高(gāo)級功能
本節介紹了(le)如何直接訪問原始的(de) YUV 相機幀數據,而不需要從生成的(de)紋理(lǐ)中提取數據。同時(shí),也(yě)解釋了(le)如何獲取藍圖中無法訪問的(de)額外數據。所有涉及的(de)數據類型和(hé)結構體,包括 USpacesRuntimeBlueprintLibrary 中的(de)可(kě)用(yòng)函數,都在SpacesRuntimeBlueprintLibrary.h 中提供。
數據
ESpacesPlaneCameraFrameType枚舉描述幀中的(de)平面類型。
ESpacesDistortionCameraFrameModel 枚舉描述用(yòng)于相機校準的(de)不同鏡頭畸變模型。
ESpacesCameraFrameFormat 枚舉描述相機幀的(de)不同格式。
FFrameDataOffset 結構體描述幀緩沖區(qū)數據中傳感器圖像數據的(de)偏移量。
FSpacesPlaneCameraFrameData 結構體描述幀緩沖區(qū)中的(de)一個(gè)平面。
● PlaneOffset:表示從緩沖區(qū)開始到平面數據開始的(de)偏移量。
● PlaneStride:表示從一行到下(xià)一行的(de)字節距離。
● PlaneType:描述幀數據的(de)類型。
FSpacesSensorCameraFrameData 結構體 包含了(le)擴展的(de)相機内參數據:
● SensorCameraIntrinsics 包括圖像分(fēn)辨率、主點和(hé)焦距。
● SensorImageOffset 是幀緩沖區(qū)數據中傳感器圖像數據的(de)偏移量。
● SensorRadialDistortion 是一個(gè)浮點數組,描述了(le)徑向畸變系數。
● SensorTangentialDistortion 是一個(gè)浮點數組,描述了(le)切向畸變系數。
● DistortionCameraFrameModel 描述了(le)用(yòng)于相機校準的(de)鏡頭畸變模型。
FSpacesCameraFrameData 結構體 包含了(le)幀數據和(hé)相機數據。
● 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)相機幀數據。