web-dev-qa-db-fra.com

Impossible d'installer openCV 3.1.0 avec python3. CMAKE n'incluant pas ou ne liant pas correctement python

J'essaie d'installer OpenCV 3.1.0 avec Python3 sur ma machine. Parce que j'ai Ubuntu 16.04, je suis ce guide exactement:

http://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/

Cependant, j'ai des problèmes à l'étape 4, après avoir exécuté cmake. La sortie de mon programme cmake a cet extrait:

--   OpenCL:
--     Version:                     dynamic
--     Include path:                /home/kevin/opencv-3.1.0/3rdparty/include/opencl/1.2
--     Use AMDFFT:                  NO
--     Use AMDBLAS:                 NO
-- 
--   Python 2:
--     Interpreter:                 /home/kevin/.virtualenvs/cv/bin/python (ver 3.5.2)
-- 
--   Python 3:
--     Interpreter:                 /home/kevin/.virtualenvs/cv/bin/python3 (ver 3.5.2)
-- 
--   Python (for build):            /home/kevin/.virtualenvs/cv/bin/python
-- 
--   Java:
--     ant:                         NO
--     JNI:                         /usr/lib/jvm/Java-8-Oracle/include /usr/lib/jvm/Java-8-Oracle/include/linux /usr/lib/jvm/Java-8-Oracle/include
--     Java wrappers:               NO
--     Java tests:                  NO

Le fichier cmake ne semble pas relier correctement les propriétés manquantes dans la section python (bibliothèques, numpy, packages_path). J'ai essayé de compiler et d'installer opencv, et lorsque je charge python3 et que j'importe de cv, il indique qu'il n'a pas pu trouver le paquet cv.

J'ai essayé de modifier la commande CMAKE, alors au lieu d'utiliser ce que le guide suggérait, j'ai ajouté trois paramètres pour forcer cmake à inclure les propriétés de python manquantes (les trois dernières propriétés étaient ma modification):

cmake -D CMAKE_BUILD_TYPE=RELEASE     \
-D CMAKE_INSTALL_PREFIX=/usr/local     \
-D INSTALL_PYTHON_EXAMPLES=ON     \
-D INSTALL_C_EXAMPLES=OFF     \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.1.0/modules     \
-D PYTHON_EXECUTABLE=~/.virtualenvs/cv/bin/python     \
-D BUILD_EXAMPLES=ON    \
-D PYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.5m.so    \
-D PYTHON_NUMPY_INCLUDE_DIR=~/.virtualenvs/cv/lib/python3.5/site-packages/numpy/core/include    \
-D PYTHON_PACKAGES_PATH=~/.virtualenvs/cv/lib/python3.5/site-packes ..

Mais toujours, la sortie de cmake est la même (elle ne répertorie que l'interpréteur, et aucune autre propriété python), et lorsque j'essaie de créer et d'installer opencv, mon interpréteur python n'a pas pu trouver le paquet opencv.

Mon fichier /usr/local/lib/python3.5/ ne contenait PAS de répertoire site-packages après avoir terminé l'installation d'OpenCV.

Est-ce que quelqu'un peut-il me montrer la bonne direction? J'ai essayé de chercher une solution à ce problème au cours des dernières heures, mais je n'ai pas trouvé de solution, mais j'apprécierais énormément toute orientation. Je vous remercie!

Mise à jour

Je réalise que je dois ajouter -D BUILD_opencv_python3 = yes à la commande cmake afin qu'opencv recherche les bibliothèques python. Cependant, voici la nouvelle sortie que je reçois de cmake:

--   Python 3:
--     Interpreter:                 /home/kevin/.virtualenvs/cv/bin/python (ver 3.5.2)
--     Libraries:                   NO
--     numpy:                       NO (Python3 wrappers can not be generated)
--     packages path:               lib/python3.5/site-packages

Vous ne savez pas pourquoi cmake ne trouve pas correctement mes bibliothèques python 3 (même si j’ajoute "-D PYTHON_LIBRARY =/usr/lib/x86_64-linux-gnu/libpython3.5m.so" aux options de cmake)?

Mise à jour

J'ai résolu le problème en supprimant tout le répertoire/build et en exécutant cmake sur un nouveau répertoire. Je pense que l'erreur a continué à apparaître à cause de la mise en cache effectuée par cmake, mais l'ajout du drapeau -D BUILD_opencv_python3 = yes semble faire l'affaire pour moi.

7
user3667125

J'ai résolu mon problème en supprimant tout le répertoire/build et en exécutant à nouveau cmake (avec -D BUILD_opencv_python3 = yes). Je pense que cela a donné une erreur à cause d'une sorte de cache de cmake, donc quand j'ai tout supprimé et tout recommencé, l'erreur a disparu.

14
user3667125

Je crois que le problème est soulevé par un bug interne de cmake-gui; La variable OPENCV_PYTHON_VERSION est considérée comme étant une valeur booléenne, tandis que les scripts cmake considèrent la variable comme un espace réservé pour votre version python préférée. Ainsi, supprimez la variable et rajoutez-la manuellement en tant que type de données chaîne avec une valeur initiale de votre version python préférée. par exemple, 3.7. Une fois que vous avez appuyé sur Generate, cmake acceptera le module python avec vos bibliothèques remplies et les variables incluses. Toutefois, si vous devez appuyer à nouveau sur Generate, faites-le librement, sans modifier la variable OPENCV_PYTHON_VERSION, car l'interface gcmake le retournera à nouveau sous forme de valeur booléenne, tandis que la valeur préférée insérée sera conservée et mise en cache en interne.

1
Husam

Les solutions ci-dessus ne fonctionnaient pas pour moi, je devais spécifier un tas d'options pour que cmake reconnaisse python3. Cela a fait le tour:

cmake {...} -D CMAKE_BUILD_TYPE=RELEASE \
  -D CMAKE_INSTALL_PREFIX=/usr/local \
  -D INSTALL_C_EXAMPLES=OFF \
  -D INSTALL_PYTHON_EXAMPLES=ON \
  -D BUILD_EXAMPLES=ON \
  -D PYTHON3_EXECUTABLE=$(which python3) \
  -D PYTHON_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
  -D PYTHON_INCLUDE_DIR2=$(python3 -c "from os.path import dirname; from distutils.sysconfig import get_config_h_filename; print(dirname(get_config_h_filename()))") \
  -D PYTHON_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))") \
  -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
  -D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") 
0
Victor Henriquez