写真画像のAI検索システムを造ってみた

目次

膨大な画像ライブラリから素材と似た画像を抽出

愛用のクロスバイク記事に2ヶ月もかかった理由

2026年1月21日に粗大ゴミ処分してしまったクロスバイク。追悼のブログ記事を書くまで2ヶ月間も要した理由は、書くのが辛かったという優しいなど気持ちではあまりなく、所有していた6年間の写真ライブラリの中から該当する写真をピックアップしてアップロードするという苦行を考えただけでやる気が起きなかったというだけのこと。(*´・ω・)
とはいえ、それなりに価値ある日々を過ごした相棒である。
過去の投稿の寄せ集めではなく、いつかはきちんとまとめたかった。対象となる6年間の写真画像は1,500枚存在する。これが多いか少ないかといえば、一応写真好きとしてはかなり少ないはず。
鳥観察を趣味とする友人なら一日分かもしれない・・・勝手な想像(^。^)
自分の場合、少なく済んでるのは単純な割り切りである。失敗作を排除するのは当然だが、ストレージへのインポート時、特に未来に残す価値がないと判断したら迷わずその場で捨ててしまうのだ。

さて、自分の写真ライブラリは基本的に撮影日を1年ごとのフォルダに分けて保存している。
撮影対象が限定されているのでこれ以上の凝った分類にする必要がないのだ。
おそらく多くの写真好きが行っている(だろう)このやり方には大きな弱点があり、一瞥して目的の写真を検索したり、それらを抽出するというのは、かなりの苦行となる。
だからといって「すべての写真にタグ付け」などまったく現実的でない。
おおまかな記憶は残っているのでふだんはそれで困らないが、きちんとすべてのライブラリを「精査して」リストアップするとなればハナシが変わってくる。

イメージに合う写真画像をリストアップするだけなのに

今後のことを鑑みれば今回のクロスバイクネタ用途ばかりとは限らないので、類似画像を検索してレポートをcsvテキストで出力してくれるソフトがあれば良いではないかとひらめいた。( ゚∀゚)
しかし、そんな都合の良い”無料”ソフトを探すのにも余分な手間と時間がかかってしまい、投げ出した結果2ヶ月はあっという間に過ぎてしまったのだった。とっくにヒマ人生活とはいえ、なんの成果もないまま時間だけが過ぎていくのはあまり気分が良くない。
3月も後半になってやはり記事を書きたくなった。こういう時にはAI頼みが良いのではないかとひらめき、ChatGPTに聞いてみたら、”digiKam(ディジカム)”というソフトが最適と直ちに回答があり、「おお、さすがだね。よしよし(^。^)」と気分良くインストールして使用してみたが、まるで役に立たなかった。どう条件設定しても「類似画像」が1枚も抽出できない。
何度もつまずいて相談する度にGPTのやつは自信満々で原因を考えて対処方法を提案してくるのだが何度やり直しても目的に近づけない。こんなとき、こいつは本当に役に立たなくなる。
毎回対象画像群をスキャンするのにそれなりに時間もかかるし、提示された解決策の試行錯誤を続けるうちにあっという間に就寝時刻を過ぎていたのだった。その日はそれで打ち切り(;´Д`)

Claude(クロード)で解決

翌日、気を取り直して「そうだ、こうゆうテック系の案件には”Claude(くろーど)”の方が頼りになりそう」とあらためて事情を説明して相談したら「その用途にdigiKamは向いてません」と拍子抜けの回答。(*´・ω・)
「選択肢はあることはあるが、オリジナルでソフトをつくってしまうのが速くて確実」と提案をうけ快諾した。
最初からそれを提案しろよとは、言えなかった。何しろ「基本的にターミナルコマンドは回避」という厳しい条件をつきつけていたので選択肢が限られていたのだ。
「以前にある程度経験があるのだから大した苦労はありませんよ」と励まされて、指示通りに定番プログラミン言語のPython(ぱいそん)と開発環境のVSCode、その他今回の目的に必要なライブラリをインストール。
とりあえず作ってみるので注文があれば聞くよ、というイージーオーダー方式としてくれたので一安心。
「それじゃよろしく」のあと、1分もしないうちに出てきたのがこれ。

こいつは驚いた。必要条件をすべて満たしていて、見栄えも悪くない。ちゃんとGUIしてるし。( ゚∀゚)
Python使うというので、てっきりターミナルから画像フォルダのパスを引数として入力し起動するもんだとばかり勝手に想像していたのだが、スクリプトファイルを開くだけで使えるとは・・・まいりました。
さすが、「プログラミングなら万能」と期待していた実力に驚嘆した。

望みどおりのCSVレポートもパーフェクト。しかし・・・

いや、待てよ。自分の指示が間違っていたことに気がついた。(*´・ω・)
このレポートを見てやることは、

  • サムネイルとして並んでいる類似画像を取捨選択
  • パス名を確認して自分が写真画像をピックアップしフォルダ内を検索
  • 見つけた画像をリサイズして作業フォルダにコピー

というだけのことだが、これを50回近くも繰り返さねばならないではないか。
しかも、アプリ画面にリストアップされたサムネイル画像を交互に見比べながらである。

そんなのやってられるか ! ぜんぶ手作業の方が速いではないか

要するに設計仕様を良く考えずに発注したからこうなった、というより勝手につくってくれたのだ。
こういうときは腰を低くして「あのぅ済みませんが手直しお願い出来る?」になりがちだが、素知らぬ顔して(?)修正要求してみた。

プロトタイプに対して容赦ない改善要望( ゚∀゚)

  • 画像を全部初期スキャンするのに10数分かかっているので繰り返し検索時に高速化が必要
  • 抽出結果サムネイルリストを縦長でなく横方向スクロール形式に
  • CSV出力の代わりにリサイズしたブログ用画像を任意のフォルダに自動転送
  • キーワード入力、リサイズ横優先ピクセル数(初期値1200)、上限抽出数、検索対象の初期フォルダ記憶
  • 加工後の出力先は任意の指定場所にキーワード名のフォルダを作成
  • 写真撮影日を yyyy.m.d 形式で右下に追加
  • 文字色を指定するオレンジ色以外にカラーピッカーなどで任意に変更できること
  • 処理時間がそれなりにかかるので所要時間がひと目で分かるように表示
  • FreeSimpleGUIツールを使ってキレイな画面に
  • タイトルバーにバージョンを表記

起動して初回検索するのを待つ間に思いつく限りの要望を考えていたのだ。
プロトタイプ画面を見て狂喜していたはずなのに目的達成したら調子に乗って次々に出るわ出るわの要求事項、クライアントの身勝手さあるあるってとこですわ。(*´~`*)

