見出し画像

"What’s new in DockKit" のまとめ #WWDC24

DockKitは、iOS 17で追加されたフレームワークで、対応デバイスが今年に入ってやっと発売されたところ。

こうやってiPhoneとペアリングして、

WWDC24の同セッションより

あとはiPhoneをドッキングするだけで、

WWDC24の同セッションより

ドックが自動的に動いて被写体をフレームに収めてくれる、というもの。

WWDC24の同セッションより

たったこれだけのことではあるが、かなり色々な用途に使える:

WWDC24の同セッションより

DocketデバイスとユーザーフレンドリーなAPIにより、ビデオキャプチャ、ビデオ会議、教育、ヘルスケアに至るまで、パーソナライズされた特別な体験をデザインできるようになりました。これらのデバイスがあれば、当社の顧客は、フレームに収まることを心配することなく、コンテンツに集中することができます。

なおiOS 17までのDockKitフレームワークについてはこちらの記事に詳しい

そんなDockKitの新機能について解説したWWDC24のセッション "What’s new in DockKit" の内容についてまとめる。

セッション概要

Discover how intelligent tracking in DockKit allows for smoother transitions between subjects. We will cover what intelligent tracking is, how it uses an ML model to select and track subjects, and how you can use it in your app.
(DockKitのインテリジェント・トラッキングがどのように被写体間のスムーズな遷移を可能にするかをご覧ください。インテリジェント・トラッキングとは何か、どのようにMLモデルを使って被写体を選択・追跡するのか、そしてあなたのアプリでどのように使えるのかを説明します。)

「インテリジェント・トラッキング」は、要はAIカメラマンとして自律的にシーン内の被写体を選択・追跡する機能。Apple Watchを使ってカメラマンを手動で操作したり、APIを使ってカメラマンに指示することもできる。

またセッションのOverviewでは上の通りインテリジェント・トラッキングについてしか触れられていないが、個人的には「カスタムコントロール」が一番おもしろいアップデートだと感じた。あと「ボタンコントロール」も可能性を感じる。


AIによる被写体のトラッキング

Intelligent Subject Tracking とは

"Intelligent Subject Tracking" (インテリジェント・サブジェクト・トラッキング、Subjectは被写体の意)は、ビデオシーンで誰にフォーカスを当てるか、という古くからある問題を解決することを目的としている。

たとえばある被写体がお互いに交流している一方で、他の被写体が背景にいるようなシナリオを想像してみてほしい。最も関連性の高い人物を追跡し、フォーカスを維持することを決定するのは非常に難しい。

例えば、この単純なシーンでは、カメラマンとしては、手前の2人の被写体がお互いにやりとりしているところに焦点を合わせ、奥の人物は無視したいところ。

シーンが複雑になればなるほど、このような判断を下すにはより洗練された方法が必要になる。

そこで、Intelligent Subject Tracking が登場する。高度なアルゴリズムと機械学習を用いて、Intelligent Subject Tracking はリアルタイムでシーンを分析する。個々の顔や物体などの主な被写体を識別し、動きや話し方、カメラとの近さなどの様々な要因に基づいて、追跡すべき最も関連性の高い人物を決定する。

このトラッキングはスムーズでシームレスなため、手動で操作することなく、コンテンツ作成に集中することができる。

仕組みの解説

Intelligent Subject Tracking の基本的なアルゴリズムとフレームワークの解説:

iOS 17のマルチパーソントラッカーをベースに、iPhoneの画像インテリジェンスを利用してシーン内の複数の被写体の軌跡を推定し、iOS18では全く新しいインテリジェントなトラッキングパイプラインを開発しました。

このパイプラインは、複数人トラッカーからのデータを受け取り、高度な被写体選択機械学習モデルを通して処理します。

このモデルは、体のポーズ、顔のポーズ、注目度、話し方の確信度など様々な属性を分析し、シーンで最も焦点を当てるべき被写体を決定する。

次に、被写体フレーミングモジュールがあり、選択された被写体を入力とし、高度なアルゴリズムを使って、最も視覚的に魅力的なフレーミング方法を決定します。

最終的に計算されたシーンができたら、モーターの位置と速度のフィードバックを使用して、DockKitアクセサリーに送信する最終的なアクチュエーターコマンドを実現します。

Apple Watchを用いた操作

すべてのDockKitデバイスで「ウォッチコントロール」が利用可能になった。

ウォッチコントロールを使えば、iOSのカメラアプリでトラッキングやフレーミングをより正確にコントロールすることができる。

また、Docketアクセサリーを手動で操作して、ショットをさらに洗練させることもできる。

デモ

DockKitスタンドとiPhoneを置き、フレーム内に2人で入り、2人がトラッキングされている。その状態から、Apple Watchを使ってひとりの顔をタップ。

DockKitはそのひとりだけを追跡するようになる。

その後、ウォッチをスワイプしてDockKitのアクセサリーを手動で移動させ、自分の顔をタップ → 再び自分を追跡し始める、というデモ。

カスタムコントロール - Tracking summary

トラッキング中の情報をアプリ側からも取得してゴニョゴニョできるようになった、という話。

