WWDC26:Best practices for integrating visual intelligence in your app

Visual Intelligence による画像識別と、その結果のアプリへのハンドオフ実装について。

Best practices for integrating visual intelligence in your app


0:07 – Introduction

  • アジェンダ:コンテンツ定義・クエリ実装・クロスプラットフォーム対応・システムストア統合

2:02 – Defining your content

  • アプリコンテンツを AppEntity としてモデル化することで Visual Intelligence の検索結果に表示可能(AppEntity = アプリにおける名詞 e.g. アルバム)
  • AppEntity の設計ポイント
    • DisplayRepresentation:タイトル・サブタイトル・サムネイルを定義
    • 識別テキスト(displayRepresentation)は簡潔かつ過不足なく
    • 画像はサムネイルサイズで提供することで読み込みが早くなる

5:03 – Implementing a query

  • EntityQuery の実装:識別子から AppEntity を復元するロジック
  • IntentValueQuerySemanticContentDescriptor のピクセルバッファから結果を返す
    • input: SemanticContentDescriptor から input.pixelBuffer を取得
  • 画像の類似度検索:Vision フレームワークの GenerateImageFeaturePrintRequest でオンデバイスで実現
    • 事前に計算済みの特徴プリントと距離閾値を使って高速に絞り込み
    • queryPrint.distance(to: entry.featurePrint) で距離を算出し maxDistance 以下のものを返す
  • パフォーマンス考慮
    • 特徴プリントは事前計算してキャッシュ(カタログ構築時に 1 度だけ実行)
    • 検索時は距離計算のみで素早く応答

8:18 – Opening results

  • 選択されたコンテンツに直接遷移する OpenIntent の実装
    • OpenIntent プロトコルに準拠し target パラメータに AppEntity を指定
    • perform() は軽量に保つ(アプリがフォアグラウンドになる際に実行されるため)
    • Visual Intelligence 専用の OpenIntent は作らず既存のものを再利用する

10:03 – Mac and iPad adoption

  • 同じ AppEntity・クエリ・OpenIntent を iPadOS と macOS でそのまま流用可能
  • プラットフォーム差異への対応
    • iOS:カメラ入力
    • Mac:スクリーンショット入力、ピクセルバッファが大幅に大きくなる
      • 処理前にリサイズを検討すること

12:27 – Returning multiple result types

  • @UnionValue 型で単一クエリから複数エンティティ型を返す
    • アプリは IntentValueQuery をひとつしか持てないため、代わりに各エンティティを並べてで定義できる @UnionValue enum を使用
    • アルバムエンティティとコンサートエンティティの両方を同時に返す例
    • ピクセルマッチだけでなく関連コンテンツも派生させると有益(e.g. アルバムアートワークで特定した同アーティストから近くのコンサートを検索)

12:56 – Continuing search in your app

  • すぐに検索結果が見つからない場合 semanticContentSearch スキーマでアプリ内の完全検索へ誘導(「もっと見る」)
    • @AppIntent(schema: .visualIntelligence.semanticContentSearch) を付与
    • perform() 実装でアプリの検索ビューに移動
  • 入力されたコンテキストに基づき、事前に検索が絞り込まれた状態でアプリの検索ビューが開く
  • フィルター・カテゴリ・より深いコンテンツへのランディングを提供できる

14:27 – System store integrations

  • Visual Intelligence がシステムストアにデータを書き込み、アプリはそれを読み取る
    • カレンダー:EventKitEKEventStore)でイベントを読み取り
      • NotificationCenter.EKEventStoreChanged)でストア変更を観察して自動更新
    • 連絡先:CNContactStore
    • 医療デバイス計測値:HealthKitHKHealthStore
  • 実装パターン(カレンダーの例)
    • 1. eventStore.requestFullAccessToEvents() でアクセス許可を要求
    • 2. predicateForEvents(withStart:end:calendars:) で検索範囲を指定
    • 3. イベントタイトルとカタログのアーティスト名を照合して関連イベントを抽出
    • 4. EKEventStoreChanged の通知を受けて再フェッチ

17:16 – Next steps

  • 2 つの統合ポイントのまとめ
    • Image Search:IntentValueQuery + AppEntity + OpenIntent
    • System stores:Event Kit・Contacts・Health Kit の変更通知を観察
  • iOS・iPadOS・macOS 共通のコードで対応可能

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です