69 votes

sift = cv2.xfeatures2d.SIFT_create() ne fonctionne pas même si contrib est installé

J'essaie donc d'utiliser :

sift = cv2.xfeatures2d.SIFT_create()

et l'erreur suivante s'est produite :

cv2.error: OpenCV(3.4.3) C:\projects\opencv-python\opencv_contrib\modules\xfeatures2d\src\sift.cpp:1207: error: (-213:The function/feature is not implemented) 
This algorithm is patented and is excluded in this configuration; Set OPENCV_ENABLE_NONFREE CMake 
option and rebuild the library in function 'cv::xfeatures2d::SIFT::create'

J'utilise Python 3.5.0 et opencv(3.4.3) et je n'utilise que le ralenti. Cela s'est produit après que j'ai essayé d'installer TensorFlow et j'ai essayé de chercher autour de moi et j'ai installé opencv-contrib-python mais je reçois toujours la même erreur. Merci d'avance et je m'excuse si je n'ai pas fourni assez d'informations.

150voto

J.Zhao Points 721

J'ai eu le même problème. Il semble que SIRF et SURF sont n'est plus disponible dans opencv > 3.4.2.16 . J'ai choisi une version plus ancienne de opencv-python et opencv-contrib-python et j'ai résolu ce problème. Voici le version historique sur opencv-python, et j'utilise le code suivant :

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

Modifier

Pour l'utilisateur d'Anaconda, il suffit de faire ceci à la place de pip

conda install -c menpo opencv

ceci installera cv2 3.4.1 et tout ce dont vous avez besoin pour exécuter SIFT.

bonne chance~

3 votes

Cela ne fonctionne pas avec Python 3.7. J'ai essayé avec la version 3.4.2.16, et j'obtiens l'erreur DLL not found. La base OpenCV fonctionne avec la version 3.4.5.20.

0 votes

@NithishV avez-vous trouvé une solution pour cela ? J'utilise la v3.7 et j'ai ce problème.

2 votes

@DragonKnight, je suis capable de le faire fonctionner avec opencv-contrib-python version 3.4.5.20 seulement. Installez-le en utilisant "pip install opencv-contrib-python==3.4.5.20".

12voto

I.R. Points 396

Edit : Le opencv-contrib-python-nonfree a été supprimé de pypi.

Sur Linux/ MacOS J'ai trouvé une meilleure solution ! Pour accéder aux détecteurs non-gratuits, utilisez : pip install opencv-contrib-python-nonfree

4 votes

Impossible de trouver une version qui satisfait à l'exigence opencv-contrib-python-nonfree (from versions : ) Aucune distribution correspondante n'a été trouvée pour opencv-contrib-python-nonfree

0 votes

@Gulzar, j'ai eu ce problème aussi. Les raisons possibles sont : 1. Votre système d'exploitation est Windows ; 2. Vous utilisez Python 3.8. D'après cette page : pypi.org/projet/opencv-contrib-python-nonfree Le support de Windows est annulé et python 3.8 n'est pas supporté (peut-être pas encore). Je n'ai pas trouvé de solution à ce problème, mais sur mes autres ordinateurs (Linux et MacOS), tout va bien.

0 votes

@I.R. Quelle version de Python utilisez-vous ?

6voto

Ben Points 51

Cela peut être dû à un décalage entre la version d'opencv et la version d'opencv-contrib. Si vous avez installé opencv à partir des sources en utilisant CMake, et que la version des sources est différente de la version de opencv-contrib-python, désinstallez la version actuelle de opencv-contrib-python et faites pip install opencv-contrib-python==<version of the source>.X ou une autre version compatible. Une configuration de version que j'ai en cours d'exécution est opencv source (3.2), opencv-python (3.4.0.14) et opencv-contrib-python (3.4.2.17).

0 votes

La demande d'informations doit être faite dans la section des commentaires de la question. Vous pouvez modifier votre réponse et ne laisser que la solution de contournement.

0 votes

Merci pour le commentaire. Ma version d'opencv-python et d'opencv-contrib-python est 3.4.3.18. Je suppose qu'elles sont compatibles ?

0 votes

Je suppose que vous les avez installés avec pip install . Avez-vous fait une autre installation d'opencv, plus précisément avez-vous également installé opencv à partir des sources ? Si oui, quelle est la version des sources ? J'ai installé la même version de opencv-python, opencv-contrib-python comme vous mais avec mon installation source 3.2 et j'obtiens le même message d'erreur. Je dirais qu'un hack facile et paresseux serait de désinstaller opencv-python et opencv-contrib-python et de réinstaller avec les mêmes versions que moi et de faire un essai.

5voto

Abhi Points 21

Le brevet de SIFT ayant expiré, SIFT a été déplacé vers le dépôt principal. Pour utiliser SIFT dans Opencv, vous devez utiliser cv2.SIFT_create() au lieu de cv2.xfeatures2d.SIFT_create() maintenant. (xfeatures2d n'existe que dans le paquet contrib, mais sift fait partie du paquet principal maintenant).

Le lien ci-dessous vous sera utile. https://github.com/opencv/opencv/issues/16736

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X