Apple Vision Pro中ReferenceImage加载失败问题求助
问题详情
尝试在Apple Vision Pro上测试ImageTrackingProvider,编写基础代码如下:
import Foundation import RealityKit import ARKit @MainActor class ARKitViewModel: ObservableObject{ private let session = ARKitSession() private let imageTracking = ImageTrackingProvider(referenceImages: ReferenceImage.loadReferenceImages(inGroupNamed: "AR")) func runSession() async { do{ try await session.run([imageTracking]) } catch{ print(error) } } func processUpdates() async { for await _ in imageTracking.anchorUpdates{ print("test") } } }
AR资源文件夹内仅含一张已设置物理尺寸的图片,无配置错误提示,但运行时出现以下错误:
ar_image_tracking_provider_t <0x28398f1e0>: Failed to load reference image <ARReferenceImage: 0x28368f120 name="IMG_1640" physicalSize=(1.350, 2.149)> with error: Failed to add reference image.
已尝试JPEG/PNG格式,使用Xcode 15.3 beta 3,通过Immersive View调用ViewModel:
struct ImmersiveView: View { @StateObject var arKitVM = ARKitViewModel() var body: some View { RealityView { content in } .task { await arKitVM.runSession() } .task { await arKitVM.processUpdates() } } }
解决方案
- 检查AR资源文件夹配置:选中Xcode中的AR文件夹,在右侧Inspector确认Type设置为「AR Resource Group」,而非普通文件夹。
- 调整参考图物理尺寸:避免使用过大的尺寸(当前设置1.35m×2.149m属于超大尺寸),先测试小尺寸(如10cm×10cm),Vision Pro的图像追踪对参考图尺寸有严格限制。
- 验证图片质量:确保图片无过度压缩、模糊问题,对比度充足,避免纯色或重复纹理过多的图像。
- 添加相机权限:在Info.plist中添加
NSCameraUsageDescription键,填写相机使用说明,ARKit需要相机权限才能正常加载图像追踪资源。 - 修正资源加载的错误处理:在初始化
ImageTrackingProvider前先确认参考图加载成功,避免传入空数组:@MainActor class ARKitViewModel: ObservableObject{ private let session = ARKitSession() private let imageTracking: ImageTrackingProvider? init() { guard let referenceImages = ReferenceImage.loadReferenceImages(inGroupNamed: "AR") else { print("Failed to load reference images") imageTracking = nil return } imageTracking = ImageTrackingProvider(referenceImages: referenceImages) } // ... 其余代码不变 } - 调整Session启动逻辑:合并两个task,避免竞态条件,确保Session启动后再监听更新:
struct ImmersiveView: View { @StateObject var arKitVM = ARKitViewModel() var body: some View { RealityView { content in } .task { await arKitVM.runSession() await arKitVM.processUpdates() } } } - 更换Xcode版本:Xcode 15.3 beta 3可能存在兼容性Bug,尝试升级到最新Beta版或稳定版测试。
内容的提问来源于stack exchange,提问作者Pascal Meger
相关产品推荐
相关产品推荐

