关于 event-detection-temporal-intelligence-expert
面向照片集合分析的事件检测技能,帮助整理者依据时间、地理位置和视觉内容发现有意义的活动。它还涵盖事件重要性评分、可分享性预测及拼贴选图的时间多样性。
主要功能
- 01时空聚类检测照片事件
- 02结合 CLIP 视觉内容聚类
- 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)
- 评估活动的重要性(生日 > 通勤)
- 预测照片在社交媒体上的分享潜力
- 识别人生事件(毕业、婚礼、出生、搬家)
- 优化时间多样性(避免所有照片都来自同一天)
- 面向活动的拼贴画照片筛选
❌ 不适用于:
- 单张照片的美学质量 →
photo-composition-critic - 色彩搭配分析 →
color-theory-palette-harmony-expert - 人脸聚类/识别 →
photo-content-recognition-curation-expert - CLIP 嵌入生成 →
clip-aware-embeddings - 提取单张照片的时间戳(基础 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:加入视觉内容
问题:同一时间、地点拍摄的照片可能是不同主题(仪式与空椅子)。
解决方案:将 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 | 每小时照片越多 = 越值得纪念 |
| content_rarity | 0.15 | 通过 CLIP 检测地标、庆祝活动 |
| visual_diversity | 0.10 | 拍摄内容多样 = 特别活动 |
| duration | 0.10 | 活动持续时间越长,得分越高 |
| engagement | 0.10 | 已分享/编辑/收藏的照片 |
| temporal_rarity | 0.05 | 年度规律(生日、节假日) |
→ 深入了解:references/event-scoring-shareability.md
分享潜力预测
目标:预测哪些照片会在社交媒体上分享。
高信号特征(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。
反模式:固定的 Epsilon 值
表现形式:所有事件都使用相同的 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:一种用于空间—时间数据聚类的算法》
- DeepDBSCAN:ISPRS 2021,《用于带地理标签照片的深度密度聚类》
- 分享价值:arXiv 2025,《根据情感和时间特征预测社交媒体互动》
- GeoNames/OpenStreetMap:用于地点识别的反向地理编码
版本:2.0.0 最后更新:2025 年 11 月