警告! 相机帧访问功能被标记为实验性,因为插件和 Snapdragon Spaces 服务的优化在每个版本之间可能会打破向后兼容性。 |
该示例演示了如何从支持的设备中访问相关的相机信息,包括相机图像和内参。目前,这项功能仅适用于 RGB 相机。
示例工作原理
默认情况下,示例运行时,用户界面会显示设备捕获的 RGB 图像及其相关的内参值。用户可以通过相应的按钮暂停和恢复帧捕获。
如果设备未授权相机访问权限,则图像、按钮和相机信息将被一条警告消息替换,提醒用户启用相机权限。
相机帧访问 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 帧纹理。此外,相机图像必须设置为该节点的纹理类型。
● 获取相机内参
○ 返回相机的图像分辨率、焦距和主点位置。
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。
● 设置相机帧分辨率
○ 用于选择帧的质量,此功能接受一个 ECameraFrameResolution 枚举值,允许开发者选择 Full、Half、Quarter 或 Eighth 分辨率。
高级功能
本节介绍了如何直接访问原始的 YUV 相机帧数据,而不需要从生成的纹理中提取数据。同时,也解释了如何获取蓝图中无法访问的额外数据。所有涉及的数据类型和结构体,包括 USpacesRuntimeBlueprintLibrary 中的可用函数,都在SpacesRuntimeBlueprintLibrary.h 中提供。
数据
ESpacesPlaneCameraFrameType枚举描述帧中的平面类型。
ESpacesDistortionCameraFrameModel 枚举描述用于相机校准的不同镜头畸变模型。
ESpacesCameraFrameFormat 枚举描述相机帧的不同格式。
FFrameDataOffset 结构体描述帧缓冲区数据中传感器图像数据的偏移量。
FSpacesPlaneCameraFrameData 结构体描述帧缓冲区中的一个平面。
● PlaneOffset:表示从缓冲区开始到平面数据开始的偏移量。
● PlaneStride:表示从一行到下一行的字节距离。
● PlaneType:描述帧数据的类型。
FSpacesSensorCameraFrameData 结构体 包含了扩展的相机内参数据:
● SensorCameraIntrinsics 包括图像分辨率、主点和焦距。
● SensorImageOffset 是帧缓冲区数据中传感器图像数据的偏移量。
● SensorRadialDistortion 是一个浮点数组,描述了径向畸变系数。
● SensorTangentialDistortion 是一个浮点数组,描述了切向畸变系数。
● DistortionCameraFrameModel 描述了用于相机校准的镜头畸变模型。
FSpacesCameraFrameData 结构体 包含了帧数据和相机数据。
● BufferSize:表示包含数据的缓冲区的大小。
● Buffer:指向帧数据的指针。
● FrameFormat:相机帧的格式。
● Planes:包含帧平面的数组。
● SensorData:包含捕获该帧的相机的扩展内参数据。
函数
● static FSpacesCameraFrameData GetCameraYUVFrameData():访问并返回最新的相机帧数据,格式为 FSpacesCameraFrameData。
● static bool ReleaseCameraFrameData():释放之前访问的帧,在访问另一个帧之前,必须使用此函数释放之前的相机帧数据。