WWDC Quick Look 💓 By SwiftGGTeam
Introducing enterprise APIs for visionOS

Introducing enterprise APIs for visionOS

观看原视频

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

注意事项:

  • 此设置是应用级别的,无法通过代码动态开关
  • 系统根据设备状态和工作负载动态调整

核心启发

  1. 企业应用场景优先评估 Passthrough 屏幕捕获:这是实现成本最低、效果最立竿见影的功能。只需添加 entitlement,现有应用即可支持完整的”所见即所得”远程协作,适合作为企业 visionOS 应用的第一步。

  2. 主摄像头 + 条码扫描是仓储物流的标配组合:如果你的客户涉及仓库管理、生产线质检、零售库存等场景,这两个 API 应该优先考虑。主摄像头提供环境感知,条码扫描提供物品识别,配合起来可以构建完整的数字孪生工作流。

  3. ANE 访问解锁本地 AI 能力:对于需要运行自定义 ML 模型的场景,ANE 访问是关键。异常检测、缺陷识别、OCR 等视觉任务可以完全在设备本地执行,无需云端依赖,适合对隐私敏感的企业环境。


关联 Session

评论

GitHub Issues · utterances