指紋データベースを作成する方法を考えていました。指紋が画像として保存されている場合、データベース内の画像をどのように比較しますか、またはTinEyeのような画像検索エンジンを作成しますか?
これが大きなテーマであることは知っていますが、私は出発点を探しています。これは、Python / DjangoライブラリとMySQLを使用して実行できますか?
指紋データベースを作成する方法を考えていました。指紋が画像として保存されている場合、データベース内の画像をどのように比較しますか、またはTinEyeのような画像検索エンジンを作成しますか?
これが大きなテーマであることは知っていますが、私は出発点を探しています。これは、Python / DjangoライブラリとMySQLを使用して実行できますか?
OpenCV には、探していることを実行するサンプル プログラムが付属しています。これはfind_obj.pyと呼ばれます。エディターでプルアップして変更します:
surf = cv2.SURF(1000)
に
surf = cv2.SURF(100)
これにより、指紋スキャンのネガで多くの「インライア」の関心ポイントが見つかるはずです。
いくつかの変数をいじってみると、比較している種類の画像に最適な構成を最終的に見つけることができます。サンプルを変更して、単一のイメージをディレクトリ全体と比較できるようにすることも非常に簡単です。
これは、法執行機関が使用するデジタル化された指紋スキャンのような場合にのみ有効であることを指摘しておく必要があります.
非常に単純なアプローチとして、すべての画像をクロールし、それぞれのハッシュを計算できます。
後で、ユーザーが検索のために画像を送信すると、そのハッシュも計算し、データベースで同じハッシュを探します。
ただし、これは非常に単純なアプローチであり、正確なイメージ コピーを検索する場合にのみ機能します。理想的には、各画像をいくつかの単純化された機能セット (同じ画像の異なるバージョン --- 異なる形式、サイズ、ノイズなどに対する耐性を持たせるため) に変換して、比較に使用する必要があります。たとえば、画像 (クロールされた画像と検索用に送信された画像の両方) を 128x128 サイズのグレースケールに変換し、そのハッシュを計算してみる価値があるかもしれません。
Python Imaging Libraryは、おそらく画像処理を始めるのに最適なライブラリです。
リアルタイム画像処理に最も一般的に使用されるライブラリ (リアルタイムは必要ありませんが、高速で失敗することはありません) はOpenCVです。Python バインディングと組み込みの機能検出アルゴリズムがあります。この比較も参照してください。
画像比較アルゴリズムの概要については、この質問をご覧ください。