powered by TechFeed
表示モード
ハウツー

クラウドに一枚も上げずに240枚の写真を自動整理 — ローカルAI+Pythonで「IMG_1543.jpg」問題を解決した実践例

11月2日、How-To Geekが「I used free local AI to organize hundreds of photos without uploading a single one」と題した記事を公開した。14年前のカンファレンス写真を入力したところ、AIが会議名・開催年・会場の様子まで正確に読み取り、説明的なファイル名を自動生成した——クラウドへのアップロードは一切なし、コストはゼロ、処理時間は40分以内という実践例だ。

11月2日、How-To Geekが「I used free local AI to organize hundreds of photos without uploading a single one」と題した記事を公開した。14年前のカンファレンス写真を入力したところ、AIが会議名・開催年・会場の様子まで正確に読み取り、説明的なファイル名を自動生成した——クラウドへのアップロードは一切なし、コストはゼロ、処理時間は40分以内という実践例だ。


課題:「IMG_1543.jpg」が何千枚も溜まった問題

著者のRich Hein氏は、Canon Rebelで撮った写真や、スマートフォン買い替え時にバックアップした画像など、PCに数百〜数千枚の画像が蓄積した状態だった。ファイル名はIMG_0001.jpgのような連番で、サムネイル表示で目当ての画像を探すしかない状況だ。

iCloudはすでに容量オーバーで追加課金はしたくない。digiKamのような無料の写真管理ツール(オープンソースのデスクトップ写真管理アプリ。顔認識やタグ付けなど多機能だが、AIによる自動ファイルリネームには非対応)も存在するが、既に手元にある環境(ミニPC+ローカルAI)を使って自作することにした。

目標はシンプルだ。

  • 各写真の内容をAIに認識させる
  • 説明的なファイル名を自動生成する
  • カテゴリ別フォルダに振り分ける
  • 全工程をクラウドなしで完結させる

構成:LM Studio + Qwen3-VL-2B Instruct + Python

ローカルLLM実行環境としてOllamaとLM Studioを両方インストール済みだったが、今回はLM Studioを選択した。理由は内蔵のローカルサーバー機能で、PythonスクリプトからHTTP経由でモデルに直接リクエストを投げられるからだ。

なお、OllamaもAPIサーバー機能を持つが、LM StudioはGUIでのモデル管理・パラメータ調整がより直感的で、Python連携のサンプルコードも内蔵されているため、初期セットアップの手間が少ない。どちらを選ぶかは用途と好みによるが、今回のようなスクリプト連携用途ではLM Studioの手軽さが優位に働いた。

ビジョンモデルの選定で一度失敗している

最初に試したQwen2-VL-2B-Instruct Q4_K_Mはコンテキストウィンドウのトークン上限に引っかかり動作しなかった。コンテキスト長を増やして再試行したが断念し、**Qwen3-VL-2B-Instructに切り替えたところ、1枚あたり20秒以内**で画像解析が完了した。

ここで注意が必要なのはモデルの命名だ。「Qwen3-VL」という名称は、AlibabaのQwen3シリーズ(2025年4月に発表されたテキスト系LLMファミリー)とは直接の関係がなく、ビジョン言語モデル(VLM)系列における「Qwen2-VL」の後継として位置づけられている。つまりQwen2-VL→Qwen3-VLという世代進化であり、テキスト系Qwen3とは別系統だ。読者が混乱しやすい命名だが、元記事の文脈ではVLMとしての後継モデルとして扱われている。

Qwen3-VL-2BはAlibabaが開発した2Bパラメータの軽量ビジョン言語モデル(VLM)で、画像内のテキストも読める。実際、14年前のカンファレンス写真(Gartner Symposium/ITxpo 2012)を入力したところ、「単に人が集まっている」とではなく、会議名と開催年を正確に読み取り、白いオットマンに座った参加者がPowerPointのスライドを見ている様子まで記述した。


Pythonスクリプトの動作フロー

スクリプトの処理は大きく2段階に分かれる。

第1段階:解析とCSV生成

  1. 指定フォルダの画像を1枚ずつLM Studioのローカルサーバー(APIエンドポイント)に送信
  2. モデルが内容を解析し、説明文・推奨ファイル名・カテゴリ(Nature / Pets / Family / Food / Other)を返す
  3. ミニPCの処理負荷を抑えるため、送信前に画像をリサイズ
  4. 元ファイル名・新ファイル名・説明文・カテゴリをCSVに書き出す

この時点では元ファイルは一切変更されない。

第2段階:CSVを確認してから適用

CSVを人間がレビューし、問題があれば修正する。実際、オーロラの写真2枚が全く同じファイル名・説明文になっていたケースがあり、手動で修正した。確認後にapplyコマンドを実行すると、カテゴリ別フォルダにコピーとして整理済み写真が生成される。元フォルダの原本はそのまま残り、確認後に削除する流れだ。


結果:240枚を40分以内で処理

1枚→20枚と段階的にテストを重ね、最終的に240枚超のフォルダに対してスクリプトを実行した。処理中は放置して別の作業ができ、40分以内にCSVのレビュー作業に移れた。手動でやれば数時間かかる作業だ。

完璧ではない。一部のファイル名は汎用的すぎたり、同じ被写体の写真が同一の名前で生成されたりするケースがあった。ただし、CSVによる「人間レビュー→適用」の2段階構成が安全装置として機能しており、元データを壊すリスクはない。


ポイント整理

項目 内容
モデル Qwen3-VL-2B-Instruct(LM Studio経由)
実行環境 ミニPC(ローカル)
処理速度 1枚あたり約20秒
処理枚数 240枚超を40分以内
コスト 無料(ソフトウェア・API費用なし)
データの外部送信 なし

プライバシー上の理由でクラウドに写真を上げたくない、あるいはサブスクを増やしたくないという動機から始まったプロジェクトだが、実用的な結果を出している。LM StudioとQwen3-VL-2Bの組み合わせは、ローカルでの画像解析の現実的な出発点として参考になる。

詳細はI used free local AI to organize hundreds of photos without uploading a single oneを参照していただきたい。