System & Services 进阶 20m
用 DockKit 集成电动 iPhone 支架
Integrate with motorized iPhone stands using DockKit
2023年6月5日
一句话判断
DockKit 让任何使用 iOS 相机 API 的 App 自动获得电动支架追踪能力——无需额外代码。但如果你需要自定义构图、指定追踪目标或直接控制电机,API 也提供了完整的控制接口。
这场 Session 讲了什么
Session 介绍了 DockKit 框架,用于 iPhone 与电动相机支架的集成。
开箱即用:
- DockKit 支架支持 360 度水平旋转和 90 度俯仰。
- 系统级追踪器运行在相机处理管线中,以 30fps 分析画面。
- 任何使用 iOS 相机 API 的 App 都自动获得追踪能力——包括系统相机和第三方 App(如 FiLMiC Pro)。
- 支架配对后即可使用,支架上有追踪开关按钮和 LED 指示灯。
系统追踪的工作原理:
- Visual Understanding Framework 生成人脸和身体边界框。
- 多模型系统追踪器为每个人/物体生成追踪轨道。
- EKF 统计滤波器平滑推理间隙和错误。
- 结合电机位置反馈和手机 IMU 数据计算最终轨迹和驱动指令。
- 多人场景下默认追踪主主体(绿色边界框标记),即使有遮挡也能保持追踪。
自定义控制:
- 注册 dock 配件状态变化(已连接/已断开)。
- 控制裁剪构图:左/中/右对齐,或指定感兴趣区域(ROI)。
- 指定追踪目标或直接控制电机。
- 设备动画(Device Animation)作为交互提示。
构图控制:
- 对齐模式:左/中/右对齐自动构图。适合有固定 UI 叠加层(如 logo)的场景。
- 感兴趣区域(ROI):用归一化坐标指定裁剪区域。适合视频会议等需要特定宽高比的场景。
值得深挖的点
系统级追踪 vs 自定义追踪的选择。系统追踪不需要任何代码,所有 App 自动受益。但当你需要控制”追踪谁”和”怎么构图”时,就要使用 DockKit API。这不是非此即彼——你可以在大部分时间用系统追踪,只在特定场景切换到自定义模式。
多人场景中的主主体追踪使用了统计滤波器来处理遮挡和穿越。当其他人遮挡主主体时,追踪器不会跳到遮挡者身上。这种鲁棒性来自于 EKF 滤波器对历史轨迹的维护——它不只是看当前帧,而是结合历史预测来做决策。
ROI 的归一化坐标系设计为左上角是原点,方便适配不同分辨率。这在视频会议场景特别有用——你可以告诉 DockKit”我的画面是正方形裁剪”,支架会确保主体在正方形区域内居中。
代码片段
监听支架状态并配置构图:
import DockKit
// 监听支架连接/断开
let manager = DockAccessoryManager.shared
for await state in manager.stateEvents {
switch state {
case .docked:
print("iPhone 已连接到支架")
// 配置追踪参数
case .undocked:
print("iPhone 已从支架取下")
}
}
控制构图对齐和感兴趣区域:
// 场景1:视频有左侧 logo 叠加层,主体右移
accessory.setFramingMode(.right)
// 主体会偏向画面右侧,避免被 logo 遮挡
// 场景2:视频会议需要正方形裁剪
let roi = CGRect(
x: 0.125, // 归一化坐标,左上角为原点
y: 0.0,
width: 0.75, // 正方形区域
height: 1.0
)
accessory.setRegionOfInterest(roi)
// 支架会确保主体在指定的正方形区域内居中
最佳实践
- 不需要追踪自定义的 App 无需改动代码——系统追踪自动工作。
- 有固定 UI 叠加层时用对齐模式(左/中/右)调整主体位置。
- 视频会议类 App 用 ROI 确保裁剪后主体不被切掉。
- 监听支架状态变化,在断开时优雅降级到手动操作模式。
- LED 指示灯帮助用户确认追踪状态,你的 App UI 也应该反映追踪状态。
- 切换前后摄像头时支架会自动旋转 180 度,确保这个行为符合你的 App 逻辑。
还有什么值得关注
- DockKit 支架通过蓝牙/USB 与 iPhone 通信,配对后自动连接。
- 支持的 App 场景包括:视频拍摄、直播、视频会议、健身、企业、教育、医疗等。
- FiLMiC Pro 等第三方 App 已经开箱支持 DockKit,说明零代码集成是可行的。
- 搭配 Animal Body Pose(Session 10045)可以实现宠物追踪场景。
- Device Animation 功能可以让支架做出物理运动作为交互提示——具体用法在 Session 后半部分介绍。
WWDC 2023