关于 photo-content-recognition-curation-expert
面向照片库整理与分析的技能,涵盖人物和宠物聚类、近似重复检测、连拍筛选及截图识别。还提供大型照片库索引和美学评分的处理思路。
主要功能
- 01人脸识别与人物聚类
- 02宠物检测与聚类
- 03感知哈希去重
- 04连拍照片优选
- 05截图与照片分类
- 06照片库索引与美学评分
适用场景
- 01按人物整理照片
- 02筛选连拍中的最佳照片
- 03过滤截图和下载图片
- 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.jsonreferences/face-clustering.mdperceptual-hashing.mdcontent-detection.mdphoto-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: 使用快速 pHash 筛选(排除明显不重复的图片)
- 阶段 2: 使用 DINOHash 精细筛选(准确检测)
- 阶段 3: 可选的 Siamese ViT 验证
汉明距离阈值:
- 保守:差异 ≤5 位 = 重复项
- 激进:差异 ≤10 位 = 重复项
→ 深入了解:references/perceptual-hashing.md
2. 人脸识别与聚类
目标: 无需用户标记,按人物对照片分组。
Apple Photos 策略(2021-2025):
- 提取人脸与上半身嵌入(FaceNet,512 维)
- 两轮凝聚式聚类
- 第一轮采用保守策略(threshold=0.4,精确率高)
- 第二轮使用 HAC(threshold=0.6,提高召回率)
- 对新照片进行增量更新
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) |
| 无相机 EXIF | 0.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
参考资料
- DINOHash(2025):“用于感知哈希的对抗性微调 DINOv2 特征”
- Apple Photos(2021):“通过私有端侧机器学习识别照片中的人物”
- HDBSCAN:“基于层次密度的空间聚类”(2013-2025)
- 感知哈希:dHash(Neal Krawetz)、基于 DCT 的 pHash
版本:2.0.0 最后更新:2025 年 11 月