相机帧访问 (实验性)

警告!

相机帧访问功能被标记为实验性,因为插件和 Snapdragon Spaces 服务的优化在每个版本之间可能会打破向后兼容性。


该示例演示了如何从支持的设备中访问相关的相机信息,包括相机图像和内参。目前,这项功能仅适用于 RGB 相机。

 

示例工作原理

默认情况下,示例运行时,用户界面会显示设备捕获的 RGB 图像及其相关的内参值。用户可以通过相应的按钮暂停和恢复帧捕获。

 

图片37.png


如果设备未授权相机访问权限,则图像、按钮和相机信息将被一条警告消息替换,提醒用户启用相机权限。

 

相机帧访问 AR 管理器

该示例使用 BP_CameraFrameAccessARManager 蓝图资产(位于 SnapdragonSpacesSamples Content > SnapdragonSpaces > Samples > CameraFrameAccess > Placeable)来启动和停止相机捕获。使用 Toggle AR Capture 方法来控制捕获状态,设置为 ON 以开始捕获,设置为 OFF 以停止捕获。此外,相机必须设置为该节点的捕获类型。此功能支持任何 SpacesSessionConfig 资产的配置,也可以通过 Toggle Spaces Feature 方法来启用或禁用。


相机捕获库

Unreal AR 接口提供了从相机获取信息的功能:

● 获取 AR 纹理

○ 返回相机帧。Snapdragon Spaces 插件扩展了信息,提供 RGB 帧作为 2D 纹理,可以转换为 Spaces AR Camera Image Texture 类来获取 RGB 帧纹理。此外,相机图像必须设置为该节点的纹理类型。

● 获取相机内参

○ 返回相机的图像分辨率、焦距和主点位置。

 

图片38.png


Snapdragon Spaces 插件提供了额外的功能,以帮助通过蓝图管理相机捕获:

 

● 获取相机外部位姿

○ 返回一个 FTransform,表示相机在世界坐标系中的实际位置。

 

● 设置相机帧访问状态

○ 要暂停相机捕获,将 Active 设置为 FALSE;要恢复相机捕获,将 Active 设置为 TRUE。此功能在 0.15.0 版本中已被弃用,请改用 Pause AR Session 或 Pause Spaces Feature。

 

● 检查相机帧访问是否受支持

○ 如果相机捕获功能可用,返回 TRUE;否则返回 FALSE,如果应用程序使用相机捕获,建议在 Tick 期间检查此结果。此功能在 0.15.0 版本中已被弃用,请改用 Is Feature Available。


图片39.png

 

● 设置相机帧分辨率

○ 用于选择帧的质量,此功能接受一个 ECameraFrameResolution 枚举值,允许开发者选择 Full、Half、Quarter 或 Eighth 分辨率。


图片40.png

 

高级功能

本节介绍了如何直接访问原始的 YUV 相机帧数据,而不需要从生成的纹理中提取数据。同时,也解释了如何获取蓝图中无法访问的额外数据。所有涉及的数据类型和结构体,包括 USpacesRuntimeBlueprintLibrary 中的可用函数,都在SpacesRuntimeBlueprintLibrary.h 中提供。

 

图片41.png

 

数据

ESpacesPlaneCameraFrameType枚举描述帧中的平面类型。

 

图片42.png

 

ESpacesDistortionCameraFrameModel 枚举描述用于相机校准的不同镜头畸变模型。


图片43.png

 

ESpacesCameraFrameFormat 枚举描述相机帧的不同格式。


图片44.png

 

FFrameDataOffset 结构体描述帧缓冲区数据中传感器图像数据的偏移量。


图片45.png

 

FSpacesPlaneCameraFrameData 结构体描述帧缓冲区中的一个平面。


图片46.png

 

● PlaneOffset:表示从缓冲区开始到平面数据开始的偏移量。

● PlaneStride:表示从一行到下一行的字节距离。

● PlaneType:描述帧数据的类型。

 

FSpacesSensorCameraFrameData 结构体 包含了扩展的相机内参数据:


图片47.png

 

● SensorCameraIntrinsics 包括图像分辨率、主点和焦距。

● SensorImageOffset 是帧缓冲区数据中传感器图像数据的偏移量。

● SensorRadialDistortion 是一个浮点数组,描述了径向畸变系数。

● SensorTangentialDistortion 是一个浮点数组,描述了切向畸变系数。

● DistortionCameraFrameModel 描述了用于相机校准的镜头畸变模型。

FSpacesCameraFrameData 结构体 包含了帧数据和相机数据。

 

图片48.png


● BufferSize:表示包含数据的缓冲区的大小。

● Buffer:指向帧数据的指针。

● FrameFormat:相机帧的格式。

● Planes:包含帧平面的数组。

● SensorData:包含捕获该帧的相机的扩展内参数据。

 

函数

● static FSpacesCameraFrameData GetCameraYUVFrameData():访问并返回最新的相机帧数据,格式为 FSpacesCameraFrameData。

● static bool ReleaseCameraFrameData():释放之前访问的帧,在访问另一个帧之前,必须使用此函数释放之前的相机帧数据。