Upgrade to Pro — share decks privately, control downloads, hide ads and more …

28万枚の写真に タグづけした話

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

28万枚の写真に タグづけした話

Avatar for T. Fujiba

T. Fujiba

June 27, 2026

More Decks by T. Fujiba

Other Decks in Programming

Transcript

  1. 自己紹介:撮るほうが本業です ふじば(T.Fujiba) 航空写真作家 「情景的飛行機写真」— 飛行機そのものより、飛行機のいる風景を撮る ホームは鳥取空港(TTJ) 撮影のほとんどがここ。ただし遠征の例外がたまに混ざる プログラマ Lightroom カタログは10年もの。気づけば

    28万枚 TTJ HND NRT + 27空港 写真展: 空港散歩 V 朱から蒼 〜Airport Stroll V TOTTORI SUNSET & STARLIGHT〜 ▪東京 富士フォトギャラリー銀座 スペース2 2026/10/23(金)〜29(木) 10:30〜19:00(土日: 11:00〜17:00)、最終日は14:00まで ▪大阪 イロリムラ プチホール 2026/11/4(水)〜9(月) 12:00〜19:00(初日: 13:00〜、最終日15:00まで) 2 https://www.fujiba.net/ twitter/insta/github:@fujiba
  2. 撮影地タグ、もう何年もつけてない 01 最初はまめだった 撮影地(空港名)を毎回手入力。えらい 。ただし最初の数年だけ。 → その後ズボラが勝利 02 「基本は鳥取」の罠 9割は鳥取空港。でも遠征・出張の例外が

    混ざるので「全部TTJ」では誤爆する。 → 一括処理ができない 03 手作業は無理 10年分・28万枚超。1枚1秒でも79時間。検 索できないカタログは資産じゃない。 → なんとかせねば 285,630 枚。これを「プラグインを作って」自動でタグ付けすることにした 3
  3. 作ったもの:Lightroomプラグイン + ローカル推論サーバ Lightroom Classic プラグイン Lua(SDK) 常駐デーモンとして少しずつ処理 カタログ検索で未処理だけ抽出 カスタムメタデータに書き戻し

    airportCode / burstId / chunkId HTTP localhost 推論サーバ Python / FastAPI GPS判定(空港ジオフェンス辞書) YOLOv8:飛行機・猫の検出 CLIP + 線形SVM:空港の推定 SQLite 処理管理DB burst / chunk / photo の台帳 再開・再推定に使う ポイント:Lightroomを止めない。寝てる間も撮影に出てる間も、デーモンが裏で淡々と消化する設計 4
  4. タグ付けの仕様はシンプル 被写体キーワード YOLOv8で検出するのは 「飛行機」と「猫」だけ。 検出したらLightroomのキーワードに登録。 飛行機 猫 空港には猫がいる。撮ってしまう。 だからクラスは2つ必要(伏線)。 撮影地(空港)の特定

    信頼できる順に使う。上が獲れたら下は見ない。 1. GPS カメラ/スマホ連携の位置情報。最強 2. 手入力 過去の自分が付けた空港名。信用する 3. 写真から推定 CLIP特徴量 + SVM。最後の砦 優先度: GPS > 手入力 > 画像からの推定 5
  5. 時間で切るだけ:session ⊃ burst ⊃ chunk session 同一空港とみなす範囲 burst 最長20分 chunk

    chunk chunk chunk = 5秒以内の連写塊 burst chunk chunk burst間隔 <1時間 ≥1時間 空いたら 別session session =空港が変わった可能性 時間 → 28.5万枚 → 10,267 burst / 100,366 chunk に圧縮(平均27.7枚/burst・最大442枚/burst) 8
  6. 伝播の戦果:推論しなかった分が勝ち 62,713回 YOLO推論の総数(28.5万枚の22%) 32,572枚 伝播だけで空港が確定(1,399 burst・推論ゼロ ) 0回 locked burst(手入力済み)への再推論。過去の

    自分を上書きしない 空港コードの確定ソース(写真ベース・285,208枚) 手入力 98,015 GPS 81,373 CLIP推定 49,026 伝播 32,572 未確定 23,117 10
  7. 機械学習の話は、ここだけ(飾りです) 写真 CLIP 特徴量 線形SVM 空港コード 教師データは手持ちの写真 — 3空港ぶん、自分のカタログから (TTJ/HND/NRT)

    足りなければあとで足して再分析と割り切る 重心ベースのオープンセット判定 — どの空港でもなければ「わからない」と 言わせる 出番はGPSも手入力も無いときだけ — あくまで最後の砦 PHOTO [図/スクショ] 空港分類の混同行列 or 学習データのコンタクトシート 11
  8. 実装:人間はほぼ書いてない(まあどうでもいい) STEP 1 AntiGravity にコードを書かせる 仕様と文句は人間が言う STEP 2 Claude Code

    にレビューと修正をさ せる AI同士で殴り合ってもらう STEP 3 土日 プラグインを回しっぱなし 月曜未明、28万枚完了 12
  9. 結果 285,208 処理した写真(カタログ実数 285,630 ) 10,267 burst 100,366 chunk 30空港

    タグ付けされた空港 ※一部は要精査 156,823 鳥取空港(TTJ)— 全体の55% 108,426 「飛行機」が写っていた枚数 3,666 「猫」が写っていた枚数 2 飛行機と猫が同時に写っていた枚数 ※集計後に撮影してるので増えてます。 PHOTO 13 結果を見る限り、まあまあいい感じ。