私たちはさらに多くのコントロールを提供したいと考えています。そのために、私たちはあなたのアプリで私たちの機械学習シグナルへのアクセスを提供しています。これにより、顧客が喜ぶ革新的で特徴的な機能を作成することが可能になります。あなたのアプリケーションがDockKitインテリジェントトラッキングを使用している場合、重要な属性を持つトラッキング中の被写体の概要を取得することができます。

  • trackingStates の AsyncSequence を使用して、トラッキングサマリーをクエリできる

  • TrackingState には、その状態がキャプチャされた時間である time と、トラッキングされた被写体のリストが含まれる

  • 追跡対象には、人または物体がある

Tracking summaryから得られる情報

追跡された被写体は、識別子、顔の矩形、および顕著性のランクを持つ。

  • 被写体が人物である場合、発話確信度とカメラ目線確信度も提供される

  • 顕著性ランクは、シーン内で最も重要な被写体に対する評価を表す

    • ランクは1から始まり、単調に増加する

    • ランクが低いほど、特定の被写体の重要性が高いことを示す

    • 例えば、ランク1はランク2よりも顕著である

  • 発話確信度は、発話する人物の尤度スコア

    • 確信度スコアが0であれば、その人物は話しておらず、確信度スコアが1であれば、その人物は話していることを示す

  • カメラを見ている信頼度は、人物がカメラを直接見ている可能性のスコア

実装例

「アクティブなスピーカーを常に追跡する」アプリの実装例。

まず、トラッキングの状態を非同期シーケンスとして問い合わせ、変数tracking stateに保存する。docketが更新を提供してくれるたびに、この変数を更新する。

さて、アクティブなスピーカーを追跡するために、私はまず、人物であるすべての追跡対象者のリストを取得する関数を持っている、

次に、80%以上の信頼度で発言しているすべての人物を取得するためにフィルタをかけます。

このリストをselect subjects APIに渡すと、Docketはシーン内のすべてのアクティブな話者を追跡できるようになる。

Docketの機械学習シグナルを活用することで、ユーザーにとって何が最も重要かを判断し、革新的で特徴的な機能を簡単に設計することができるからだ。

Docketアクセサリーのボタンサポート

これはどうやら、ジンバル型のDockKit対応アクセサリーを前提とした話らしい。

いま入手できるBelkinのDockKit対応スタンドもボタンは一応ひとつだけあるが、この「ボタンサポート」の対象なのかは不明

購入はしたが、2024年6月現在まだ積みガジェット(未開封)になっている…

以下のようにシャッターやズームができるという話なので、こちらのスタンド型はおそらく対象ではない気がするし対象だとしてもあまり便利ではないと思う。

純正アプリでの挙動

  • 標準のカメラアプリとFaceTimeでは、Docketはシャッター、フリップ、ズームの3種類のアクセサリイベントをサポートしている

  • シャッターイベントでは、写真やビデオを素早くキャプチャできる

  • フリップイベントでは、フロントカメラとバックカメラをシームレスに切り替えられる

  • zoomイベントは、ユーザーがシーンを拡大または縮小することを可能にする

カスタムビヘイビア

また、これらのイベントをアプリに配信することで、ユーザー体験を向上させるカスタムビヘイビアを実装できる

  • カメラシャッターとフリップイベントは、それらに関連付けられた値を持たないトグルイベント

  • カメラのズームイベントは、相対的な係数を持つ

    • 例えば2.0であれば、画像の大きさは2倍、視野は半分になる

  • アクセサリは、ボタンを識別するためのIDと押されたかどうかを示すブール値を含むカスタムボタンイベントを送信することもできる

→ この最後のやつはスタンド型アクセサリーでも使えれば何か便利な用途はあるかも。

ジンバル型アクセサリー + ボタンコントロールでパノラマ撮影

実装概要は以下:

  • ID 5のカスタムボタンが付いたDockKitジンバルを持っていて、そのボタンを利用してジンバルの回転を開始したり停止したりしてパノラマを撮りたい。

  • まず、パノラマの回転を開始する関数と停止する関数の2つを書く。

  • アクセサリーのイベントをサブスクライブする

    • ユーザがドックのボタン5のイベントをトリガーしたとき、そのイベントは私のアプリに通知される

  • ボタン5が押されたら、ドックアクセサリーを一定速度で回転させる

  • ボタンを離すと回転を止める

標準カメラアプリでのサポート拡大

iOS 18では標準カメラアプリの以下のモードでもDockKitサポートしたよ、という話。

  • 写真モードでは、カメラアプリで被写体を追跡できるようになった

    • Apple Watchやドケットジンバルを使って被写体や風景を撮影できる

  • パノラマモードでは、ボタンを1回押すだけで、被写体や環境の広がりを自律的に表現する美しいパノラマを撮影できる

  • シネマティックモードでは、ピントを合わせた人物をシネマティックに追えるように

DockKit対応デバイス

今のところはこちら一択。

ここから先は

0字

文章やサンプルコードは多少荒削りかもしれませんが、ブログや書籍にはまだ書いていないことを日々大量に載せています。たったの400円で、すぐに購読解除してもその月は過去記事もさかのぼって読めるので、少しでも気になる内容がある方にはオトクかと思います。

技術的なメモやサンプルコード、思いついたアイデア、考えたこと、お金の話等々、頭をよぎった諸々を気軽に垂れ流しています。

最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/