Vision Pro中Image Tracking初始化报错‘No images were supplied’求助
排查Vision Pro ARKit图像追踪错误:No images were supplied
1. 检查资源配置(最常见原因)
- 确认参考图片的ARKit属性设置:
- 在Assets目录选中参考图片,打开右侧属性面板(Inspector)。
- 将Render As设置为
Original Image(不能选Template Image)。 - 勾选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
相关产品推荐
相关产品推荐

