Highlight
visionOS 新增六组企业级 API,提供主摄像头访问、Passthrough 屏幕捕获、空间条码扫描、Apple Neural Engine 直接调用、对象跟踪参数调优和应用性能增强,仅限企业内部分发使用。
核心内容
Vision Pro 自发布以来,企业客户不断反馈需要更多设备能力访问权限,以构建真正改变工作方式的空间应用。这场 Session 介绍的 Enterprise APIs for visionOS 正是为此而生。
主讲人 Kyle McEachern 明确指出,这些 API 提供了比现有 API 高得多的设备能力访问权限。出于隐私保护考虑,Apple 设计了一套严格的管控机制:必须使用 managed entitlement、需要与开发者账户绑定的许可证文件、仅限内部分发(In-House 或通过 Apple Business Manager 私有分发)。
六大 API 分两大类别。第一类是增强传感器访问:主摄像头视频流(Main Camera Access)、Passthrough 视频屏幕捕获(Include Passthrough in Screen Capture)、空间条码/二维码扫描(Spatial Barcode & QR Code Detection)。第二类是平台控制:Apple Neural Engine 直接调用(ANE)、增强 Object Tracking、应用性能调优(Performance Tuning)。
每个 API 都配有具体工业场景:生产线上的零件异常检测(主摄像头 + 计算机视觉)、远程专家协作(Passthrough 屏幕共享)、仓库拣货确认(条码扫描)、边缘 AI 推理(ANE)等。Session 还演示了一个综合场景:技术人员在组装电子设备时遇到困难,通过企业应用连接远程支持专家,依次启用主摄像头共享、条码扫描获取说明书、Passthrough 全屏共享,最终在专家指导下完成组装。
详细内容
主摄像头访问(Main Camera Access)
这是企业客户呼声最高的功能。启用后,应用可以访问 Vision Pro 主摄像头的视频流,配合计算机视觉算法实现环境感知。
典型场景:生产线质量检测。主摄像头捕捉产品图像,CV 算法实时分析,发现不合格品时高亮标记,辅助工人快速替换。
实现代码(03:36):
// 主摄像头访问示例
let formats = CameraVideoFormat.supportedVideoFormats(for: .main, cameraPositions:[.left])
let cameraFrameProvider = CameraFrameProvider()
var arKitSession = ARKitSession()
var pixelBuffer: CVPixelBuffer?
await arKitSession.queryAuthorization(for: [.cameraAccess])
do {
try await arKitSession.run([cameraFrameProvider])
} catch {
return
}
guard let cameraFrameUpdates =
cameraFrameProvider.cameraFrameUpdates(for: formats[0]) else {
return
}
for await cameraFrame in cameraFrameUpdates {
guard let mainCameraSample = cameraFrame.sample(for: .left) else {
continue
}
self.pixelBuffer = mainCameraSample.pixelBuffer
}
关键点:
CameraVideoFormat.supportedVideoFormats(for: .main)获取主摄像头支持的格式- 需要请求
.cameraAccess授权 - 主摄像头位于设备左侧,因此使用
.cameraFrameUpdates(for: ...).sample(for: .left)获取帧 - 每一帧返回
CVPixelBuffer,可传递给 CV 算法处理或显示
Entitlement:main-camera-access.allow
Passthrough 屏幕捕获(Include Passthrough in Screen Capture)
默认情况下,Vision Pro 屏幕捕获只包含应用窗口,背景被移除。启用此 API 后,捕获内容将包含完整的 Passthrough 摄像头视图——用户看到的完整空间场景。
典型场景:远程专家协作。现场技术人员通过系统广播功能,将”所见即所得”的完整视图(包括 Passthrough 背景和应用窗口)共享给远程专家,实现精准指导。
实现要求:
- Entitlement:
include-passthrough - 必须使用 Broadcast Upload Extension 接收视频流
- 用户需要通过系统”开始广播”按钮显式启动捕获
这是一个”加一行 entitlement 就能用”的功能,实现极简。
空间条码扫描(Spatial Barcode & QR Code Detection)
Vision Pro 现在可以自动检测并解析空间中的条形码和二维码。应用会获得条码类型、空间位置和内容信息。
典型场景:仓库拣货。工人只需看向包裹上的条码,系统自动验证是否为正确物品,无需手持扫描枪。
实现代码(07:47):
// 空间条码扫描示例
await arkitSession.queryAuthorization(for: [.worldSensing])
let barcodeDetection = BarcodeDetectionProvider(symbologies: [.code39, .qr, .upce])
do {
try await arkitSession.run([barcodeDetection])
} catch {
return
}
for await anchorUpdate in barcodeDetection.anchorUpdates {
switch anchorUpdate.event {
case .added:
// 在新检测到的条码周围添加视觉标记
addEntity(for: anchorUpdate.anchor)
case .updated:
// 更新条码位置标记
updateEntity(for: anchorUpdate.anchor)
case .removed:
// 移除条码标记
removeEntity(for: anchorUpdate.anchor)
}
}
关键点:
- 需要
.worldSensing权限 BarcodeDetectionProvider指定支持的条码类型(Code-39、QR、UPC-E 等)- 通过
anchorUpdates异步流接收检测事件 added/updated/removed事件对应条码的首次检测、位置变化和离开视野
Entitlement:barcode-detection.allow
Apple Neural Engine 访问(ANE Access)
此前 visionOS 上的 Core ML 模型只能在 CPU 和 GPU 上运行。此 API 解锁了 Apple Neural Engine,让设备本地运行需要更高算力的 ML 模型。
典型场景:配合主摄像头使用,运行自定义异常检测模型,实现完全本地的产品质量分析。
实现代码(13:17):
// Apple Neural Engine 访问示例
let availableComputeDevices = MLModel.availableComputeDevices
for computeDevice in availableComputeDevices {
switch computeDevice {
case .cpu: setCpuEnabledForML(true) // 示例方法名
case .gpu: setGpuEnabledForML(true) // 示例方法名
case .neuralEngine: runMyMLModelWithNeuralEngineAvailable() // 示例方法名
default: continue
}
}
关键点:
- 通过
MLModel.availableComputeDevices查询可用计算设备 - 系统根据资源占用、模型需求等因素动态选择最合适的计算单元
- 如果 NE 不可用或不高效,CoreML 会自动回退到 GPU/CPU
Entitlement:neural-engine-access
对象跟踪增强(Object Tracking Enhancements)
visionOS 2.0 引入了已知对象跟踪功能。企业 API 进一步开放了参数调优能力,包括:
maximumTrackableInstances:最大同时跟踪对象数(默认 10)maximumInstancesPerReferenceObject:每种参考对象的最大实例数detectionRate:新对象识别频率stationaryObjectTrackingRate:静态对象跟踪频率movingObjectTrackingRate:移动对象跟踪频率
典型场景:复杂维修环境,需要同时跟踪大量工具和零件,辅助技术人员按步骤完成维修。
实现代码(15:39):
// 对象跟踪增强示例
var trackingParameters = ObjectTrackingProvider.TrackingConfiguration()
// 将最大跟踪对象数从默认的 10 提升到 15
trackingParameters.maximumTrackableInstances = 15
// 其他参数保持默认值
trackingParameters.maximumInstancesPerReferenceObject = 1
trackingParameters.detectionRate = 2.0
trackingParameters.stationaryObjectTrackingRate = 5.0
trackingParameters.movingObjectTrackingRate = 5.0
let objectTracking = ObjectTrackingProvider(
referenceObjects: Array(referenceObjectDictionary.values),
trackingConfiguration: trackingParameters)
var arkitSession = ARKitSession()
arkitSession.run([objectTracking])
关键点:
- 参数调整需要权衡计算资源,提高一个参数可能需要降低其他参数
- 参考对象是
.referenceObject文件,创建方法见文档 - 参数值设置后传递给
ObjectTrackingProvider
Entitlement:object-tracking-parameter-adjustment.allow
应用性能调优(App Compute Settings)
此 API 允许应用获得更多 CPU 和 GPU 算力,代价是风扇转速提高、环境噪声增加。
典型场景:渲染高保真 3D 设计模型,通过增强算力提升渲染性能和帧率。
Entitlement:app-compute-category
注意事项:
- 此设置是应用级别的,无法通过代码动态开关
- 系统根据设备状态和工作负载动态调整
核心启发
-
企业应用场景优先评估 Passthrough 屏幕捕获:这是实现成本最低、效果最立竿见影的功能。只需添加 entitlement,现有应用即可支持完整的”所见即所得”远程协作,适合作为企业 visionOS 应用的第一步。
-
主摄像头 + 条码扫描是仓储物流的标配组合:如果你的客户涉及仓库管理、生产线质检、零售库存等场景,这两个 API 应该优先考虑。主摄像头提供环境感知,条码扫描提供物品识别,配合起来可以构建完整的数字孪生工作流。
-
ANE 访问解锁本地 AI 能力:对于需要运行自定义 ML 模型的场景,ANE 访问是关键。异常检测、缺陷识别、OCR 等视觉任务可以完全在设备本地执行,无需云端依赖,适合对隐私敏感的企业环境。
关联 Session
- Create enhanced spatial computing experiences with ARKit — 了解 ARKit 最新功能,包括房间跟踪、对象跟踪、环境光照反应、手部跟踪和平面检测改进。
- Explore object tracking for visionOS — 学习如何使用对象跟踪将现实世界物体转换为 visionOS 应用中的虚拟锚点。
- Render Metal with passthrough in visionOS — 学习如何将 Metal 渲染内容与物理环境集成,通过 Passthrough 实现更沉浸的体验。
- What’s new in device management — 了解 iOS、iPadOS、macOS 和 visionOS 的最新管理功能,包括 Apple Business Manager 更新。
- Discover RealityKit APIs for iOS, macOS, and visionOS — 探索 RealityKit 的跨平台新 API,了解如何为 iOS、macOS 和 visionOS 构建沉浸式应用。
评论
GitHub Issues · utterances