類似画像検索システムを作成する上で知っておきたいワードやツール

how-to-create-image-match-tool

どうも、ヤバWEBです。

先日、「類似画像検索システムを作る」という勉強会に参加してきました。

今日はそこで知った

類似画像検索関連のワード・ツール

をメモ程度に残していこうと思います。

pHash(Perceptual Hash)とは

pHashは

画像などのメディアデータのハッシュを計算するアルゴリズム群

のことをさします。

つまり、文字をハッシュ化して一意の文字列にするのと同じように
画像のようなメディアデータを一意の文字列=ハッシュで表現できるようにしているアルゴリズム

といったところでしょうかw

Pythonだと

pip install imagehash

で使用できます。

64bitの特徴量が出力されて16進数で表示されます。

誤検出が少ないので

  • 著作権侵害画像検出
  • 重複画像発見

でよく使われているとのことです。

ハミング距離

が近い画像を検出できるとのことで

例えば

  • 色が異なる
  • トリミングされている

とかでも検出できるようです。

ハミング距離については以下のリンクが参考になります。

ref: ハミング距離

pHashを利用した類似度の計算をしている記事があるので

よければ参考にしてみてください。

ref: Perceptual Hashを使って画像の類似度を計算してみる

TBIRとCBIRについて

画像検索については

  • TBIR (Text-Based Image Retrieval)
  • CBIR(Content Based Image Retrieval)

というものがあります。

TBIRは画像のメタ情報にあるテキストを確認して
テキスト検索するものです。

対して、CBIRは画像の画素情報から特徴を抽出して検索を行うものです。

詳しくは以下の記事が参考になります。

ref: 類似画像検索についての調査結果

画像の特徴量の抽出について

画像の特徴量を抽出するのに使用されるアルゴリズムはいくつかあります。

  • SIFT (Scale-invariant feature transform)
  • SURF (Speed-Upped Robust Feature)
  • ORB(Oriented-BRIEF)
  • AKAZE( Accelerated KAZE)
  • BRISK

などなど

これらにいては以下の記事でざっくりまとまってました。

ref: iOS / OpenCV 3.0 で画像の特徴点を検出する(AKAZE, SIFT, SURF, ORB)

他にも

などのキーワードについても少し触れておくといいかもです。

SHIFTやSURFについては以下のスライドにわかりやすく

まとめられています

ref: 画像認識の初歩、SIFT,SURF特徴量

近似最近傍探索

近似最近傍探索は

検索対象のベクトルからもっとも近いベクトルを検索する技術です。

Faissといったお手軽なツールも存在します。

ref: Facebook Researchのfaissで類似検索

メルカリはこちらのFaissを使用して類似画像検索システムを構築しているようです。

他にもFLANNやAnnoy,NMSLIBなどがあります。

ref: 高速最近傍点探索ライブラリFLANNを使ってみる
ref: Chainer とAnnoyを使った 類似画像検索 【入門】

このimage-matchというオープンソースライブラリがお手軽に使えるそうです。

ref: EdjoLabs/image-matc

あと少しインフラ構築に力をいれれば

以下のソースコードが類似画像検索機能の構築の参考になります。

ref: alexklibisz/elastik-nearest-neighbors

画像検索まわりはほぼ未知なので、

新しい発見がたくさんあって楽しかったですw

自分でも簡単にOpenCVを使って類似画像検索ツールをつくったりしてみました。

だれでもお手軽に画像をつかってあれこれできる時代になってきてますね