otamapy has been released

otama のPythonインターフェース otamapy (おたまぱい)をリリースしました。

otamaとは?

otamaはC言語で実装されたCBIR(Content-based image retrieval) Engine、 いわゆる類似画像検索エンジン用のライブラリです。 対象画像の特徴をデータベースに保存し、画像をクエリに画像を検索できます。

otamaはCV用ライブラリ nv と 画像処理ライブラリ eiio に依存しているので、 インストールは nv, eiioをインストールした後に行うとスムーズに進むはず。

otamapyとは?

otamapyはotamaをPythonでラップしたものです。 otamaにはすでにRubyのインターフェースが存在しましたのでそれをベースに作成しました。

otamapyのインストールと使い方

インストール

$ pip install otamapy

データベースにストアした後、検索。

# store_and_search.py
import os
from otama import Otama

DATA_DIR = 'data'
config = {'namespace': 'testnamespace',
          'driver': {'name': 'sim', 'data_dir': DATA_DIR, 'color_weight': 0.2},
          'database': {'driver': 'sqlite3', 'name': './data/store.sqlite3'}
          }

if not os.path.exists(DATA_DIR):
    os.mkdir(DATA_DIR)

# テーブルが存在しなければ作成する
db = Otama.open(config)
db.create_table()

# データベースに格納
kvs = {}
files = ('foo.jpg', 'bar.jpg')
for filename in files:
    kvs[db.insert(filename)] = filename

# データベースに反映
db.pull()

# 検索
for result in db.search(10, 'foo.jpg'):
    print("file=%s, sim=%0.3f" % (kvs[result['id']], result['similarity']))

# おわり
db.close()

実行結果

$ python store_and_search.py
file=foo.jpg, sim=1.000
file=bar.jpg, sim=0.969

類似度は0~1の数値で表されます。 foo.jpg をクエリにして検索すると、 foo.jpg が1.0で一番近い(同じ)画像と判断されています。

今後

otamapyは現在、一部のAPIが未実装ですので、 2月中くらいにはRubyインターフェースと同じAPIを提供できるようにしたいです。 あとはPython3.x系に対応しようとしましたが途中で諦めてしまったので、 それも追々対応したいです。

それにしてもCBIRの分野はおもしろいですね。 CVあたりとかもうちょっと突っ込んで勉強したい。