web-dev-qa-db-ja.com

OpenCVでSURF、SIFTを使用できません

私は次のような簡単なことを試みています

detector = cv2.SIFT()

そして、この悪いエラーを取得

detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'

Cv2がインストールされているため、それがわかりません。

cv2.__version__

$Rev: 4557 $

私のシステムはUbuntu 12.04です。

誰かが同じ問題を抱えていて、助けてくれるかもしれません。

編集:

長い話、短いtestypypypy.py

import cv2

detector = cv2.SIFT()

エラー:

Traceback (most recent call last):
  File "testypypy.py", line 3, in <module>
    detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT

SURFを使用すると、SURFdir(cv2)にあるため機能しますが、cv2.BFMatcher()も使用すると同じエラーが発生します。しかし、私は方法がわかりません。

49
Linda

これはそれを行う「正しい」方法とはほど遠いと思います(Ubuntuの「正しい」方法は壊れた、または古いOpenCVに固執するようです)。 cv2.SIFTおよびcv2.SURF。

手順:

  1. opencv.org からopencv-2.4.6.1.tar.gzをダウンロードします。
  2. ソースを抽出します。

    tar -xf opencv-2.4.6.1.tar.gz -C /tmp
    
  3. ソースを構成します。これにより、ホームディレクトリの.opencv-2.4.6.1にOpenCVがインストールされます。

    cmake -D CMAKE_BUILD_TYPE=RELEASE \
          -D BUILD_PYTHON_SUPPORT=ON \
          -D WITH_XINE=ON \
          -D WITH_OPENGL=ON \
          -D WITH_TBB=ON \
          -D BUILD_EXAMPLES=ON \
          -D BUILD_NEW_PYTHON_SUPPORT=ON \
          -D WITH_V4L=ON \
          -D CMAKE_INSTALL_PREFIX=~/.opencv-2.4.6.1 \
          /tmp/opencv-2.4.6.1
    
  4. ビルドとインストール:

    cd /tmp/opencv-2.4.6.1
    make -j4
    make install
    
  5. PYTHONPATHを設定します(これはbashで機能しますが、他のシェルについてはわかりません)。

    export PYTHONPATH=~/.opencv-2.4.6.1/lib/python2.7/dist-packages
    

pythonを起動してcv2をインポートすると(これはgnome-keyring警告を生成します)、cv2.SIFTとcv2.SURFを使用できます。

24
Mårten W

この問題に関する最新情報(2015年9月現在)については、 このページ を参照してください。

ここでのこの質問に関するほとんどの情報は時代遅れです。

Pyimagesearchが言っているのは、特許の問題のためにSURF/SIFTがopencv_contribに移動したということです。

インストール用に Nice page もあり、opencv_contribおよびPythonをサポートするopencvをインストールしてSURF/SIFTを取得する方法を示します。

APIも変更されたことに注意してください。これは次のようなものです。

sift = cv2.xfeatures2d.SIFT_create()

上記のページを見つける前に、かなり苦労しました。しかし、リストされているページは、インストールを支援し、何が悪いのかを説明する非常に良い仕事をしています。

56
Stefan Savev

これを非常に簡単にするpipソースがあります。

  1. Opencv-pythonの別のバージョンがインストールされている場合、競合を避けるためにこのコマンドを使用して削除します。

    pip uninstall opencv-python
    
  2. 次に、これを使用してcontribバージョンをインストールします。

    pip install opencv-contrib-python
    
  3. SIFTの使用法:

    import cv2
    sift = cv2.xfeatures2d.SIFT_create()
    
56
Tripp Cannella

参考までに、3.0.0の時点で、SIFTおよび友人は https://github.com/Itseez/opencv_contrib にあるcontribリポジトリにあり、デフォルトではopencvに含まれていません。

28
Spechal

debianユーザーの場合、独自のlibopencv-nonfreeパッケージを作成するのは「簡単」です。

私はPythonのopencvチュートリアルに従いましたが、私のdebianではSIFTとSURFモジュールが欠落していました。また、SIFTやSURFなど、debianで利用できる非フリーパッケージはありません。

