Sansan Tech Blog

Sansanのものづくりを支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信

iPhoneに手足を生やす - DockKitのAPI解説とデモ

iOSエンジニアの堤です。7月10日に開催された弊社主催のモバイル勉強会で、「iPhoneに手足を生やす」というタイトルで発表しました。

スライドはこちら:

www.docswell.com

また動画版はこちら

本記事は、同発表をベースとしつつ、(LTでは時間が足りないので)発表ではカットした内容を盛り込んで記事として再構成したものになります。

DockKitの話をします

  • 被写体を自動追尾するドック(を機能させるiOSフレームワーク)
  • iOS 17で登場(2023年9月リリース)
    • 初の対応デバイスが出たのは2024年初頭

WWDC23 "Integrate with motorized iPhone stands using DockKit" より

『あー そういうデバイスあるよね』

なんなら友人と自作したこともある(2018年)

ハードとアプリはBLEで連携

そんな(既製品が多くあり自作もできてしまうような)ものを・・・

なぜ今更Appleが...?🤔

世はまさに大生成AI時代

  • GPT-4o
  • Llama 3
  • Claude3.5 Sonnet
  • Gemini
  • Apple Intelligence

マルチモーダルAIの主戦場はスマホ

スマホはAIにとっての「身体」

  • AI → 脳
  • カメラ → 目
  • マイク → 耳
  • スピーカー → 口
  • ? → 手足

「動き」を司る身体性を獲得できていない

スマホにとっての手足とは?

  • ロボットアームが一般家庭に置かれるか?
  • スマホは走らせるものじゃない

→ 標準でサポートするものではない

「ドック」の絶妙さ その1

スマホにとってのドックは、従来から使われている形態

c.f. 「ウェアラブル」デバイスもメガネや時計といった従来からある形態をモチーフにしたものが残っている

→ スマホに生やす外付けデバイスとして無理がない

「ドック」の絶妙さ その2

動きはパンとチルトだけ

WWDC23 "Integrate with motorized iPhone stands using DockKit" より

・・・だが実は用途が広い

  • カメラとの連携
    • 顔、人体、手、動物、バーコード/QRコード、モノ、etc...のトラッキング
  • 音声との連携
  • UWB (Ultra Wide Band) との連携
  • 位置情報やコンパスとの連携
  • AirPodsとの連携

→ 「何らかの位置をセンシングするあらゆる機能」や、「動きのトリガーとなる機能」と組み合わせて使える

さまざまな分野に応用可能

WWDC24 "What’s new in DockKit" より

たかがドック、されどドック

DockKitはスマホの可能性を大きく広げる

いったんまとめ

  • DockKitは自動追尾ドックをサポートするフレームワーク
  • AI+スマホの最後のミッシングパーツ「動き」を担う
  • シンプルだが用途が幅広くスマホの可能性を大きく広げる

実装方法

実装手順

AV Foundationフレームワーク内でDockKitをサポートしてくれている

WWDC24 "What’s new in DockKit" より

普通に撮影機能を実装していれば勝手にDockKit対応になる

デモ

(数年前に個人で開発した、AIで人やペットを認識して自動で動画を撮影開始/停止 1 する TOTOC というアプリを用いて、 DockKit対応の実装は一切なし で自動追尾する様子をデモしました 2 。)


普通に撮影機能を実装していれば勝手にDockKit対応になる

これぞ「標準」ならではの強み!

・・・とはいえいろいろ実装したい

DockKitのカスタムコントロール

⚠️ 本節の内容は2024年7月6日に書いた別記事 に詳しくまとめています。

カメラ視野のコントロール

  • フレーミングモードの指定
    • 自動フレーミングの左、中央、右の配置を選択
try await dock.setFramingMode(.right)
  • Region of interestの指定

WWDC23 "Integrate with motorized iPhone stands using DockKit" より

カスタム推論

  • トラッキング対象をデフォルトの顔・体から別のものに

  • Visionが便利:

    • Observationをそのまま渡せる

WWDC23 "Integrate with motorized iPhone stands using DockKit" より

  • Create ML/Core MLを利用した独自モデルでもOK

その他

  • カスタムモーター制御
    • 「どの方向にどれぐらい動かすか」をコードから制御できる
  • デバイスアニメーション
    • ビルトイン:Yes, No, Wakeup, Kapow
    • カスタム

WWDC23 "Integrate with motorized iPhone stands using DockKit" より

カスタムコントロールまとめ

  • カメラ視野のコントロール
  • カスタム推論
  • カスタムモーター制御
  • デバイスアニメーション

WWDC24でのアップデート

⚠️ 本節の内容は2024年6月16日に書いた別記事 に詳しくまとめています。

Tracking summaryの取得 🆕

トラッキング状態の情報をアプリ側からも取得できるようになった

  • 顕著性ランク
  • 発話確信度
  • カメラを見ている可能性のスコア

WWDC24 "What’s new in DockKit" より

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.の要因に基づいて追跡すべき被写体を決定

WWDC24 "What’s new in DockKit" より

その他の新機能

  • DockKitアクセサリーのボタンサポート
  • ジンバル型デバイス
  • 標準カメラアプリでのサポート拡大

もはや「TrackingKit」と呼んでも過言ではない 3

  • DockKit = ドック型の外付けハードウェアを制御するフレームワーク

  • DockKit = スタンド型やジンバル型の外付けハードウェア + AIやアルゴリズムのソフトウェアでスマホに最高のトラッキング性能を与えるフレームワーク

まとめ

  • DockKitは「なぜいまさら?」と思いきや、実はなかなか絶妙なミッシングリンクを埋める位置づけ
  • 他フレームワークとの相性も良く、用途も広い
  • コードを1行も書かなくても自動的に対応
  • カスタムコントロール手段もいろいろある
  • iOS 18でさらに高度なトラッキングが可能に

後日談

本記事の内容で発表を行ったのは2024年7月10日ですが、奇しくも(?)その翌日、7月11日に第2のDockKit対応製品であるジンバル型の "Insta360 flow pro" が発売されました。

こちらはWWDC24のセッションの要約記事にも書いたiOS 18でのDockKitの新機能「ボタンサポート」「カスタムビヘイビア」にも対応しており、第一弾のスタンドタイプのものよりも価格も安く、結構売れているようです。

また9月に行われたiOSDC Japan 2024ではDockKitに関するトークもありました。

fortee.jp

豊富なデモを交え、現状DockKitでできることを網羅して解説されています。興味を持たれた方はぜひご参照ください。

おわりに

Sansan / Eightのモバイルアプリ開発を進めていく仲間を募集中です!選考評価なしで現場のエンジニアのリアルな声が聞けるカジュアル面談もありますので、ご興味のある方はぜひ面談だけでもお越しいただけたら幸いです。

open.talentio.com


  1. 子供が突然やる仕草やおしゃべり、撮りたいと思ってカメラをかまえても大抵もう遅いので、全部撮っておきたい、と思ったのがこのアプリのコンセプト着想のきっかけです。
  2. 動画でのデモの位置はこちら
  3. Appleが言ってるわけではなくただの持論です

© Sansan, Inc.