私のマシンに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を追加するとうまくいくようです。
/ buildディレクトリ全体を削除し、(-D BUILD_opencv_python3 = yesを使用して)cmakeを再度実行して、問題を修正しました。 cmakeからの何らかのキャッシュが原因でエラーが発生したと思うので、すべてを削除してやり直したところ、エラーは発生しませんでした。
上記の解決策は私にとってはうまくいきませんでした。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())")
この問題はcmake-guiの内部バグによって引き起こされたと思います。 OPENCV_PYTHON_VERSION変数はブール値と見なされますが、cmakeスクリプトはその変数を優先python versionのプレースホルダーと見なします。したがって、変数を削除し、優先値の初期値を持つ文字列データ型として手動で再追加しますpython version。例、3.7。Generateを押すと、cmakeはpython満たされたライブラリと変数を含むモジュールを受け入れます。ただし、必要な場合もう一度[生成]を押すには、OPENCV_PYTHON_VERSION変数を変更せずに自由に行います。挿入された優先値は維持され、内部的にキャッシュされますが、cmake GUIはブール値を返します。
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())") ..