相机帧获取示例(实验性)
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
警告
相机帧访问功能被标记为实验性功能,因为它目前尚未完全支持所有公共 AR Foundation API,而且在软件包和 Snapdragon Spaces Service 方面的优化会导致版本之间的向后兼容性被破坏。
该示例演示了如何通过获取 RGB 相机帧和内在属性对图像进行处理。有关相机帧访问的基本信息以及 AR Foundation 的 AR 相机管理器
(AR Camera Manager
)组件的作用,请参阅 。使用此功能,必须先打开 Project Settings > XR Plug-in Management > OpenXR (> Android Tab)
,找到 OpenXR 插件设置并启用该功能。此外,该示例要求在 Project Settings > Player > Android > Script Compilation
中允许“不安全”代码。
将 AR Camera Manager
相机管理器组件添加到 AR Session Origin > AR Camera
游戏对象中,相机获取子系统将被启用。在启动时,该子系统将从查看器(viewer)设备检索有效的传感器配置。如果找到有效的 YUV420 传感器配置,该子系统将选择此配置为 CPU 相机图像提供程序。概念上,AR Camera Manager
表示一个单独的相机,不会同时管理多个传感器。
示例场景包括两个面板:
camera feed(相机反馈) 面板显示来自设备相机的最新 CPU 图像,并带有 暂停(Pause) 和 恢复(Resume) 按钮。
camera info(相机信息) 面板枚举设备相机的各种属性。
相机管理器的 TryAcquireLatestCpuImage
尝试获取最新 CPU 图像函数将返回一个 XRCpuImage
对象,该对象表示所选设备相机中的单个原始图像。可以使用 XRCpuImage
的 Convert
转换函数提取此图像的原始像素数据,该函数返回一个 NativeArray<byte>
。
重要
XRCpuImage
对象在转换后必须进行显式处理。要做到这一点,请使用XRCpuImage
的Dispose
曝光函数。如果未处理XRCpuImage
对象,则会泄漏内存,直到相机获取子系统被销毁。
如果在转换之前分配了 NativeArray<byte>
,则此缓冲区在复制或操作后也必须被处理。要做到这一点,请使用 NativeArray<T>
的 Dispose
函数。如果未处理 NativeArray<byte>
,则会泄漏内存,直到相机获取子系统被销毁。
下面的示例代码首先从 AR Camera Manager
请求一个 CPU 图像。如果成功,它将 XRCpuImage
的原始像素数据直接提取到一个受控 Texture2D
的 GetRawTextureData<byte>
缓冲区中,并在之后使用 Apply
函数应用纹理缓冲区。最后,它更新目标 RawImage
中的纹理,使新帧显示在应用程序 UI 中。
AR Camera Manager
支持以下纹理格式:
RGB24
RGBA32
BGRA32
下面的示例代码检索所选传感器的内部参数,并显示在应用程序 UI 中。
有关如何使用 TryAcquireLatestCpuImage
尝试获取最新 CPU 图像和 XRCpuImage
的详细信息,请参阅 。
相机管理器的 TryGetIntrinsics
函数将返回一个 XRCameraIntrinsics
对象,该对象描述了所选传感器的物理特性。有关 XRCameraIntrinsics
的详细信息,请参阅 。