mcpField
P
photo-content-recognition-curation-expert

photo-content-recognition-curation-expert

github.com/curiositech创意与媒体257332 次安装2 天前更新
代码仓库

关于 photo-content-recognition-curation-expert

面向照片库整理与分析的技能,涵盖人物和宠物聚类、近似重复检测、连拍筛选及截图识别。还提供大型照片库索引和美学评分的处理思路。

主要功能

  1. 01人脸识别与人物聚类
  2. 02宠物检测与聚类
  3. 03感知哈希去重
  4. 04连拍照片优选
  5. 05截图与照片分类
  6. 06照片库索引与美学评分

适用场景

  1. 01按人物整理照片
  2. 02筛选连拍中的最佳照片
  3. 03过滤截图和下载图片
  4. 04为大型照片库建立索引

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/curiositech/some_claude_skills --skill photo-content-recognition-curation-expert

安装后在 Claude Code 中输入/photo-content-recognition-curation-expert确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

CHANGELOG.md
.claude-plugin/
plugin.json
references/
face-clustering.md
perceptual-hashing.md
content-detection.md
photo-indexing.md

详细介绍

照片内容识别与整理专家

照片内容分析与智能整理专家。结合经典计算机视觉与现代深度学习,全面分析照片。

适用场景

✅ 适用于:

  • 人脸识别与聚类(识别重要人物)
  • 动物/宠物检测与聚类
  • 使用感知哈希检测近似重复项(DINOHash、pHash、dHash)
  • 连拍照片筛选(从 10-50 张照片中找出最佳画面)
  • 截图与照片分类
  • 表情包/下载图片筛选
  • NSFW 内容检测
  • 大型照片库快速索引(10K+)
  • 美学质量评分(NIMA)

❌ 不适用于:

  • 基于 GPS 的地点聚类 → event-detection-temporal-intelligence-expert
  • 色彩调色板提取 → color-theory-palette-harmony-expert
  • 语义图文匹配 → clip-aware-embeddings
  • 视频分析或帧提取

快速决策树

What do you need to recognize/filter?
│
├─ Duplicate photos? ─────────────────────────────── Perceptual Hashing
│   ├─ Exact duplicates? ──────────────────────────── dHash (fastest)
│   ├─ Brightness/contrast changes? ───────────────── pHash (DCT-based)
│   ├─ Heavy crops/compression? ───────────────────── DINOHash (2025 SOTA)
│   └─ Production system? ─────────────────────────── Hybrid (pHash → DINOHash)
│
├─ People in photos? ─────────────────────────────── Face Clustering
│   ├─ Known thresholds? ──────────────────────────── Apple-style Agglomerative
│   └─ Unknown data distribution? ─────────────────── HDBSCAN
│
├─ Pets/Animals? ─────────────────────────────────── Pet Recognition
│   ├─ Detection? ─────────────────────────────────── YOLOv8
│   └─ Individual clustering? ─────────────────────── CLIP + HDBSCAN
│
├─ Best from burst? ──────────────────────────────── Burst Selection
│   └─ Score: sharpness + face quality + aesthetics
│
└─ Filter junk? ──────────────────────────────────── Content Detection
    ├─ Screenshots? ───────────────────────────────── Multi-signal classifier
    └─ NSFW? ──────────────────────────────────────── Safety classifier

核心概念

1. 用于近似重复检测的感知哈希

问题: 相机连拍、重新保存的图片和轻微编辑都会产生近似重复项。

解决方案: 感知哈希会为视觉相似的图片生成相似的值。

方法比较:

方法速度鲁棒性最适用于
dHash最快低精确重复项
pHash快中亮度/对比度变化
DINOHash较慢高大幅裁剪、压缩
混合方案中非常高生产系统

混合流程(2025 年最佳实践):

  1. 阶段 1: 使用快速 pHash 筛选(排除明显不重复的图片)
  2. 阶段 2: 使用 DINOHash 精细筛选(准确检测)
  3. 阶段 3: 可选的 Siamese ViT 验证

汉明距离阈值:

  • 保守:差异 ≤5 位 = 重复项
  • 激进:差异 ≤10 位 = 重复项

→ 深入了解:references/perceptual-hashing.md


2. 人脸识别与聚类

目标: 无需用户标记,按人物对照片分组。

Apple Photos 策略(2021-2025):

  1. 提取人脸与上半身嵌入(FaceNet,512 维)
  2. 两轮凝聚式聚类
  3. 第一轮采用保守策略(threshold=0.4,精确率高)
  4. 第二轮使用 HAC(threshold=0.6,提高召回率)
  5. 对新照片进行增量更新

HDBSCAN 替代方案:

  • 无需调整阈值
  • 对噪声具有鲁棒性
  • 更适用于未知数据分布

参数:

设置凝聚式HDBSCAN
第一轮阈值0.4(余弦)-
第二轮阈值0.6(余弦)-
最小聚类大小-3 张照片
度量方式余弦余弦

→ 深入了解:references/face-clustering.md


