| license | Apache-2.0 |
| name | photo-content-recognition-curation-expert |
| description | Expert in photo content recognition, intelligent curation, and quality filtering. Specializes in face/animal/place recognition, perceptual hashing for de-duplication, screenshot/meme detection, burst photo selection, and quick indexing strategies. Activate on 'face recognition', 'face clustering', 'perceptual hash', 'near-duplicate', 'burst photo', 'screenshot detection', 'photo curation', 'photo indexing', 'NSFW detection', 'pet recognition', 'DINOHash', 'HDBSCAN faces'. NOT for GPS-based location clustering (use event-detection-temporal-intelligence-expert), color palette extraction (use color-theory-palette-harmony-expert), semantic image-text matching (use clip-aware-embeddings), or video analysis/frame extraction. |
| allowed-tools | Read,Write,Edit,Bash,Grep,Glob,mcp__firecrawl__firecrawl_search,WebFetch |
| category | AI & Machine Learning |
| tags | ["content-recognition","photo","curation","computer-vision","tagging"] |
| pairs-with | [{"skill":"event-detection-temporal-intelligence-expert","reason":"Temporal context for photos"},{"skill":"wedding-immortalist","reason":"Curate wedding photo collections"}] |
Photo Content Recognition & Curation Expert
Expert in photo content analysis and intelligent curation. Combines classical computer vision with modern deep learning for comprehensive photo analysis.
Decision Points
PHOTO LIBRARY SIZE?
├─ <1K photos → Single-pass processing
│ ├─ dHash for duplicates (fastest)
│ └─ Agglomerative clustering (known thresholds)
├─ 1K-10K photos → Optimized pipeline
│ ├─ pHash → DINOHash hybrid
│ └─ HDBSCAN if variance in cluster sizes >3x
└─ >10K photos → Batch processing
├─ GPU batching (batch_size=32)
└─ Incremental updates only
CLUSTERING ALGORITHM CHOICE?
├─ Face variance known? → Agglomerative (threshold=0.4, 0.6)
├─ Unknown distribution? → HDBSCAN (auto-threshold)
└─ Real-time additions? → Incremental clustering
DUPLICATE DETECTION ROBUSTNESS?
├─ Exact duplicates only? → dHash (Hamming ≤3)
├─ Brightness/contrast edits? → pHash (Hamming ≤5)
├─ Heavy crops/compression? → DINOHash (Hamming ≤10)
└─ Production system? → Hybrid (pHash→DINOHash)
BURST PHOTO SELECTION?
├─ Face quality available? → Weight faces 35%, sharpness 30%
├─ No faces detected? → Weight sharpness 50%, aesthetics 30%
└─ Action photos? → Weight sharpness 60%, exposure 25%
CONTENT FILTERING CONFIDENCE?
├─ Screenshot confidence >0.6? → Filter out
├─ NSFW confidence >0.8? → Filter out
├─ Face confidence <0.9? → Exclude from clustering
└─ Pet confidence <0.7? → Manual review
Failure Modes
1. Too Many Face Clusters (Symptom: 100+ clusters for 1000 photos)
Root Cause: Clustering threshold too strict, splitting same person into multiple clusters
Detection Rule: If clusters/unique_people ratio > 2.0, threshold too conservative
Fix:
- Increase distance threshold from 0.4 to 0.6
- Run second-pass merging with relaxed threshold
- Verify with manual spot-check of 5 random cluster pairs
2. False Duplicate Detection (Symptom: Different people flagged as duplicates)
Root Cause: Perceptual hash threshold too loose, faces in similar poses triggering matches
Detection Rule: If duplicate groups contain faces with cosine distance >0.7, hash threshold too aggressive
Fix:
- Tighten Hamming threshold from 10 to 5 bits
- Add face verification step: extract face embeddings from "duplicates"
- If face similarity <0.5, not duplicates
3. Burst Selection Missing Best Frame (Symptom: Blurry photos selected over sharp ones)
Root Cause: Face quality override masking sharpness issues when faces poorly detected
Detection Rule: If selected burst frame Laplacian variance <500 while other frames >1000
Fix: