photo-content-recognition-curation-expert
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 コンテンツの検出
- 大規模な写真ライブラリ(1万枚以上)の高速インデックス作成
- 美的品質のスコアリング(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次元)
- 2段階の凝集型クラスタリング
- 第1パスは保守的に設定(しきい値=0.4、高い適合率)
- 第2パスは HAC を使用(しきい値=0.6、再現率を向上)
- 新しい写真を対象に差分更新
HDBSCAN の代替案:
- しきい値の調整が不要
- ノイズに強い
- データ分布が不明な場合に適しています
パラメーター:
| 設定 | 凝集型 | HDBSCAN |
|---|---|---|
| 第1パスのしきい値 | 0.4(コサイン) | - |
| 第2パスのしきい値 | 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 | メーカー、モデル、レンズの情報がない |
| デバイスのアスペクト比 | 0.60 | スマートフォン画面の比率と完全一致 |
| 完全なシャープネス | 0.50 | ラプラシアン分散が2000を超える |
判定: 信頼度が 0.6 を超える場合はスクリーンショットと判定します。
→ 詳細:references/content-detection.md
5. クイックインデックス作成パイプライン
目標: キャッシュを使用して、1万枚以上の写真を効率的にインデックス化します。
抽出する特徴:
- 知覚ハッシュ(重複排除)
- 顔の埋め込み(人物のクラスタリング)
- CLIP の埋め込み(セマンティック検索)
- カラーパレット
- 美的スコア
パフォーマンス(写真1万枚、M1 MacBook Pro):
| 操作 | 時間 |
|---|---|
| 知覚ハッシュの計算 | 2分 |
| CLIP の埋め込み | 3分(GPU) |
| 顔検出 | 4分 |
| カラーパレットの抽出 | 1分 |
| 美的スコアの算出 | 2分(GPU) |
| クラスタリング+重複排除 | 1分 |
| 合計(初回実行) | 約13分 |
| 差分処理 | 1分未満 |
→ 詳しく見る: references/photo-indexing.md
よくあるアンチパターン
アンチパターン:顔の埋め込みにユークリッド距離を使う
例:
distance = np.linalg.norm(embedding1 - embedding2) # WRONG
問題点: 顔の埋め込みは正規化されているため、適切な指標はコサイン類似度です。
代わりに行うこと:
from scipy.spatial.distance import cosine
distance = cosine(embedding1, embedding2) # Correct
アンチパターン:固定のクラスタリングしきい値
例: すべての顔クラスタに同じ距離しきい値を使います。
問題点: 人によってクラス内のばらつきは異なります(一卵性双生児と年齢差の大きい人など)。
代わりに行うこと: HDBSCAN でしきい値を自動検出するか、保守的なパスと緩和したパスによる2段階のクラスタリングを使用します。
アンチパターン:重複検出に生のピクセル比較を使う
例:
is_duplicate = np.allclose(img1, img2) # WRONG
問題点: JPEG の再保存、トリミング、明るさの変更によってピクセルに差異が生じます。
代わりに行うこと: ハミング距離を使用した知覚ハッシュ(pHash または DINOHash)を使います。
アンチパターン:顔検出を逐次実行する
例: バッチ処理を行わず、写真を1枚ずつ処理します。
問題点: GPU の利用効率が低く、バッチ処理と比べて10倍遅くなります。
代わりに行うこと: GPU アクセラレーションを使い、画像をバッチ処理します(batch_size=32)。
アンチパターン:信頼度によるフィルタリングを行わない
例:
for face in all_detected_faces:
cluster(face) # No filtering
問題点: 信頼度の低い検出結果によって、ノイズクラスタ(手や物体)が作られます。
代わりに行うこと: 信頼度でフィルタリングします(顔の場合はしきい値0.9)。
アンチパターン:すべての写真をクラスタに割り当てる
例: ノイズ点を最も近いクラスタに割り当てます。
問題点: 1回だけ写っている写真が人物クラスタに混入します。
代わりに行うこと: 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:セマンティック検索と DeepDBSCAN のために CLIP の埋め込みを提供します
参考資料
- DINOHash (2025):「知覚ハッシュのための敵対的ファインチューニング済み DINOv2 特徴」
- Apple Photos (2021):「プライベートなオンデバイス ML による写真内の人物認識」
- HDBSCAN:「階層的密度ベース空間クラスタリング」(2013~2025)
- 知覚ハッシュ:dHash(Neal Krawetz)、DCT ベースの pHash
バージョン:2.0.0 最終更新日:2025年11月