【iOS 18】DockKitのアップデート
DockKitはDockKit対応アクセサリを動かすためのフレームワークです。WWDC24でiOS 18から使用可能な強力なDockKit APIがいくつか追加されました。それらのAPIを使用することで、より一層DockKit対応アクセサリを柔軟に動かすことができるようになります。
本記事では、Insta360 Flow Pro & Flowを使用して、WWDC24で発表されたDockKitの新APIについて説明します。
本記事を最後までお読みいただくことで、WWDC24で発表されたDockKitの新APIをすぐに使用することができるようになります。DockKitに初めて触れる方は先に以下の記事をお読みいただくと、本記事をスムーズにお読みいただくことができます。
インテリジェントトラッキング
インテリジェントトラッキングとは、撮影シーンで焦点の対象を自動で判断するトラッキング方法です。iOS 18からは自動で焦点の対象を決めることができます。また、ビデオフレーム内に写っている人物や物体の特徴を取得することができるようになり、特徴に応じて焦点の対象を変更することもできます。
ビデオフレーム情報の取得
ビデオフレームに関する情報を取得することができます。取得可能なビデオフレーム情報は以下の二つです。
- ビデオフレームをキャプチャした時刻を示すタイムスタンプ
- ビデオフレーム内に含まれるトラッキング対象情報
DockAccessory.TrackingStates
DockAccessory.TrackingStates
はトラッキングセッション状態の非同期シーケンスです。非同期で、アクティブなトラッキングセッションを表すDockAccessory.TrackingState
オブジェクトを取得することができます。
DockAccessory.TrackingState
DockAccessory.TrackingState
オブジェクトには、ビデオフレームをキャプチャした時刻を示すタイムスタンプや、ビデオフレームに写っている被写体情報が格納されています。
time
DockAccessory.TrackingState
オブジェクトのtime
で、ビデオフレームをキャプチャした時刻を示すタイムスタンプを取得することができます。
trackedSubjects
DockAccessory.TrackingState
オブジェクトのtrackedSubjects
で、ビデオフレームに写っているトラッキング対象情報を表すDockAccessory.TrackedSubjectType
の配列を取得することができます。
トラッキング対象情報の分析
ビデオフレーム内のトラッキング対象情報の特徴を取得することができます。取得可能なトラッキング対象情報の特徴は以下の通りです。
- 位置座標とサイズ
- 顕著性
- 発話確信の度合い
- カメラ目線の度合い
DockAccessory.TrackedSubjectType
DockAccessory.TrackedSubjectType
はトラッキング対象情報を表すEnum
です。以下の要素を持っています。各要素のassociated Valueでトラッキング対象の特徴を取得することができます。
要素 | 意味 |
---|---|
object(DockAccessory.TrackedObject) | トラッキング対象がオブジェクト |
person(DockAccessory.TrackedPerson) | トラッキング対象が人物 |
DockAccessory.TrackedObject
DockAccessory.TrackedObject
はDockAccessory.TrackedSubjectType
の要素である、object
のassociated Valueです。
identifier
トラッキングされているオブジェクトに与えられる一意の識別子です。この識別子はDockKitアクセサリがオブジェクトをトラッキングする限り持続します。後述するselectSubjects(_:)
の引数にこのidentifier
を渡すことで、トラッキング対象を変更することができます。
rect
トラッキングされているオブジェクトのバウンディングボックスです。CGRect
型で、バウンディングボックスの位置とサイズを表しています。
saliencyRank
トラッキングされているオブジェクトの顕著性ランクです。ランクが低いほどオブジェクトの重要性が高いと判定されています。顕著性ランキングが設定されていない場合、またはオブジェクトが顕著でない場合の値はnil
になります。
DockAccessory.TrackedPerson
DockAccessory.TrackedPerson
はDockAccessory.TrackedSubjectType
の要素である、person
のassociated Valueです。
identifier
トラッキングされている人物に与えられる一意の識別子です。この識別子はDockKitアクセサリがオブジェクトをトラッキングする限り持続します。後述するselectSubjects(_:)
の引数にこのidentifier
を渡すことで、トラッキング対象を変更することができます。
lookingAtCameraConfidence
カメラを直接見ている人の自信を表す指標です。指標の値の範囲は0.0
から1.0
で、DockKitがスコアを計算していない場合は0.0
になります。
rect
トラッキングされている人物のバウンディングボックスです。CGRect
型
で、バウンディングボックスの位置とサイズを表しています。
saliencyRank
トラッキングされている人物の顕著性ランクです。ランクが低いほど人物の重要性が高いと判定されています。顕著性ランキングが設定されていない場合、または人物が顕著でない場合の値はnil
になります。
speakingConfidence
トラッキング中に話している人の信頼度スコアです。指標の値の範囲は0.0
から1.0
で、DockKitがスコアを計算していない場合は0.0
になります。
トラッキング対象の選択
selectSubjects(_:)
selectSubjects(_:)
でトラッキング対象を変更することができます。selectSubjects(_:)
の引数には、トラッキング対象にしたいDockAccessory.TrackedPerson
、DockAccessory.TrackedObject
のidentify
を配列で指定します。
コントロールボタン
DockKit対応アクセサリに搭載されている、ボタンやホイールの変更を検知することができます。例えば、Insta360 Flow & Proにはホイールとボタンが搭載されており、それらの変更を検知することができます。
ボタンやホイールの変更を検知
DockAccessory.AccessoryEvents
DockAccessory.AccessoryEvents
はDockKit対応アクセサリ側で発生したイベントの非同期シーケンスです。非同期で、はDockKit対応アクセサリ側で発生したイベントを表すDockAccessory.AccessoryEvent
オブジェクトを取得することができます。
DockAccessory.AccessoryEvent
DockAccessory.AccessoryEvent
はDockKit対応アクセサリ側で発生したイベントを表すEnum
です。以下の要素を持っています。
要素 | 意味 |
---|---|
button(id: Int, pressed: Bool) | カスタムボタンで発生したアクセサリイベント |
cameraFlip | バックカメラとフロントカメラを切り替えるアクセサリイベント |
cameraShutter | シャッターを切るアクセサリイベント |
cameraZoom(factor: Double) | カメラズームを行うアクセサリイベント |
DockAccessory.AccessoryEvents
から非同期的に取得したDockAccessory.AccessoryEvent
の要素をチェックし、発生したアクセサリイベントによって、実行する処理を分けることができます。
バッテリー状態の監視
DockAccessory.BatteryStates
DockAccessory.BatteryStates
はiPhoneと接続中の、DockKit対応アクセサリのバッテリー状態の非同期シーケンスです。非同期でDockKit対応アクセサリ側のバッテリー状態を表すDockAccessory.BatteryState
オブジェクトを取得することができます。
DockAccessory.BatteryState
DockAccessory.BatteryState
はiPhoneと接続中の、DockKit対応アクセサリのバッテリー状態を表す構造体です。DockKit対応アクセサリのバッテリー状態に関するプロパティを持っています。
batteryLevel
現在のバッテリー充電率です。0..1
の範囲でバッテリー充電率を表します。
chargeState
バッテリーの充電状態を表すEnum
です。
lowBattery
充電量が低いため、正常にDockKit対応アクセサリを動作させることが難しいかどうかを表します。
name
バッテリー名を表します。
おわりに
WWDC24で発表されたDockKitの新APIについて説明しました。2024/8/26時点のiOS 18 Developer Beta版では、若干動作に不安定な部分があると感じています。現時点では以下のような動作を確認しています。
- Auto-Tracking Stand Pro with DockKitはバッテリー状態を監視することはできるが、Insta360 Flow Pro & Flowはできない
-
lookingAtCameraConfidence
、speakingConfidence
の値が取得できない時がある
iOS 18がリリースされた後に、引き続き本記事をアップデートしていきます。
参考資料
・What’s new in DockKit
Discussion