web-dev-qa-db-ja.com

python3ではopenCV 3.1.0をインストールできません。 CMAKEが含まれていない、またはリンクしていないpython正しく

私のマシンにPython3とともにOpenCV 3.1.0をインストールしようとしています。私はUbuntu 16.04を持っているので、このガイドに正確に従っています:

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

ただし、cmakeを実行した後、ステップ4で問題が発生します。私のcmakeプログラムの出力には次のスニペットがあります。

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

Cmakeファイルは、不足しているプロパティをpythonセクション(ライブラリ、numpy、packages_path)に正しくリンクしていないようです。opencvをコンパイルしてインストールしようとしました。python3をロードしてcvをインポートすると、それはcvパッケージを見つけることができなかったと言います。

CMAKEコマンドを変更しようとしたので、ガイドが提案したものを使用する代わりに、3つのパラメーターを追加して、cmakeに欠落しているpythonプロパティを含めるように強制しました(最後の3つのプロパティは私の変更でした)。

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

しかし、それでもcmakeの出力は同じです(インタープリッターのみが表示され、他のpythonプロパティ)は表示されません)。opencvをビルドしてインストールしようとすると、my python interpretterはopencvパッケージを見つけることができませんでした。

私の/usr/local/lib/python3.5/ファイルにも、opencvのインストールが完了した後、site-packagesディレクトリがありませんでした。

誰かが私を正しい方向に向けることができますか?これを修正する方法について過去数時間検索してみましたが、これまでの方法が見つからなかったので、ガイダンスをいただければ幸いです。ありがとうございました!

更新

Opencvがpythonライブラリを検索するように、-D BUILD_opencv_python3 = yesをcmakeコマンドに追加する必要があることを理解しています。ただし、これは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

Cmakeが私のpython 3ライブラリを正しく検出しない理由)( "-D PYTHON_LIBRARY =/usr/lib/x86_64-linux-gnu/libpython3.5m.so"をcmakeオプション)?

更新

/ buildディレクトリ全体を削除し、新しいディレクトリでcmakeを実行して問題を修正しました。 cmakeによるキャッシュが原因でエラーが引き続き表示されると思いますが、フラグ-D BUILD_opencv_python3 = yesを追加するとうまくいくようです。

11
user3667125

/ buildディレクトリ全体を削除し、(-D BUILD_opencv_python3 = yesを使用して)cmakeを再度実行して、問題を修正しました。 cmakeからの何らかのキャッシュが原因でエラーが発生したと思うので、すべてを削除してやり直したところ、エラーは発生しませんでした。

19
user3667125

上記の解決策は私にとってはうまくいきませんでした。cmakeにpython3を認識させるには、たくさんのオプションを指定する必要がありました。これはトリックをしました:

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

この問題はcmake-guiの内部バグによって引き起こされたと思います。 OPENCV_PYTHON_VERSION変数はブール値と見なされますが、cmakeスクリプトはその変数を優先python versionのプレースホルダーと見なします。したがって、変数を削除し、優先値の初期値を持つ文字列データ型として手動で再追加しますpython version。例、3.7。Generateを押すと、cmakeはpython満たされたライブラリと変数を含むモジュールを受け入れます。ただし、必要な場合もう一度[生成]を押すには、OPENCV_PYTHON_VERSION変数を変更せずに自由に行います。挿入された優先値は維持され、内部的にキャッシュされますが、cmake GUIはブール値を返します。

1
Husam

cmake output ou CmakeVarsを有効にして、python2またはpython3が利用できないかどうかを確認できます(探してください)。

これが当てはまる場合、cmakeを再度実行しても問題はありません。ビルドフォルダーからCMakeCache.txtおよび.cmakeファイルをクリアしない限り、残りを残してすべてを再度コンパイルしないでください。

Dockerの内側を使用しているので、他のいくつかを無効にしましたが、必要に応じて変数を調整したい場合はこれを使用できます

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D WITH_OPENCL=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.2/modules -D WITH_LIBV4L=OFF -D WITH_V4L=OFF -D INSTALL_C_EXAMPLES=OFF -D WITH_DC1394=OFF -D ENABLE_NEON=OFF -D OPENCV_ENABLE_NONFREE=ON  -D WITH_PROTOBUF=OFF -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_OPENCV_PYTHON3=yes  -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
fsan