You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:02:35