2016-02-11 1 views
0

Donc mon cas est un cas délicat.Python cv2 problèmes de liaison tout en rétrogradant OpenCV de 3.0.0 à 2.4.11

J'ai d'abord installé OpenCV2.4.8 et l'ai démarré avec python2.7. Plus tard, j'ai prévu de migrer vers OpenCV3.0.0. Les deux fois pendant l'installation j'ai suivi la procédure de documentation officielle. Tout fonctionnait bien jusqu'à ce que je réalise que OpenCV3 n'a pas de modules SIFT() et SURF(). Après un peu de recherche, j'ai trouvé qu'ils sont présents dans opencv_contrib. J'ai d'abord essayé d'installer ça mais pour une raison quelconque je ne pouvais pas.

Plus tard, j'ai trouvé que ces modules sont présents dans OpenCV2.4.11 et ont prévu d'installer cela. Encore une fois en suivant la procédure officielle, j'ai installé OpenCV2.4.11 a obtenu le même SIFT() importerror. Lors de la vérification de la OpenCV __version__ dans python2 et python3 j'ai trouvé le

suivant
  • python2: "2.4.8"
  • python3: "3.0.0"

Pour vérifier la version je les suivantes Code:

from cv2 import __version__ 
print(__version__) 

Malheureusement je n'ai pas beaucoup de mémoire dans /home, donc j'avais supprimé construire OpenCV2.4.8 et OpenCV3.0.0 dossiers après l'installation. Par conséquent, j'ai essayé de supprimer manuellement OpenCV2.4.8 et OpenCV3.0.0 et supprimé toutes les libs opencv de /usr/local/libs/ et sous-répertoires et tous les bacs opencv de /usr/local/bins/ (suite à la réponse dans ce question). Après la suppression de tous les fichiers opencv, j'ai de nouveau réinstallé OpenCV2.4.11 et essayé d'exécuter mon code. Il a échoué à l'étape d'importation python2 donnant

>>> import cv2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory 

dans python3

>>> import cv2 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: libopencv_core.so.3.0: cannot open shared object file: No such file or directory 

J'ai vérifié à nouveau si OpenCV2.4.11 est présent ou non et son là, mais le python n'a pas encore actualisé le lien précédemment enregistré à opencv lib. Je suis coincé à cette erreur depuis 2 jours sans solution. Toute aide serait appréciée.

EDIT: est-il un fichier de recherche de bibliothèque qui utilise python pour stocker tous les emplacements des bibliothèques partagées? Sinon, comment cela fonctionne (comment python reconnaît où chercher OpenCV comme OpenCV ne figure pas dans pip freeze)

EDIT2: J'ai trouvé une autre erreur. Je n'avais pas activé -D BUILD_SHARED_LIBS=ON auparavant. Cette fois, je l'ai gardé ON et rand sudo ldconfig après make et make install. Maintenant, j'ai un libopencv_core.so.2.4 dans mon /usr/local/lib/. C'est un lien symbolique vers libopencv_core.so.2.4.11 présent dans le même dossier. Après ldconfig lorsque j'ai vérifié pour python2 import cv2 n'a pas montré d'erreur, mais __version__ montre encore '2.4.8'. J'ai vérifié deux fois pour n'importe quel fichier OpenCV2.4.8 .so et il n'y en a aucun. Comment est-ce qu'il pointe toujours vers la version '2.4.8'?

Répondre

1

étapes pour l'enlèvement:

  1. supprimer libs OpenCV par: sudo apt-get purge libopencv*
  2. Vérifiez que si CV2 est désinstallée en essayant import cv2 en python. Elle doit montrer aucun module CV2 présente
  3. Installer opencv2.4.11 en suivant this sh file
  4. Run sudo ldconfig après sudo make install
  5. Les choses devraient généralement travailler mais il ne fonctionne pas dans mon cas parce que cv2.so était absent de /usr/local/lib/python2.7/dist-packages/. Pour cela, copiez manuellement de /<opencv-2.4.11 unzip locaiton>/release/lib/cv2.so à /usr/local/lib/python2.7/dist-packages/. Utilisez sudo pour les autorisations.

Maintenant, import cv2 fonctionnera et __version__ est '2.4.11'.