event-detection-temporal-intelligence-expert
event-detection-temporal-intelligence-expert について
写真コレクションを時間、位置、画像内容から整理するイベント検出スキルです。イベントの重要度や共有されやすさの推定、コラージュ選定時の時間的な多様性も扱います。
主な機能
- 01時空間クラスタリングによるイベント検出
- 02CLIP画像内容を加えたクラスタリング
- 03イベント重要度のスコアリング
- 04写真の共有されやすさの予測
- 05時間的多様性を考慮した写真選定
活用シーン
- 01撮影日時とGPSからイベントを特定
- 02旅行中の異なる日や場所を区別
- 03複数イベントを含むコラージュ写真の選定
- 04結婚式や卒業などのライフイベント検出
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ curiositech/ some_claude_skills --skill event-detection-temporal-intelligence-expertインストール後、Claude Code で/event-detection-temporal-intelligence-expertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
CHANGELOG.md.claude-plugin/plugin.jsonreferences/event-scoring-shareability.mdplace-recognition-life-events.mdst-dbscan-implementation.mdtemporal-diversity-pipeline.md詳細
イベント検出と時間的インテリジェンスのエキスパート
時空間クラスタリング、重要度スコアリング、コラージュ用の写真のインテリジェントな選択を活用し、写真コレクションから意味のあるイベントを検出するエキスパートです。
このスキルを使う場面
✅ 次の場合に使用します:
- 写真のタイムスタンプと GPS 座標からイベントを検出する
- 時間、場所、視覚コンテンツで写真をクラスタリングする(ST-DBSCAN、DeepDBSCAN)
- イベントの重要度をスコアリングする(誕生日 > 通勤)
- SNS での写真の共有されやすさを予測する
- 人生のイベント(卒業、結婚式、出産、引っ越し)を認識する
- 時間的多様性を最適化する(1 日の写真ばかりにならないようにする)
- イベントを考慮してコラージュ用の写真を選択する
❌ 次の場合には使用しません:
- 個々の写真の美的品質 →
photo-composition-critic - カラーパレット分析 →
color-theory-palette-harmony-expert - 顔のクラスタリング/認識 →
photo-content-recognition-curation-expert - CLIP 埋め込みの生成 →
clip-aware-embeddings - 1 枚の写真のタイムスタンプ抽出(基本的な EXIF 解析)
クイック判定ツリー
Need to group photos into meaningful events?
├─ Have GPS + timestamps? ──────────────────── ST-DBSCAN
│ ├─ Also need visual similarity? ────────── DeepDBSCAN (add CLIP)
│ └─ Need hierarchical events? ───────────── Multi-level cascading
│
├─ No GPS, only timestamps? ────────────────── Temporal binning
│ └─ With visual content? ─────────────────── CLIP + temporal
│
└─ Photos have faces + want groups? ─────────── Face clustering first
└─ Then event detection per person
コアコンセプト
1. ST-DBSCAN:時空間クラスタリング
問題:標準的なクラスタリングは写真には適していません。同じ場所でも、別の日の写真を同じグループにまとめるべきではありません。
重要なポイント:同じ時間帯に100メートル離れている写真は同じイベントです。3日後に100メートル離れている写真は別のイベントです。
ST-DBSCAN のパラメーター:
ε_spatial: 50m (indoor) → 500m (outdoor festival) → 5km (city tour)
ε_temporal: 1hr (short event) → 8hr (day trip) → 24hr (multi-day)
min_pts: 3 (small gathering) → 10 (large event)
アルゴリズム:空間と時間の両方の制約を満たす必要があります。
Neighbor(p) = {q | distance(p,q) ≤ ε_spatial AND |time(p)-time(q)| ≤ ε_temporal}
→ 詳細:references/st-dbscan-implementation.md
2. DeepDBSCAN:視覚コンテンツの追加
問題:同じ時間、同じ場所で撮影された写真でも、被写体が異なる場合があります(式典と無人の椅子など)。
解決策:3 つ目の次元として CLIP 埋め込みを追加します。
Neighbor(p) = {q | spatial_ok AND temporal_ok AND cosine_sim(clip_p, clip_q) > threshold}
eps_visual:0.3(似た被写体)→ 0.5(イベントコンテンツの多様性)
3. 階層的なイベント検出
ユースケース:「パリ旅行」の中に「1 日目:ルーブル美術館」「2 日目:エッフェル塔」が含まれます。
方法:しきい値を広げながら ST-DBSCAN を段階的に実行します。
- 上位レベル(旅行):eps_spatial=50km、eps_temporal=72hr
- 中位レベル(日単位):eps_spatial=5km、eps_temporal=12hr
- 下位レベル(瞬間):eps_spatial=500m、eps_temporal=1hr
イベントの重要度スコアリング
目標:誕生日パーティー > 日常の通勤写真
複数要素モデル(重みの合計は 1.0):
| 要素 | 重み | 説明 |
|---|---|---|
| location_rarity | 0.20 | 珍しい場所 > 自宅 |
| people_presence | 0.15 | 人物が写っている写真は高スコア |
| photo_density | 0.15 | 1 時間あたりの写真が多いほど、記憶に残るイベント |
| content_rarity | 0.15 | CLIP で検出されたランドマークや祝賀イベント |
| visual_diversity | 0.10 | 多様なショット = 特別なイベント |
| duration | 0.10 | イベントが長いほど高スコア |
| engagement | 0.10 | 共有、編集、お気に入り登録された写真 |
| temporal_rarity | 0.05 | 年間のパターン(誕生日、祝日) |
→ 詳細:references/event-scoring-shareability.md
共有されやすさの予測
目標:SNS で共有される写真を予測します。
有力な特徴量(2025 年の研究):
- 笑顔の顔(基本スコア +0.3)
- 集合写真(3 人以上、+0.2)
- 有名なランドマーク(+0.25)
- 料理のシーン(+0.15)
- 中程度の視覚的複雑さ(0.4~0.6 が最適)
- 新しさ(30 日間で減衰)
共有されやすさのしきい値:>0.6 =「非常に共有されやすい」
→ 詳細:references/event-scoring-shareability.md
人生のイベントの検出
複数のモーダルのシグナルを使用して、人生の大きなイベントを自動的に検出します。
| イベントの種類 | 主なシグナル | しきい値 |
|---|---|---|
| 卒業 | 卒業帽/ガウン、卒業証書、講堂 | 0.6 |
| 結婚式 | 正装、ブーケ、ケーキ、指輪 | 0.7 |
| 出産 | 新たな乳児の顔のクラスタ、病院の環境 | 0.8 |
| 転居 | 50km 以上の位置の変化、>30 日 | 0.8 |
| 旅行の節目 | 新しい国への初訪問 | 1.0 |
→ 詳細:references/place-recognition-life-events.md
選定における時間的な多様性
問題:制約がないと、コラージュが休暇中の写真ばかりになることがあります。
手法の比較
| 手法 | 最適な用途 | 使用する場面 |
|---|---|---|
| 時間ビン分割 | 時間範囲を均等にカバー | 時系列に幅を持たせたい場合 |
| 時間的 MMR | 品質と多様性のバランス | バランスの取れた選定 |
| イベントベース | イベントの表現 | 各イベントが重要な場合 |
時間的 MMR の数式
MMR(photo) = λ × quality + (1-λ) × min_temporal_distance_to_selected
- λ=0.5:バランス重視
- λ=0.7:品質を優先
- λ=0.3:多様性を優先
→ 詳しく見る:references/temporal-diversity-pipeline.md
よくあるアンチパターン
アンチパターン:時間だけによるクラスタリング
どのようなものか:タイムスタンプだけを使って K-means や基本的な DBSCAN を使用する
clusters = KMeans(n_clusters=10).fit(timestamps) # WRONG
なぜ問題なのか:同じ場所での複数日にわたる旅行が分割され、同じ日の異なる場所でのイベントが統合されます。
代わりにすべきこと:空間と時間の両方の制約を使って ST-DBSCAN を使用します。
アンチパターン:固定のイプシロン値
どのようなものか:すべてのイベントに同じ eps_spatial=100m を使用する
なぜ問題なのか:屋内イベントでは 50m、市内観光では 5km が必要です。
代わりにすべきこと:イベント種別の検出に基づく適応的な閾値、または複数のスケールを使った階層クラスタリングを使用します。
アンチパターン:視覚的な内容を無視する
どのようなものか:イベント検出に ST-DBSCAN だけを使用する
なぜ問題なのか:結婚式の式と、誰もいない椅子の設営風景は、同じ時間・場所で撮影されていても重要度がまったく異なります。
代わりにすべきこと:CLIP 埋め込みを使う DeepDBSCAN で、内容を考慮したクラスタリングを行います。
アンチパターン:GPS にユークリッド距離を使用する
どのようなものか:
distance = sqrt((lat2-lat1)**2 + (lon2-lon1)**2) # WRONG
なぜ問題なのか:度はメートルではありません。緯度 1° は 111km ですが、経度 1° の距離は緯度によって異なります。
代わりにすべきこと:大円距離の計算にはハバーサイン公式を使用します:
from geopy.distance import geodesic
distance_meters = geodesic((lat1, lon1), (lat2, lon2)).meters
アンチパターン:ノイズを処理しない
どのようなものか:すべての写真を無理にいずれかのクラスタに割り当てる
なぜ問題なのか:通勤中に一人で撮った写真がイベントのクラスタに混ざります。
代わりにすべきこと:DBSCAN ではノイズが自動的に特定されます(label=-1)。ノイズは別に保ち、最も近いクラスタに無理に割り当てないでください。
アンチパターン:イベントの文脈を考慮せずに共有可能性を判断する
どのようなものか:写真の特徴だけから共有可能性を予測する
なぜ問題なのか:結婚式で撮った平凡な写真のほうが、火曜日の昼食時に撮った素晴らしい写真より共有されやすいことがあります。
代わりにすべきこと:イベントの重要度を特徴として含めます:
features['event_significance'] = photo.event.significance_score
クイックスタート:イベント検出パイプライン
from event_detection import EventDetectionPipeline
pipeline = EventDetectionPipeline()
# Process photo corpus
results = pipeline.process_photo_corpus(photos)
# Access events
for event in results['events']:
print(f"{event.label}: {len(event.photos)} photos, significance={event.significance_score:.2f}")
# Access life events
for life_event in results['life_events']:
print(f"{life_event.type} detected on {life_event.timestamp}")
# Select for collage with diversity
collage_photos = pipeline.select_for_collage(results, target_count=100)
パフォーマンス目標
| 処理 | 目標 |
|---|---|
| ST-DBSCAN(写真 10K 枚) | < 2 秒 |
| イベント重要度のスコアリング | < 100ms/イベント |
| 共有可能性の予測 | < 50ms/写真 |
| 場所認識(キャッシュ済み) | < 10ms/写真 |
| パイプライン全体(写真 10K 枚) | < 5 秒 |
Python の依存関係
numpy scipy scikit-learn hdbscan geopy transformers xgboost pandas opencv-python
統合ポイント
- collage-layout-expert:多様性を考慮した配置に使えるイベントクラスタを渡します
- photo-content-recognition-curation-expert:イベント検出の前に顔クラスタを取得します
- color-theory-palette-harmony-expert:イベント内の視覚的な多様性に使用します
- clip-aware-embeddings:DeepDBSCAN 用の埋め込みを生成します
参考資料
- ST-DBSCAN:Birant & Kut(2007)、「ST-DBSCAN: An algorithm for clustering spatial-temporal data」
- DeepDBSCAN:ISPRS 2021、「Deep Density-Based Clustering for Geo-Tagged Photos」
- 共有可能性:arXiv 2025、「Predicting Social Media Engagement from Emotional and Temporal Features」
- GeoNames/OpenStreetMap:場所認識のための逆ジオコーディング
バージョン:2.0.0 最終更新日:2025年11月