Skip to main content

AttributeError: ‘module’ object has no attribute ‘xfeatures2d’ エラーの解決案

python で opencv を利用していて、SIFT や SURF が入っている xfeatures2d を参照しようとしたら以下のエラーメッセージが表示されます。

Traceback (most recent call last):
  File "test.py", line 7, in <module>
    sift = cv2.xfeatures2d.SIFT_create()
AttributeError: 'module' object has no attribute 'xfeatures2d'

原因

opencv 3以降、SIFT や SURF などのアルゴリズムが入っている xfeatures2d が opencv の標準機能から外されました。ソースコードも別のレポジトリに格納されています。

外された機能は non-free 機能と言い、xfeatures2d の他にもたくさんあります。その全てが opencv_contrib に入っています。opencv と opencv_contrib の Git レポジトリは以下の通りです。

Git レポジトリ
opencv https://github.com/opencv/opencv.git
opencv_contrib https://github.com/opencv/opencv_contrib.git

python の opencv 拡張モジュールである cv2.so ファイルに non-free のライブラリが入っていないのが原因です。

解決案

解決のため、non-free 機能が入っている cv2.so をビルドし直します。手順は以下の通りです。

opencv と opencv-contrib のソースコードを両方とも git でダウンロードします。

git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

opencv を CMake を使ってビルドします。CMake では opencv_contrib のパスを設定します。 extra_module を検索して OPENCV_EXTRA_MODULES_PATH を opencv_contrib/modules に設定します。

上記gitのダウンロードパス/opencv_contrib/modules

また、念のため BUILD_opencv_xfeatures2d も ON になっているかを確認します。(デフォルトではONです)

これで Configure、Generate して make でビルドします。opencv のビルド方法と python に組み込む方法は以下の2つの文書をご参照ください。

non-free 機能について

opencv_contrib に入っている non-free 機能やアルゴリズムは、学術や研究目的であれば自由に利用でき、商用(利益を得る)の場合、作者からのライセンス/許可が必要な場合があるそうです。それぞれのライセンス(利用許可)をご確認ください。

Jingwood

北海道の田舎で暮らしているプログラマーです。最近山登りにハマりました。

Leave a Reply

Your email address will not be published. Required fields are marked *