ライセンスの問題により、パッケージから削除されました。..

(新しいモジュールを追加するなど)以前にdebianのパッケージを作成したことはありませんでしたが、debianチュートリアルのいくつかの小さな手順に従い、少し試して推測しました。1日後、出来上がりました... 4 debパッケージと正しいバインディングを持つpythonモジュール。

(新しくビルドされたpython-opencvパッケージまたはnonfreeのみをインストールする必要があるかどうかわからない...両方を再インストールし、必要なすべてのnonfreeモジュールを含むpython opencvライブラリを取得しました!)

わかりました、ここにあります:

!これはlibopencv 2.4用です!

!通常のユーザーとしてインストールする以外のすべての手順を実行できます!

新しいパッケージをコンパイルして作成するには、ビルドされたセッションとdebianリポジトリのいくつかのツールが必要です。

Sudo apt-get install build-essential fakeroot devscripts

ホームにディレクトリを作成し、そのディレクトリに変更します。

cd ~ && mkdir opencv-debian
cd opencv-debian

必要なパッケージをダウンロードします。

apt-get source libopencv-core2.4

必要な依存パッケージをすべてダウンロードして、新しいopencvをビルドします

apt-get build-dep libopencv-core2.4

これにより、必要なソースがダウンロードされ、「opencv-2.4.9.1 + dfsg」というディレクトリが作成されます

そのディレクトリに変更します。

cd opencv-2.4.9.1+dfsg

次のように入力して、パッケージが変更なしでビルドされるかどうかをテストできます。

fakeroot debian/rules binary

これには長い時間がかかります!このステップはエラーなしで終了するはずです。opencv-debianディレクトリに多くの.debパッケージがあります。

次に、パッケージ定義にいくつかの変更を加えて、debianがnonfreeモジュールとパッケージをブルドできるようにします!

opencv-debianディレクトリに移動し、正しいopencvソースをダウンロードします。私の場合、opencv 2.4.9程度

私は https://github.com/Itseez/opencv/releases から私のものを得ました

wget https://codeload.github.com/Itseez/opencv/tar.gz/2.4.9

これはopencv-2.4.9.tar.gzをダウンロードします

アーカイブを抽出します。

tar -xzvf opencv-2.4.9.tar.gz

これにより、元のソースがopencv-2.4.9というディレクトリに解凍されます。

元のソースからdebianソースにnonfreeモジュールをコピーします:

cp -rv opencv-2.4.9/modules/nonfree opencv-2.4.9.1+dfsg/modules/

わかりました、今ではフリーでないモジュールのソースがありますが、それはdebianには十分ではありません... 1つのファイルを修正して新しいファイルを作成する必要があります

debian制御ファイルを編集し、ファイルの最後に新しいセクションを追加する必要があります(ここではエディターとしてmceditを使用します)

mcedit opencv-2.4.9.1+dfsg/debian/control

または、選択した他のエディターを使用します

このセクションを追加します。

