Ne peut pas utiliser SURF, SIFT dans OpenCV

j'essaie une chose simple comme

detector = cv2.SIFT()

et obtenir cette erreur de mauvais

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

Je ne comprends pas cela parce que cv2 est installé.

cv2.__version__

$Rev: 4557 $

mon système est Ubuntu 12.04.

Peut-être que quelqu'un a eu le même problème et pourrait m'aider.

EDIT:

pour faire court, testypypypy.py:

import cv2

detector = cv2.SIFT()

erreur:

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

Si je prends SURF cela fonctionne parce que SURFdir(cv2) mais si je prends aussi cv2.BFMatcher() j'obtiens la même erreur... Il est donc manquant et je dois l'ajouter, mais je ne sais pas comment.

41
demandé sur Georgy 2013-09-01 23:09:53

9 réponses

je pense que c'est loin d'être la façon "correcte" de le faire (la façon "correcte" sur Ubuntu semble être de s'en tenir à une OpenCV cassée et/ou périmée), mais pour moi construire opencv-2.4.6.1 à partir de la source ramène cv2.SIFT et cv2.SURF.

Mesures:

  1. télécharger opencv-2.4.6.1.tar.gz opencv.org.
  2. extraire la source:

    tar -xf opencv-2.4.6.1.tar.gz -C /tmp
    
  3. Configurer la source. Cela va dire à OpenCV de s'installer dans .opencv-2.4.6.1 dans votre répertoire:

    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. Construire et installer:

    cd /tmp/opencv-2.4.6.1
    make -j4
    make install
    
  5. Set PYTHONPATH (cela fonctionne en bash, Je n'ai aucune idée des autres shells):

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

maintenant si je démarre python et que j'importe cv2 (pour moi, cela produit un avertissement gnome-keyring), j'ai cv2.SIFT et cv2.SURF disponible.

20
répondu Mårten W 2013-09-03 10:46:10

Pour des informations récentes sur cette question (à compter de Septembre 2015) consulter cette page.

la plupart des informations sur cette question ici sont obsolètes.

ce que pyimagesearch dit est que SURF / SIFT ont été déplacés à opencv_contrib en raison de problèmes de brevet.

Pour l'installation il y a aussi un belle page qui vous indique comment installer opencv opencv_contrib et le support Python donc vous obtenez SURF / SIFT.

notez que L'API aussi modifié. Maintenant c'est comme ceci:

sift = cv2.xfeatures2d.SIFT_create()

avant de trouver les pages ci-dessus, j'ai aussi beaucoup souffert. Mais les pages énumérées font un très bon travail d'aider à l'installation et d'expliquer ce qui ne va pas.

45
répondu Stefan Savev 2015-09-23 10:07:39

Il y a une source pip qui rend cela très facile.

  1. si vous avez une autre version d'opencv-python installée, utilisez cette commande pour la supprimer afin d'éviter les conflits:

    pip uninstall opencv-python
    
  2. puis installez la version contrib avec ceci:

    pip install opencv-contrib-python
    
  3. TAMISER utilisation:

    import cv2
    sift = cv2.xfeatures2d.SIFT_create()
    
39
répondu Tripp Cannella 2017-11-30 04:05:56

pour information, à partir de 3.0.0 L'EIPD et ses amis font partie d'un repo contrib situé à https://github.com/Itseez/opencv_contrib et ne sont pas inclus avec opencv par défaut.

27
répondu Spechal 2014-09-02 15:18:07

pour les utilisateurs debian, il est "facile" de créer leur propre paquet libopencv-nonfree.

j'ai suivi le tutoriel opencv pour python, mais dans ma debian les modules SIFT et SURF manquaient. Et il n'y a pas de paquet non libre Disponible pour debian, y compris SIFT et SURF etc.

ils ont été retirés du paquet en raison de problèmes de licence....

Je n'ai jamais créé de paquet pour debian avant (ajout d'un nouveau module, etc.) mais j'ai suivi quelques petites étapes dans la des tutoriels debian et essayé et deviné un peu, et après 1 jour, voilà... je travaille sur un libopencv-nonfree2.4 paquets deb et un module python avec des fixations correctes.

(Je ne sais pas si j'avais aussi besoin d'installer le paquet python-opencv nouvellement construit ou seulement le paquet nonfree... j'ai réinstallé les deux et j'ai obtenu une bibliothèque opencv python qui fonctionne avec tous les modules non libres nécessaires!)

ok, elle est ici:

!c'est pour libopencv 2.4!

!vous peut faire toutes les étapes sauf installer comme un utilisateur normal!

nous avons besoin des essais construits et de quelques outils du dépôt debian pour compiler et créer un nouveau paquet:

sudo apt-get install build-essential fakeroot devscripts

créer un répertoire dans votre maison et changer à ce répertoire:

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

télécharger les paquets nécessaires:

apt-get source libopencv-core2.4

et télécharger tous les paquets de dépendances nécessaires pour construire la nouvelle opencv

apt-get build-dep libopencv-core2.4

cela permettra de télécharger les sources nécessaires et créez un répertoire appelé "opencv-2.4.9.1+dfsg"

changement de répertoire:

cd opencv-2.4.9.1+dfsg

maintenant vous pouvez tester si le paquet sera construit sans modifications en tapant:

fakeroot debian/rules binary

cela prendra beaucoup de temps! cette étape devrait se terminer sans erreurs vous avez maintenant beaucoup de .paquets deb dans votre répertoire opencv-debian

maintenant, nous apportons quelques modifications à la définition du paquet pour permettre à debian de compiler les modules non libres et package!

modifier le répertoire opencv-debian et télécharger la source opencv correcte.. dans mon cas opencv 2.4.9 environ!--20-->

j'ai eu le mien à partir de https://github.com/Itseez/opencv/releases

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

ceci téléchargera opencv-2.4.9.tar.gz

extraire l'archive:

tar -xzvf opencv-2.4.9.tar.gz

ceci déballera la source originale dans un répertoire appelé opencv-2.4.9

maintenant copier les modules non libres de source originale de la source debian:

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

ok, maintenant nous avons la source des modules non libres, mais ce n'est pas assez pour debian... nous devons modifier 1 fichier et en créer un nouveau

nous devons modifier le fichier de contrôle debian et d'ajouter une nouvelle section à la fin du fichier: (j'utilise mcedit comme éditeur ici)

