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):
- Subject Selection ML Model —— 分析 body pose、face pose、attention、speaking confidence,输出 saliency rank。
- Subject Framing —— 根据选中的人计算视觉最优构图。
- Actuator Commands —— 结合电机位置和速度反馈,生成最终驱动指令。
读取 ML 信号:trackingStates
DockKit 通过 trackingStates AsyncSequence 暴露追踪状态(07:41)。每个 TrackedSubject 包含:
identifier:唯一标识faceRectangle:面部区域saliencyRank:显著性排名,1 = 最重要- 如果是人,还提供
speakingConfidence(01)和1)lookingAtCameraConfidence(0
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 事件带
buttonID和isPressed,可以区分按下和松开
云台(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
- Bring your machine learning and AI models to Apple silicon — 了解如何优化 ML 模型以在 Apple 芯片上高效运行
- Build a great Lock Screen camera capture experience — 用 lockedCameraCapture API 在锁屏状态下提供相机拍摄能力
- Deploy machine learning and AI models on-device with Core ML — Core ML 模型转换与运行时性能优化
- Design App Intents for system experiences — App Intents 在控件、Spotlight、Siri 等系统体验中的设计方法
评论
GitHub Issues · utterances