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

What's new in DockKit

元の動画を見る

ハイライト

DockKit は Apple が昨年導入したフレームワークで、サードパーティ製の物理マウント(Apple Store で購入可能)と組み合わせて iPhone の自動追跡撮影を実現します。今年 iOS 18 では Intelligent Subject Tracking——機械学習ベースのスマート被写体追跡——が追加されました。


主要内容

複数人のシーンで、誰を追跡すべきか?これが DockKit 追跡撮影の古くからの課題でした。iOS 17 の複数人トラッカーは各人の動きの軌跡を推定するだけで、フレーム内で最も注目すべき人物を判断できませんでした。3 人がいるシーン——前列で会話する 2 人と、後列でスマホを見る 1 人——では、カメラマンは一目で誰を追うべきか分かりますが、旧版 DockKit にはそれができませんでした。

iOS 18 の Intelligent Tracking Pipeline がこの問題を解決します。複数人トラッカーの上に Subject Selection ML Model を追加し、各人のボディポーズ、顔の向き、注意度、発話信頼度をリアルタイムで分析して saliency rank を算出します——ランクが低いほど重要です。その後 Subject Framing モジュールが最適な構図を計算し、マウントモーターに指令を送ります。パイプライン全体に開発者が追加コードを書く必要はなく、標準 Camera API を使うアプリは自動的にインテリジェント追跡を得られます。

同時に Apple は ML シグナル(saliency rank、speaking confidence、lookingAtCameraConfidence)を公開し、開発者が追跡ロジックをカスタマイズできるようにしました。ボタンイベントとジンバル(Gimbal)アクセサリのサポート、Cinematic や Pano など新しいカメラモードの追跡、バッテリー状態監視 API も追加されています。


詳細

Intelligent Tracking Pipeline

iOS 17 の複数人トラッカーは各人の軌跡のみを出力します。iOS 18 では 3 段階が追加されます(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)も提供

セッションでは「話者を追跡する」例をデモしています(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 から単調増加し、ランクが小さいほど重要
  • speakingConfidence が 0 は話していない、1 は話している
  • selectSubjects は TrackedSubject 配列を受け取り、DockKit に追跡対象を指定

Watch Control

インテリジェント追跡に加え、ユーザーは Apple Watch で手動介入できます(05:27): Watch 上で人物の顔をタップして個別追跡、またはスワイプでマウント方向を手動調整。システム組み込み機能で、開発不要です。

ボタンイベント

DockKit アクセサリはボタンをサポートするようになりました。3 つのシステムイベントが Camera と FaceTime に自動マッピングされます(10:06):

  • Shutter: 写真 / 録画(トグル、値なし)
  • Flip: 前面 / 背面カメラ切り替え(トグル、値なし)
  • Zoom: ズーム、relative factor 付き(例: 2.0 は画面を 2 倍に拡大)

サードパーティアプリは accessoryEvents でこれらのイベントを受信でき、custom button event(button ID と pressed ブール値付き)も受け取れます。

セッションではカスタムボタンでジンバル回転を制御してパノラマを撮る例をデモしています(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 で、ボタン操作のたびに 1 イベントを受け取る
  • システムイベント(shutter / flip / zoom)とカスタムイベント(custom)は同じストリームを共有
  • custom イベントは buttonIDisPressed を持ち、押下と離しを区別できる

ジンバル(Gimbal)

DockKit にジンバルアクセサリカテゴリが追加されました(11:16)。デスクトップマウントと異なり、ジンバルは手持ち使用が可能で、アクション撮影に適しています。ボタン(flip、zoom、カスタム)はジンバル上でより実用的——手持ち時はタッチ操作ができず、物理ボタンが唯一の操作手段です。

新しいカメラモード

iOS 18 で DockKit がサポートするカメラモードが拡張されました(14:03):

  • Photo モード: 人物の追跡撮影
  • Pano モード: ワンタップで自動回転パノラマ撮影
  • Cinematic モード: 映画効果で人物にフォーカス追跡

バッテリー状態

batteryStates AsyncSequence でアクセサリのバッテリーを監視できます(14:46)。1 つのアクセサリに複数のバッテリーがあり、各バッテリーには name、level(パーセント)、chargeState(charging / discharging / full)があります。


重要ポイント

  • やること: 「会議モード」を作る——現在の話者を自動追跡。speakingConfidence で話している人をフィルタし、selectSubjects で追跡対象を切り替える。価値がある理由: ビデオ会議では話者が頻繁に切り替わり、手動切り替えは体験が悪い。DockKit の ML シグナルが話者検出を済ませているので、filter 1 行で済む。始め方: 既存 Camera アプリで trackingStates を購読し、speakingConfidence > 0.8 で person をフィルタして selectSubjects に渡す。

  • やること: カスタムボタンで「ワンタップパノラマ」——ボタン押下で定速回転開始、離すと停止。価値がある理由: 手持ちジンバルでパノラマを撮ると手動回転の速度が不均一で、合成品質が悪くなる。定速モーター回転は人手よりはるかに安定。始め方: accessoryEvents を購読し、custom button の pressed / unpressed 状態を検出して DockKit 回転 API でジンバルを定速回転させる。

  • やること: 「カメラを見ているときだけ撮影」機能——lookingAtCameraConfidence が閾値を超えたときだけ自動シャッター。価値がある理由: 自撮りや vlog では表情を整えたり別の方向を見たりして、不要な写真が多い。ML シグナルが相手がカメラを見ているか直接教えてくれる。始め方: trackingStates コールバックで lookingAtCameraConfidence > 0.9 を確認し、条件を満たしたら capturePhoto をトリガー。

  • やること: アプリ内でアクセサリのバッテリー状態を表示し、低残量時に充電を促す。価値がある理由: 撮影中に電源が切れると素材を失う。事前警告は事後対応より良い。始め方: batteryStates を購読し、level が 20% 未満で低残量警告を表示。


関連セッション

コメント

GitHub Issues · utterances