WWDC Quick Look 💓 By SwiftGGTeam
What’s new in DockKit

What’s new in DockKit

观看原视频

Highlight

DockKit 是 Apple 去年推出的框架,配合第三方物理支架(现在已经可以在 Apple Store 买到)实现 iPhone 的自动追踪拍摄。今年 iOS 18 带来了 Intelligent Subject Tracking——基于机器学习的智能主体追踪。


核心内容

多人场景下,该追踪谁?这是 DockKit 追踪拍摄的老问题。iOS 17 的多人追踪器只能估计每个人的运动轨迹,无法判断谁是画面中最值得关注的人。当场景里有三个人——两个在前排交谈、一个在后排看手机——摄影师一眼就知道该跟谁,但旧版 DockKit 不行。

iOS 18 的 Intelligent Tracking Pipeline 解决了这个问题。它在多人追踪器之上加了一层 Subject Selection ML Model,实时分析每个人的身体姿态、面部朝向、注意力和说话置信度,给出一个 saliency rank——排名越低越重要。然后再经过 Subject Framing 模块计算最优构图,最后把指令发给支架电机。整个管线无需开发者额外写代码,使用标准 Camera API 的 App 会自动获得智能追踪能力。

与此同时,Apple 还开放了 ML 信号(saliency rank、speaking confidence、lookingAtCameraConfidence)让开发者自定义追踪逻辑,新增了按钮事件和云台(Gimbal)配件支持,以及 Cinematic、Pano 等新的相机模式追踪和电池状态监控 API。


详细内容

Intelligent Tracking Pipeline

iOS 17 的多人追踪器只输出每个人的轨迹。iOS 18 在此基础上加了三个阶段(04:13):

  1. Subject Selection ML Model —— 分析 body pose、face pose、attention、speaking confidence,输出 saliency rank。
  2. Subject Framing —— 根据选中的人计算视觉最优构图。
  3. Actuator Commands —— 结合电机位置和速度反馈,生成最终驱动指令。

读取 ML 信号:trackingStates

DockKit 通过 trackingStates AsyncSequence 暴露追踪状态(07:41)。每个 TrackedSubject 包含:

  • identifier:唯一标识
  • faceRectangle:面部区域
  • saliencyRank:显著性排名,1 = 最重要
  • 如果是人,还提供 speakingConfidence(01)和 lookingAtCameraConfidence(01)

Session 演示了一个”追踪说话者”的例子(08:59):

// 订阅追踪状态
let trackingState = dockAccessory.trackingStates

// 筛选正在说话的人(置信度 > 80%)
let activeSpeakers = trackingState.subjects
    .compactMap { $0 as? DockAccessory.TrackedSubject.Person }
    .filter { $0.speakingConfidence > 0.8 }

// 让 DockKit 只追踪这些说话者
dockAccessory.selectSubjects(activeSpeakers)

关键点:

  • trackingStates 是 AsyncSequence,每次状态更新都会收到新值
  • saliencyRank 从 1 开始单调递增,rank 越小越重要
  • speakingConfidence 为 0 表示没在说话,1 表示在说话
  • selectSubjects 接受一个 TrackedSubject 数组,告诉 DockKit 追踪哪些人

Watch Control

智能追踪之外,用户可以用 Apple Watch 手动干预(05:27):在 Watch 上点击某个人的面部来单独追踪他,或者滑动来手动调整支架方向。这是系统自带的功能,无需开发。

按钮事件

DockKit 配件现在支持按钮,三种系统事件自动映射到 Camera 和 FaceTime(10:06):

  • Shutter:拍照 / 录制(toggle,无值)
  • Flip:切换前后摄像头(toggle,无值)
  • Zoom:缩放,附带 relative factor(如 2.0 表示画面放大一倍)

第三方 App 可以通过 accessoryEvents 接收这些事件,还能接收 custom button event(带 button ID 和 pressed 布尔值)。

Session 演示了用自定义按钮控制云台旋转拍全景的例子(13:15):

// 订阅配件按钮事件
for await event in dockAccessory.accessoryEvents {
    if case .custom(let buttonID, let isPressed) = event {
        if buttonID == 5 {
            if isPressed {
                startPanoramaRotation()
            } else {
                stopPanoramaRotation()
            }
        }
    }
}

关键点:

  • accessoryEvents 是 AsyncSequence,每次按钮触发收到一个事件
  • 系统事件(shutter / flip / zoom)和自定义事件(custom)共用同一个流
  • custom 事件带 buttonIDisPressed,可以区分按下和松开

云台(Gimbal)

DockKit 新增了云台配件类别(11:16)。与桌面支架不同,云台可以手持使用,适合运动摄影。按钮(flip、zoom、自定义)在云台上更实用——手持时无法触屏,物理按键是唯一交互方式。

新相机模式

iOS 18 扩展了 DockKit 支持的相机模式(14:03):

  • Photo 模式:追踪拍摄人物照片
  • Pano 模式:一键自动旋转拍摄全景
  • Cinematic 模式:电影效果追踪对焦人物

电池状态

通过 batteryStates AsyncSequence 监控配件电量(14:46)。一个配件可能有多个电池,每个电池有 name、level(百分比)和 chargeState(charging / discharging / full)。


核心启发

  • 做什么:做一个”会议模式”——自动追踪当前说话者。利用 speakingConfidence 筛选正在说话的人,用 selectSubjects 切换追踪目标。为什么值得做:视频会议中发言人频繁切换,手动切画面体验差;DockKit 的 ML 信号已经帮你做了说话检测,只需一行 filter。怎么开始:在现有的 Camera App 中订阅 trackingStates,按 speakingConfidence > 0.8 过滤 person,传给 selectSubjects

  • 做什么:用自定义按钮实现”一键全景”——云台按钮按下开始匀速旋转,松开停止。为什么值得做:手持云台拍全景时,手动旋转速度不均匀,成片拼接质量差;匀速电机旋转远比人手稳定。怎么开始:订阅 accessoryEvents,检测 custom button 的 pressed / unpressed 状态,调用 DockKit 旋转 API 控制云台匀速转动。

  • 做什么:做一个”看镜头才拍”功能——只有当 lookingAtCameraConfidence 超过阈值时才自动按下快门。为什么值得做:自拍或 vlog 场景下,人经常在调表情、看别处,废片率高;ML 信号直接告诉你对方是否在看镜头,省去后期挑选。怎么开始:在 trackingStates 回调中检查 lookingAtCameraConfidence > 0.9,满足条件时触发 capturePhoto

  • 做什么:在 App 内显示配件电池状态,低电量时提醒用户充电。为什么值得做:拍摄中途配件断电会丢失素材,提前预警比事后补救好。怎么开始:订阅 batteryStates,当 level 低于 20% 时弹出低电量警告。


关联 Session

评论

GitHub Issues · utterances