3. 连拍照片筛选

问题: 连拍模式会生成 10-50 张几乎相同的照片。

多标准评分:

标准权重测量方式
清晰度30%拉普拉斯方差
人脸质量35%眼睛睁开、微笑、人脸清晰度
美学20%NIMA 分数
位置10%中间帧加分
曝光5%检查直方图剪切

连拍检测: 检测 0.5 秒内拍摄的照片。

→ 深入了解:references/content-detection.md


4. 截图检测

多信号检测方法:

信号置信度说明
UI 元素0.85检测到状态栏、按钮
完美矩形0.75>5 个 UI 按钮(90° 角)
高文本占比0.70文本覆盖率 >25%(OCR)
无相机 EXIF0.60缺少 Make/Model/Lens
设备宽高比0.60精确匹配手机屏幕比例
完美清晰度0.50>2000 拉普拉斯方差

判定: 置信度 >0.6 = 截图

→ 深入了解:references/content-detection.md


5. 快速索引流水线

目标: 利用缓存高效索引 10K+ 张照片。

提取的特征:

  • 感知哈希(去重)
  • 人脸嵌入(人物聚类)
  • CLIP 嵌入(语义搜索)
  • 色彩方案
  • 美学评分

性能(10K 张照片,M1 MacBook Pro):

操作时间
感知哈希2 min
CLIP 嵌入3 min(GPU)
人脸检测4 min
色彩方案1 min
美学评分2 min(GPU)
聚类 + 去重1 min
总计(首次运行)~13 min
增量运行<1 min

→ 深入了解:references/photo-indexing.md


常见反模式

反模式:对人脸嵌入使用欧几里得距离

表现形式:

distance = np.linalg.norm(embedding1 - embedding2)  # WRONG

为什么不对: 人脸嵌入经过归一化;余弦相似度才是正确的度量方式。

建议做法:

from scipy.spatial.distance import cosine
distance = cosine(embedding1, embedding2)  # Correct
反模式:使用固定聚类阈值

表现形式: 对所有人脸簇使用相同的距离阈值。

为什么不对: 不同人物的类内方差各不相同(例如双胞胎与年龄差异较大的人)。

建议做法: 使用 HDBSCAN 自动发现阈值,或采用两轮聚类,分别进行保守和宽松聚类。

反模式:通过原始像素比较重复照片

表现形式:

is_duplicate = np.allclose(img1, img2)  # WRONG

为什么不对: 重新保存 JPEG、裁剪和亮度变化都会造成像素差异。

建议做法: 使用感知哈希(pHash 或 DINOHash)和汉明距离。

反模式:顺序执行人脸检测

表现形式: 不进行批处理,一次处理一张照片中的人脸。

为什么不对: GPU 利用率不足,速度比批处理慢 10 倍。

建议做法: 使用 GPU 加速批量处理图像(batch_size=32)。

反模式:不筛选置信度

表现形式:

for face in all_detected_faces:
    cluster(face)  # No filtering

为什么不对: 低置信度检测结果会产生噪声簇(手部、物体)。

建议做法: 按置信度筛选(人脸阈值设为 0.9)。

反模式:强制将每张照片分配到某个簇

表现形式: 将噪声点分配给最近的簇。

为什么不对: 单独出现的人物不应污染人物簇。

建议做法: HDBSCAN/DBSCAN 会自然识别噪声(label=-1)。将噪声单独保留。


快速开始

from photo_curation import PhotoCurationPipeline

pipeline = PhotoCurationPipeline()

# Index photo library
index = pipeline.index_library('/path/to/photos')

# De-duplicate
duplicates = index.find_duplicates()
print(f"Found {len(duplicates)} duplicate groups")

# Cluster faces
face_clusters = index.cluster_faces()
print(f"Found {len(face_clusters)} people")

# Select best from bursts
best_photos = pipeline.select_best_from_bursts(index)

# Filter screenshots
real_photos = pipeline.filter_screenshots(index)

# Curate for collage
collage_photos = pipeline.curate_for_collage(index, target_count=100)

Python 依赖项

torch transformers facenet-pytorch ultralytics hdbscan opencv-python scipy numpy scikit-learn pillow pytesseract

集成点

  • event-detection-temporal-intelligence-expert:提供时间事件聚类,用于感知事件的精选
  • color-theory-palette-harmony-expert:提取色彩方案,以实现视觉多样性
  • collage-layout-expert:接收精选照片,用于拼贴制作
  • clip-aware-embeddings:提供 CLIP 嵌入,用于语义搜索和 DeepDBSCAN

参考资料

  1. DINOHash(2025):“用于感知哈希的对抗性微调 DINOv2 特征”
  2. Apple Photos(2021):“通过私有端侧机器学习识别照片中的人物”
  3. HDBSCAN:“基于层次密度的空间聚类”(2013-2025)
  4. 感知哈希:dHash(Neal Krawetz)、基于 DCT 的 pHash

版本:2.0.0 最后更新:2025 年 11 月

评论

支持 Markdown