Package: libopencv-nonfree2.4
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Description: OpenCV Nonfree Modules like SIFT and SURF
 This package contains nonfree modules for the OpenCV (Open Computer Vision)
 library.
 .
 The Open Computer Vision Library is a collection of algorithms and sample
 code for various computer vision problems. The library is compatible with
 IPL (Intel's Image Processing Library) and, if available, can use IPP
 (Intel's Integrated Performance Primitives) for better performance.
 .
 OpenCV provides low level portable data types and operators, and a set
 of high level functionalities for video acquisition, image processing and
 analysis, structural analysis, motion analysis and object tracking, object
 recognition, camera calibration and 3D reconstruction.

次に、libopencv-nonfree2.4.installという新しいファイルを作成します

touch opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install

そして編集:

mcedit opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install

次のコンテンツを追加します。

usr/lib/*/libopencv_nonfree.so.*

oK、それで、パッケージを再度作成します:

cd opencv-2.4.9.1+dfsg

最初のクリーンアップ:

fakeroot debian/rules clean

ビルド:

fakeroot debian/rules binary

et voila ...しばらくして、新しいパッケージlibopencv-nonfree2.4.debがビルドされました!

ルートとしてインストールします:

dpkg -i libopencv-nonfree2.4.deb
dpkg -i python-opencv.deb

そしてテスト!

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

sift = cv2.SIFT()
kp = sift.detect(gray,None)
img=cv2.drawKeypoints(gray,kp)

corners = cv2.goodFeaturesToTrack(gray,16,0.05,10)
corners = np.int0(corners)

for i in corners:
    x,y = i.ravel()
    cv2.circle(img,(x,y),90,255,3)

plt.imshow(img),plt.show()

楽しんで!

8
vizzy

この問題を発見したときにすでにopencvをコンパイルしていたので、私がしなければならなかったのは(私のopencvビルドディレクトリから):

make opencv_nonfree
Sudo make install
2
nmz787

Anacondaユーザーとして、問題を解決するための1つまたは2つの適切なコマンドを探していました。幸いなことに、これは answer 役に立ちました。 conda 4.5.11の場合(conda -Vを使用してAnacondaのバージョンを確認します)次の手順を実行しました。

# Python version does not matter, most likely, check yourself
conda create -n myenv python=3.6     
conda activate myenv
conda install -c menpo opencv

OpenCV 2.4.11がインストールされます。 Anacondaの別の コマンドconda install -c menpo opencv3はOpenCV3をインストールしますが、Pythonは2.7にダウングレードする必要があります。 Python3でOpenCV3をインストールするには、次を使用します(最初のリンクのため):

conda create -n myenv python  
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16

SIFTを確認します。

conda activate myenv
python
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>
2
A.Ametov
  1. OpenCV-Contribをインストールする

  2. import cv2 sift = cv2.xfeatures2d.SIFT_create()

  3. sift.something()

これはContribをインストールする簡単な方法です。

1
user8396116

このインストール手順を休む

http://jayrambhia.com/blog/install-opencv-2-4-in-ubuntu-12-04-precise-pangolin/

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local
    -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON 
    -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON 
    -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON ..

このコマンドを使用すると、ライブラリが/ usr/local/libにインストールされます。

1
madan ram

IN opencv3.x SIFT()およびSURF()はもう存在しません。

すべてのopencvバージョンをアンインストールします

python -m pip uninstall opencv-python

python -m pip uninstall opencv-contrib-python

その後、opencv-contribをインストールして、python(3.x)で指定された以下のコマンドを使用してsift()およびsurf()を組み込みます。

python -m pip install opencv-contrib-python==3.4.2.16

その後、使用できます

sift = cv2.xfeatures2d.SIFT_create()
1
Priyansh gupta

Ubuntu 14.04 LTSでnon-freeパッケージをビルドするときのように、vizzyが提案するアプローチはOpenCV 2.4.8でも機能します。

この依存関係の問題により、非フリーパッケージのインストールが妨げられる場合があります。

 libopencv-nonfree2.4 depends on libopencv-ocl2.4; however:
  Package libopencv-ocl2.4 is not installed.

不足しているパッケージは、ビルドしたばかりのパッケージからインストールできるため、簡単に修正できます。

dpkg -i libopencv-ocl2.4_2.4.8+dfsg1-2ubuntu1_AMD64.deb

その後、vizzyの答えで説明されているようにインストールが進行します。

0
Joe Futrelle

Opencvのバージョンを3.4.2.16に変更するだけです。特許を取得しているため、新しいバージョンでは使用できません。

0
ankita singh

上記の提案された解決策のどれも私にとってはうまくいきませんでした。私はAnacondaを使用していますが、opencvバージョン3.3.1ではまだSiftが有効になっています。隔離されたconda環境でテストする場合は、上記の@ A.Ametovの回答からヒントを得た以下を試してください。

conda create -n testenv opencv=3.3.1     
conda activate testenv

conda activate myenv
python
#Check version of opencv being used
>>> import cv2
>>> cv2.__version__
#Check if Sift is available
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>
0
Vik

これを変更

sift = cv2.xfeatures2d.SIFT_create()

これにより

cv2.ORB_create()
0
Saulo