mcedit opencv-2.4.9.1+dfsg/debian/control

ou utilisez un autre éditeur de votre choix

et ajouter cette section:

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.

maintenant nous créons un nouveau fichier appelé libopencv-nonfree2.4.installer

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

et modifier:

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

et ajoutez le contenu suivant:

usr/lib/*/libopencv_nonfree.so.*

ok, c'est ça, maintenant créer les paquets:

cd opencv-2.4.9.1+dfsg

d'abord un nettoyage:

fakeroot debian/rules clean

et construire:

fakeroot debian/rules binary

et le tour est joué... après un certain temps, vous avez une nouvelle place et un nouveau paquet libopencv-nonfree2.4.deb!

maintenant installez comme root:

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

et tester!

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()

amusez-vous!

8
répondu vizzy 2014-12-29 19:06:49

puisque j'avais déjà compilé opencv quand j'ai découvert ce problème, tout ce que j'avais à faire était de (de mon opencv répertoire de construction):

make opencv_nonfree
sudo make install
2
répondu nmz787 2014-10-20 01:39:16

jachère cette installation étape

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 ..

cette commande installera la bibliothèque dans votre fichier /usr/local/lib.

1
répondu madan ram 2014-02-24 01:59:38
  1. Install OpenCV-Contrib

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

  3. sift.something()

c'est la façon facile d'installer le Contrib.

1
répondu Xilpex 2018-10-03 22:43:35

l'approche proposée par vizzy fonctionne également avec OpenCV 2.4.8, comme lors de la construction du paquet non-free sous Ubuntu 14.04 LTS.

ce problème de dépendance peut empêcher l'installation du paquet non libre:

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

facilement réparable car le paquet manquant peut être installé à partir de ceux qui viennent d'être construits:

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

après cela l'installation se poursuit comme expliqué dans la réponse de vizzy.

0
répondu Joe Futrelle 2015-01-04 19:57:27