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

Vision Pro中Image Tracking初始化报错‘No images were supplied’求助

排查Vision Pro ARKit图像追踪错误:No images were supplied

1. 检查资源配置(最常见原因)

  • 确认参考图片的ARKit属性设置:
    1. 在Assets目录选中参考图片,打开右侧属性面板(Inspector)。
    2. 将Render As设置为Original Image(不能选Template Image)。
    3. 勾选Reference Image选项,必须填写Physical Size(比如图片实际宽度为10cm就填10cm)——ARKit需要知道图片实际物理尺寸才能完成追踪。
  • 验证资源组名称:
    确保代码中inGroupNamed: "ref"的组名和Assets中文件夹名称完全一致(区分大小写,Ref和ref会被视为不同组)。
  • 检查图片格式与质量:
    • 仅使用PNG/JPG等ARKit支持的格式,避免WebP等非标准格式。
    • 确保图片分辨率不低于500x500像素,且有丰富纹理特征(避免大面积纯色、模糊图像)。

2. 修复代码中的Session实例混淆问题

你的代码存在两个ARKitSession实例(全局arkitSession和类内session),启动时用全局实例加载类内的imageTracking,会导致Session与追踪Provider不匹配,无法正确传入参考图片。修改代码统一使用类内Session:

import Foundation
import RealityKit
import ARKit
import RealityKitContent

@MainActor class ARKitViewModel: ObservableObject{
    private let session = ARKitSession()
    private var imageTracking: ImageTrackingProvider!
    var entityMap : [UUID: ModelEntity] = [:]
    
    init() {
        // 验证参考图片是否加载成功
        guard let referenceImages = ReferenceImage.loadReferenceImages(inGroupNamed: "ref") else {
            fatalError("无法加载ref组中的参考图片,请检查资源配置")
        }
        imageTracking = ImageTrackingProvider(referenceImages: referenceImages)
    }
    
    func runSession() async {
        do {
            try await session.run([imageTracking]) // 使用类内session启动
        } catch {
            print("Error: \(error)")
        }
    }
    
    var material = SimpleMaterial()
    var rootEntity = Entity()
    
    func updateImage(_ anchor: ImageAnchor) {
        if entityMap[anchor.id] == nil {
            let entity = ModelEntity(mesh: .generateSphere(radius: 0.05))
            entityMap[anchor.id] = entity
            rootEntity.addChild(entity)
            entity.transform = Transform(matrix: anchor.originFromAnchorTransform)
        }
    }
    
    func processUpdates() async {
        for await update in imageTracking.anchorUpdates {
            print("test")
            // 处理锚点更新
            if case .added(let anchor) = update {
                updateImage(anchor)
            }
        }
    }
}

3. 验证参考图片加载结果

在初始化时添加日志,确认ReferenceImage.loadReferenceImages是否返回有效图片数组:

init() {
    if let referenceImages = ReferenceImage.loadReferenceImages(inGroupNamed: "ref") {
        print("成功加载\(referenceImages.count)张参考图片")
        imageTracking = ImageTrackingProvider(referenceImages: referenceImages)
    } else {
        print("加载ref组参考图片失败:未找到有效图片或组不存在")
        fatalError("无法初始化图像追踪")
    }
}

4. 检查项目权限配置

确保Info.plist中添加相机权限描述,否则ARKit无法访问相机,间接导致追踪失败:

  • 添加NSCameraUsageDescription键,值填写相机使用原因(比如"需要使用相机进行图像识别")。

5. 设备适配与ARKit版本

确认项目部署目标设置为visionOS 1.0+,使用的ARKit版本支持Vision Pro设备。


内容的提问来源于stack exchange,提问作者kartbouni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:27:41