"What’s new in DockKit" のまとめ #WWDC24
DockKitは、iOS 17で追加されたフレームワークで、対応デバイスが今年に入ってやっと発売されたところ。
こうやってiPhoneとペアリングして、
あとはiPhoneをドッキングするだけで、
ドックが自動的に動いて被写体をフレームに収めてくれる、というもの。
たったこれだけのことではあるが、かなり色々な用途に使える:
なおiOS 17までのDockKitフレームワークについてはこちらの記事に詳しい
そんなDockKitの新機能について解説したWWDC24のセッション "What’s new in DockKit" の内容についてまとめる。
セッション概要
「インテリジェント・トラッキング」は、要はAIカメラマンとして自律的にシーン内の被写体を選択・追跡する機能。Apple Watchを使ってカメラマンを手動で操作したり、APIを使ってカメラマンに指示することもできる。
またセッションのOverviewでは上の通りインテリジェント・トラッキングについてしか触れられていないが、個人的には「カスタムコントロール」が一番おもしろいアップデートだと感じた。あと「ボタンコントロール」も可能性を感じる。
AIによる被写体のトラッキング
Intelligent Subject Tracking とは
"Intelligent Subject Tracking" (インテリジェント・サブジェクト・トラッキング、Subjectは被写体の意)は、ビデオシーンで誰にフォーカスを当てるか、という古くからある問題を解決することを目的としている。
たとえばある被写体がお互いに交流している一方で、他の被写体が背景にいるようなシナリオを想像してみてほしい。最も関連性の高い人物を追跡し、フォーカスを維持することを決定するのは非常に難しい。
例えば、この単純なシーンでは、カメラマンとしては、手前の2人の被写体がお互いにやりとりしているところに焦点を合わせ、奥の人物は無視したいところ。
シーンが複雑になればなるほど、このような判断を下すにはより洗練された方法が必要になる。
そこで、Intelligent Subject Tracking が登場する。高度なアルゴリズムと機械学習を用いて、Intelligent Subject Tracking はリアルタイムでシーンを分析する。個々の顔や物体などの主な被写体を識別し、動きや話し方、カメラとの近さなどの様々な要因に基づいて、追跡すべき最も関連性の高い人物を決定する。
このトラッキングはスムーズでシームレスなため、手動で操作することなく、コンテンツ作成に集中することができる。
仕組みの解説
Intelligent Subject Tracking の基本的なアルゴリズムとフレームワークの解説:
Apple Watchを用いた操作
すべてのDockKitデバイスで「ウォッチコントロール」が利用可能になった。
ウォッチコントロールを使えば、iOSのカメラアプリでトラッキングやフレーミングをより正確にコントロールすることができる。
また、Docketアクセサリーを手動で操作して、ショットをさらに洗練させることもできる。
デモ
DockKitスタンドとiPhoneを置き、フレーム内に2人で入り、2人がトラッキングされている。その状態から、Apple Watchを使ってひとりの顔をタップ。
DockKitはそのひとりだけを追跡するようになる。
その後、ウォッチをスワイプしてDockKitのアクセサリーを手動で移動させ、自分の顔をタップ → 再び自分を追跡し始める、というデモ。
カスタムコントロール - Tracking summary
トラッキング中の情報をアプリ側からも取得してゴニョゴニョできるようになった、という話。
trackingStates の AsyncSequence を使用して、トラッキングサマリーをクエリできる
TrackingState には、その状態がキャプチャされた時間である time と、トラッキングされた被写体のリストが含まれる
追跡対象には、人または物体がある
Tracking summaryから得られる情報
追跡された被写体は、識別子、顔の矩形、および顕著性のランクを持つ。
被写体が人物である場合、発話確信度とカメラ目線確信度も提供される
顕著性ランクは、シーン内で最も重要な被写体に対する評価を表す
ランクは1から始まり、単調に増加する
ランクが低いほど、特定の被写体の重要性が高いことを示す
例えば、ランク1はランク2よりも顕著である
発話確信度は、発話する人物の尤度スコア
確信度スコアが0であれば、その人物は話しておらず、確信度スコアが1であれば、その人物は話していることを示す
カメラを見ている信頼度は、人物がカメラを直接見ている可能性のスコア
実装例
「アクティブなスピーカーを常に追跡する」アプリの実装例。
Docketアクセサリーのボタンサポート
これはどうやら、ジンバル型のDockKit対応アクセサリーを前提とした話らしい。
いま入手できるBelkinのDockKit対応スタンドもボタンは一応ひとつだけあるが、この「ボタンサポート」の対象なのかは不明
以下のようにシャッターやズームができるという話なので、こちらのスタンド型はおそらく対象ではない気がするし対象だとしてもあまり便利ではないと思う。
純正アプリでの挙動
標準のカメラアプリとFaceTimeでは、Docketはシャッター、フリップ、ズームの3種類のアクセサリイベントをサポートしている
シャッターイベントでは、写真やビデオを素早くキャプチャできる
フリップイベントでは、フロントカメラとバックカメラをシームレスに切り替えられる
zoomイベントは、ユーザーがシーンを拡大または縮小することを可能にする
カスタムビヘイビア
また、これらのイベントをアプリに配信することで、ユーザー体験を向上させるカスタムビヘイビアを実装できる
カメラシャッターとフリップイベントは、それらに関連付けられた値を持たないトグルイベント
カメラのズームイベントは、相対的な係数を持つ
例えば2.0であれば、画像の大きさは2倍、視野は半分になる
アクセサリは、ボタンを識別するためのIDと押されたかどうかを示すブール値を含むカスタムボタンイベントを送信することもできる
→ この最後のやつはスタンド型アクセサリーでも使えれば何か便利な用途はあるかも。
ジンバル型アクセサリー + ボタンコントロールでパノラマ撮影
実装概要は以下:
ID 5のカスタムボタンが付いたDockKitジンバルを持っていて、そのボタンを利用してジンバルの回転を開始したり停止したりしてパノラマを撮りたい。
まず、パノラマの回転を開始する関数と停止する関数の2つを書く。
アクセサリーのイベントをサブスクライブする
ユーザがドックのボタン5のイベントをトリガーしたとき、そのイベントは私のアプリに通知される
ボタン5が押されたら、ドックアクセサリーを一定速度で回転させる
ボタンを離すと回転を止める
標準カメラアプリでのサポート拡大
iOS 18では標準カメラアプリの以下のモードでもDockKitサポートしたよ、という話。
写真モードでは、カメラアプリで被写体を追跡できるようになった
Apple Watchやドケットジンバルを使って被写体や風景を撮影できる
パノラマモードでは、ボタンを1回押すだけで、被写体や環境の広がりを自律的に表現する美しいパノラマを撮影できる
シネマティックモードでは、ピントを合わせた人物をシネマティックに追えるように
DockKit対応デバイス
今のところはこちら一択。
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/