J'essaye une chose simple comme
detector = cv2.SIFT()
et obtenez cette mauvaise erreur
detector = cv2.SIFT()
AttributeError: 'module' object has no attribute 'SIFT'
Je ne comprends pas cela parce que CV2 est installé.
cv2.__version__
Est
$Rev: 4557 $
Mon système est Ubuntu 12.04.
Peut-être que quelqu'un a le même problème et pourrait m'aider.
EDIT:
Histoire longue, 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 SURF
est dans dir(cv2)
mais si je prends aussi cv2.BFMatcher()
, je reçois la même erreur ... Donc, il manque et je dois l'ajouter mais je ne sais pas comment.
Je pense que c'est loin d'être le "bon" moyen de le faire (le "bon" moyen sous Ubuntu semble être de s'en tenir à un OpenCV cassé et/ou obsolète), mais pour moi, construire l'opencv-2.4.6.1 à partir de la source nous ramène cv2.SIFT et cv2.SURF.
Pas:
Extraire la source:
tar -xf opencv-2.4.6.1.tar.gz -C /tmp
Configurez la source. Cela indiquera à OpenCV de s’installer dans .opencv-2.4.6.1 dans votre répertoire personnel:
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
Construire et installer:
cd /tmp/opencv-2.4.6.1
make -j4
make install
Réglez PYTHONPATH (cela fonctionne à bash, je n'ai aucune idée sur les autres coquilles):
export PYTHONPATH=~/.opencv-2.4.6.1/lib/python2.7/dist-packages
Maintenant, si je lance python et importe cv2 (pour moi, cela génère un avertissement gnome-keyring)), j’ai cv2.SIFT et cv2.SURF disponibles.
Pour des informations récentes sur ce sujet (à compter de septembre 2015), consultez cette page .
La plupart des informations sur cette question ici sont obsolètes.
Ce que pyimagesearch dit, c'est que SURF/SIFT ont été déplacés vers opencv_contrib
à cause de problèmes de brevets.
Pour l’installation, il y a aussi un Belle page qui vous explique comment installer opencv avec opencv_contrib
and Python supporte donc l’utilisation de SURF/SIFT.
Notez que l'API a également changé. Maintenant c'est comme ça:
sift = cv2.xfeatures2d.SIFT_create()
Avant de trouver les pages ci-dessus, j'ai également beaucoup souffert. Mais les pages répertoriées font un très bon travail d’aide à l’installation et expliquent ce qui ne va pas.
Il existe une source pip qui rend cela très facile.
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
Puis installez la version contrib avec ceci:
pip install opencv-contrib-python
Utilisation SIFT:
import cv2
sift = cv2.xfeatures2d.SIFT_create()
Pour info, à compter de la version 3.0.0, EIFT et ses amis sont dans un dépôt de contribution situé à l’adresse https://github.com/Itseez/opencv_contrib et ne sont pas inclus avec opencv par défaut.
pour les utilisateurs de debian, il est "facile" de créer leur propre paquet libopencv-nonfree.
j'ai suivi le tutoriel d'openv pour python, mais dans ma version debian, les modules SIFT et SURF étaient manquants. 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 colis en raison de problèmes de licence ...
je n'avais jamais créé de paquet pour Debian auparavant (ajout d'un nouveau module, etc.), mais j'ai suivi quelques étapes dans les tutoriels Debian et j'ai essayé et deviné un peu, et après 1 jour, voila ... j'ai eu à travailler avec libopencv-nonfree2. 4 paquet deb et un module python avec les liaisons correctes).
(Je ne sais pas si j'ai aussi besoin d'installer le paquet python-opencv nouvellement construit ou seulement le fichier non-libre ... J'ai réinstallé les deux et j'ai obtenu une python opencv avec tous les modules non-libres nécessaires !)
ok, le voici:
! Ceci est pour libopencv 2.4!
! vous pouvez faire toutes les étapes sauf l'installation en tant qu'utilisateur normal!
nous avons besoin des essesntials construits et de certains outils du référentiel Debian pour compiler et créer un nouveau paquet:
Sudo apt-get install build-essential fakeroot devscripts
créez un répertoire dans votre maison et accédez à ce répertoire:
cd ~ && mkdir opencv-debian
cd opencv-debian
télécharger les packages nécessaires:
apt-get source libopencv-core2.4
et téléchargez tous les paquets de dépendance nécessaires pour construire le nouvel opencv
apt-get build-dep libopencv-core2.4
cela téléchargera les sources nécessaires et créera un répertoire appelé "opencv-2.4.9.1 + dfsg"
passer à ce répertoire:
cd opencv-2.4.9.1+dfsg
vous pouvez maintenant 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 erreur, 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 et le paquet non-libres!
allez dans le répertoire opencv-debian et téléchargez le bon code source opencv .. dans mon cas, opencv 2.4.9 ou plus
j'ai eu le mien de https://github.com/Itseez/opencv/releases
wget https://codeload.github.com/Itseez/opencv/tar.gz/2.4.9
cela téléchargera opencv-2.4.9.tar.gz
extraire l'archive:
tar -xzvf opencv-2.4.9.tar.gz
cela décompactera la source originale dans un répertoire appelé opencv-2.4.9
maintenant, copiez les modules non libres de la source originale vers 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 suffisant pour debian ... nous devons modifier 1 fichier et en créer un nouveau
nous devons éditer le fichier de contrôle debian et 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 ajoutez 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.install
touch opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install
et éditer:
mcedit opencv-2.4.9.1+dfsg/debian/libopencv-nonfree2.4.install
et ajoutez le contenu suivant:
usr/lib/*/libopencv_nonfree.so.*
ok, ça y est, créez à nouveau les packages:
cd opencv-2.4.9.1+dfsg
d'abord un nettoyage:
fakeroot debian/rules clean
et construire:
fakeroot debian/rules binary
et voila ... après un moment, vous avez un nouveau paquet et un nouveau paquet libopencv-nonfree2.4.deb!
installez maintenant en tant que root:
dpkg -i libopencv-nonfree2.4.deb
dpkg -i python-opencv.deb
et testez!
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()
s'amuser!
comme j'avais déjà compilé OpenCV quand j'ai découvert ce problème, tout ce que je devais faire était (à partir de mon répertoire de construction OpenCTV):
make opencv_nonfree
Sudo make install
En tant qu'utilisateur Anaconda, je voulais trouver une ou deux commandes appropriées pour résoudre le problème. Heureusement, ceci réponse a aidé. Pour la version 4.5.11 (utilisez conda -V
pour vérifier la version d'Anaconda) J'ai effectué les étapes suivantes:
# Python version does not matter, most likely, check yourself
conda create -n myenv python=3.6
conda activate myenv
conda install -c menpo opencv
Cela installera OpenCV 2.4.11. Anaconda est un autre commandeconda install -c menpo opencv3
installera OpenCV3, mais Python doit être rétrogradé à la version 2.7. Pour installer OpenCV3 avec Python3, utilisez ensuite (en raison du premier lien):
conda create -n myenv python
pip install opencv-python==3.4.2.16
pip install opencv-contrib-python==3.4.2.16
Vérifiez l'EIFT:
conda activate myenv
python
>>> cv2.xfeatures2d.SIFT_create()
<xfeatures2d_SIFT 000002A3478655B0>
Installer OpenCV-Contrib
import cv2 sift = cv2.xfeatures2d.SIFT_create()
sift.something()
C'est le moyen facile d'installer Contrib.
suivre cette étape d'installation
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 ..
utiliser cette commande installera la librairie sur votre/usr/local/lib.
Dans opencv3.x, SIFT () et SURF () n’existent plus.
désinstaller toutes les versions d'opencv
python -m pip uninstall opencv-python
python -m pip uninstall opencv-contrib-python
après cela, installez opencv-contrib pour inclure sift () et surf () en utilisant la commande ci-dessous avec python (3.x)
python -m pip install opencv-contrib-python==3.4.2.16
alors vous pouvez utiliser
sift = cv2.xfeatures2d.SIFT_create()
L'approche suggérée par vizzy fonctionne également avec OpenCV 2.4.8, comme lors de la construction du paquet non libre 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
Ensuite, l’installation se déroule comme expliqué dans la réponse de vizzy.
Il suffit de changer la version d’opencv en 3.4.2.16. S’il est breveté, il n’est pas disponible dans la nouvelle version.
Aucune des solutions suggérées ci-dessus n'a fonctionné pour moi. J'utilise Anaconda et j'ai constaté que Sift était toujours activé dans la version 3.3.1. Si vous voulez tester dans un environnement isolé, essayez ce qui suit, inspiré de la réponse de @ A.Ametov ci-dessus.
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>
Changer ceci:
sift = cv2.xfeatures2d.SIFT_create()
Par ceci:
cv2.ORB_create()