15分➡️1分72秒!AI開発の面目躍如で驚異のバージョンアップ(^◇^)

「とりあえず、これだけ希望があるのだけど出来る?」と下手に出てお願いしてみたら「それはそうですね。当然の改善要望です。ちょっと時間をいただけますか?」のありがたいお答えだったが・・・
なんと回答から3秒も経たないのにもう改良版Ver2.0が出てきた。( ゚∀゚)

「一部不完全部分はあります」と釈明はあったが、これは凄すぎる。まるで別物や。しかもキャッシュを駆使して飛躍的高速化まで実現している。「人間ワザではないな」とアホみたいに驚嘆した。( ゚д゚ )
再検索実行では実に7秒だった!!その後、さらなる細かな注文と改善要望により、完成となった。

ブログ用リサイズ画像ファイルも指定したフォルダ名とサイズで完了。

こんなことが出来るのだから、クロスバイクに限定するのではなく汎用性を持たせたいという欲張りな願望に嫌な顔(?)ひとつせず、淡々とこなしてくれた。プロトタイプ完成からここまで来るのに実に1時間ちょっとくらいである。
サムネイルリストの縦横スクロールだけがGUIツールのクセで難しいらしく宿題となった。
もう、文句なしの完成品でしょ。しかも著作権は自分のものにしていいってさ。ヾ(o´∀`o)

右下の「日付焼き込み」にも注目。頼んでなかったけど、ちゃんと影付き文字にしてくれていた。
こうなると、中断していたPythonのお勉強再開のモチベーションが激減してしまったことが唯一の残念ポイントになるという嬉しいような嬉しくないような誤算ではあります。こんなにカンタンにアプリが作れるなら…
最後の細かなカスタマイズはさすがに自分でやりましたが。(*´~`*)
タイトル詐欺ではないかとの疑念もうまれるが、自分が決めた仕様でプロジェクトリーダーの役目も果たしたのだから、胸を張って「オレの作品」と呼ばせてもらうのだ。

今回の功労者は OpenAIのCLIP

「Pythonってこんなことも出来るんだね」という感想もあると思われるが、実はそんな機能はありません。”他力本願上等”ってとこで、外部のツールやライブラリを柔軟に活用出来ることで応用範囲が無限に広がるわけ。
今回のキモは外観的なアプリそのものよりも”画像分析”能力が必要なので CLIP というライブラリを利用しているが、その機能は画像を元に検索だけではなく、「テキスト入力からの検索」だってお手のものらしい。
手直しして「ブルーのクロスバイクを検索」だけで出来るようにしてもいいかも。
その改良をやるのは、もちろんクロードさんだけどね。ヾ(o´∀`o)

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次