iOSエンジニアの堤です。7月10日に開催された弊社主催のモバイル勉強会で、「iPhoneに手足を生やす」というタイトルで発表しました。
スライドはこちら:
また動画版はこちら。
本記事は、同発表をベースとしつつ、(LTでは時間が足りないので)発表ではカットした内容を盛り込んで記事として再構成したものになります。
DockKitの話をします
- 被写体を自動追尾するドック(を機能させるiOSフレームワーク)
- iOS 17で登場(2023年9月リリース)
- 初の対応デバイスが出たのは2024年初頭
『あー そういうデバイスあるよね』
なんなら友人と自作したこともある(2018年)
→ そんな(既製品が多くあり自作もできてしまうような)ものを・・・
なぜ今更Appleが...?🤔
世はまさに大生成AI時代
- GPT-4o
- Llama 3
- Claude3.5 Sonnet
- Gemini
- Apple Intelligence
マルチモーダルAIの主戦場はスマホ
スマホはAIにとっての「身体」
- AI → 脳
- カメラ → 目
- マイク → 耳
- スピーカー → 口
- ? → 手足
「動き」を司る身体性を獲得できていない
スマホにとっての手足とは?
- ロボットアームが一般家庭に置かれるか?
- スマホは走らせるものじゃない
→ 標準でサポートするものではない
「ドック」の絶妙さ その1
スマホにとってのドックは、従来から使われている形態
c.f. 「ウェアラブル」デバイスもメガネや時計といった従来からある形態をモチーフにしたものが残っている
→ スマホに生やす外付けデバイスとして無理がない
「ドック」の絶妙さ その2
動きはパンとチルトだけ
・・・だが実は用途が広い
- カメラとの連携
- 顔、人体、手、動物、バーコード/QRコード、モノ、etc...のトラッキング
- 音声との連携
- UWB (Ultra Wide Band) との連携
- 位置情報やコンパスとの連携
- AirPodsとの連携
→ 「何らかの位置をセンシングするあらゆる機能」や、「動きのトリガーとなる機能」と組み合わせて使える
さまざまな分野に応用可能
たかがドック、されどドック
DockKitはスマホの可能性を大きく広げる
いったんまとめ
- DockKitは自動追尾ドックをサポートするフレームワーク
- AI+スマホの最後のミッシングパーツ「動き」を担う
- シンプルだが用途が幅広くスマホの可能性を大きく広げる
実装方法
実装手順
AV Foundationフレームワーク内でDockKitをサポートしてくれている
普通に撮影機能を実装していれば勝手にDockKit対応になる
デモ
(数年前に個人で開発した、AIで人やペットを認識して自動で動画を撮影開始/停止 1 する TOTOC というアプリを用いて、 DockKit対応の実装は一切なし で自動追尾する様子をデモしました 2 。)
普通に撮影機能を実装していれば勝手にDockKit対応になる
これぞ「標準」ならではの強み!
・・・とはいえいろいろ実装したい
DockKitのカスタムコントロール
⚠️ 本節の内容は2024年7月6日に書いた別記事 に詳しくまとめています。
カメラ視野のコントロール
- フレーミングモードの指定
- 自動フレーミングの左、中央、右の配置を選択
try await dock.setFramingMode(.right)
- Region of interestの指定
カスタム推論
トラッキング対象をデフォルトの顔・体から別のものに
Visionが便利:
- Observationをそのまま渡せる
- Create ML/Core MLを利用した独自モデルでもOK
その他
- カスタムモーター制御
- 「どの方向にどれぐらい動かすか」をコードから制御できる
- デバイスアニメーション
- ビルトイン:Yes, No, Wakeup, Kapow
- カスタム
カスタムコントロールまとめ
- カメラ視野のコントロール
- カスタム推論
- カスタムモーター制御
- デバイスアニメーション
WWDC24でのアップデート
⚠️ 本節の内容は2024年6月16日に書いた別記事 に詳しくまとめています。
Tracking summaryの取得 🆕
トラッキング状態の情報をアプリ側からも取得できるようになった
- 顕著性ランク
- 発話確信度
- カメラを見ている可能性のスコア
Tracking summaryを用いた実装例
アクティブなスピーカーを常に追跡する
- 80%以上の信頼度で発言しているすべての人物を取得
- このリストをselect subjects APIに渡す
let activeSpeakers = trackedPersons. filter { $0. speakingConfidence > 0.8 } let activeSpeakerIDs = activeSpeakers.map ‹ $0.identifier } self.dockAccessory?.selectSubjects(activeSpeakerIDs)
Intelligent Subject Tracking 🆕
- 高度なアルゴリズムと機械学習を用いて、リアルタイムでシーンを分析
- 動きや話し方、カメラとの近さetc.の要因に基づいて追跡すべき被写体を決定
その他の新機能
- DockKitアクセサリーのボタンサポート
- ジンバル型デバイス
- 標準カメラアプリでのサポート拡大
もはや「TrackingKit」と呼んでも過言ではない 3
DockKit = ドック型の外付けハードウェアを制御するフレームワークDockKit = スタンド型やジンバル型の外付けハードウェア + AIやアルゴリズムのソフトウェアでスマホに最高のトラッキング性能を与えるフレームワーク
まとめ
- DockKitは「なぜいまさら?」と思いきや、実はなかなか絶妙なミッシングリンクを埋める位置づけ
- 他フレームワークとの相性も良く、用途も広い
- コードを1行も書かなくても自動的に対応
- カスタムコントロール手段もいろいろある
- iOS 18でさらに高度なトラッキングが可能に
後日談
本記事の内容で発表を行ったのは2024年7月10日ですが、奇しくも(?)その翌日、7月11日に第2のDockKit対応製品であるジンバル型の "Insta360 flow pro" が発売されました。
なおたまたまですが昨日ジンバル型のDockKit対応製品Insta360 flow proが発売されたようです。https://t.co/qHtYklnWY3
— 堤修一 / Shuichi Tsutsumi (@shu223) 2024年7月10日
こちらはWWDC24のセッションの要約記事にも書いたiOS 18でのDockKitの新機能「ボタンサポート」「カスタムビヘイビア」にも対応しており、第一弾のスタンドタイプのものよりも価格も安く、結構売れているようです。
また9月に行われたiOSDC Japan 2024ではDockKitに関するトークもありました。
豊富なデモを交え、現状DockKitでできることを網羅して解説されています。興味を持たれた方はぜひご参照ください。
おわりに
Sansan / Eightのモバイルアプリ開発を進めていく仲間を募集中です!選考評価なしで現場のエンジニアのリアルな声が聞けるカジュアル面談もありますので、ご興味のある方はぜひ面談だけでもお越しいただけたら幸いです。