アメリカに来てから撮影して保存している写真のファイルの数が、1万3千枚を越えました![]()
もちろん、同じような写真や 保存する意味がない写真はそもそも残していないのですが、
それでもこの枚数(約1万3千)、この容量(約20GB)です。。

こうなると、過去の写真などから ある特定の写真を探し出すのがひと苦労になると思います。
もちろん、ある程度のフォルダ分けはしていますし、撮影日でソートして見当をつけられるので、
1万3千枚を全部見るわけではありませんが
、
それでもなかなか探している写真が見つからないことも。。![]()
そこで前から思っていたのが、「類似画像を検索するプログラム」を作ることでかなり探しやすくなるのではないか、ということでした。
しかも、「類似画像の検索」というテーマは、AIの実用化がソフトウェアの世界で浸透し始めた5~6年前からの定番となっているかと思います。
ということで、類似画像検索の基本とも言える、「特徴点・特徴量による画像判定」を試してみました。
簡単に言うと、特徴点というのは その画像の中で 色が変わるポイントや、角度が急に変わるポイントなどの点です。特徴量は、その特徴点における特徴を数値化したものになります。
そして2つの画像間で、各特徴点の距離のマッチングを行い、似ているか似ていないかの判断を行う、というものです。
(すみません、本当にこのアルゴリズムを説明するとかなりな長文になってしまうのでこのくらいにしておきます
。ご興味のある方はオライリー社の書籍などがお勧めです)
実際にPythonのライブラリを活用したコードで実験してみました。
以下の元画像、日本で飼っていたうちの犬ちゃんの画像と似ているものを、

以下の画像群の中から、似ている順に5枚、選ぶというものです。

・・無事、うちの犬ちゃんの画像が類似画像として選ばれれば成功ですが、全然関係ないラーメンの画像とかヒットしたらちょっと残念ですね。。![]()
ということで、まずは元画像の特徴点・特徴量をビジュアル化したものがこちらです。

丸の位置が特徴点、大きさ・色・ベクトルが特徴量になります。
早速コードを走らせて、画像群すべてのデータを精査し、似ているトップ5を表示させました。
一番似ていると判断されたのはこちら。おっ、これは合ってますね![]()

2番目はこちら。いいですね、正しいです![]()
![]()

3番目はこちら。
・・うーむ、やっぱり同じ「犬」だと特徴点・特徴量は似てきますよね。。![]()

4番目はこちら。これは正解です![]()

そして5番目はこちら。

・・・あれ?なんで?![]()
![]()
うーん、たまたま特徴点の距離が近いものが多かったのでしょうね。。
もっと特徴点のスキャン数を増やせば精度は上がると思いますが、当然計算時間が長くなります。![]()
(なお、これら33枚をスキャンして比較するのにかかった時間は、私のPCで6~7秒でした。)
なお、コードは以下の程度の量です。
特徴点・特徴量の抽出は OpenCVというPythonライブラリを活用しているだけなので、処理内容の割にはシンプルになっています。

しかしこの精度ではちょっと実用化できないと思うので、機械学習を取り入れて改良する必要があると思います![]()