Docker opencv3 Cmake错误

我试图用docker构build一个启用了ffmpeg的Python3 + OpenCV3环境。

由于我也想用GPU来加速模型,所以我使用了NVIDIA的docker镜像。

这是我的Dockerfile:

FROM nvidia/cuda:8.0-cudnn5-devel ... ... ############################################# # OpenCV 3 w/ Python 2.7 from Anaconda ############################################# RUN cd ~/ &&\ git clone https://github.com/opencv/opencv.git &&\ git clone https://github.com/opencv/opencv_contrib.git &&\ cd opencv && mkdir build && cd build && \ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/opt/opencv \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D BUILD_EXAMPLES=ON \ -D PYTHON_DEFAULT_EXECUTABLE=/opt/conda/bin/python2.7 BUILD_opencv_python2=True \ -D PYTHON_LIBRARY=/opt/conda/lib/libpython2.7.so \ -D PYTHON_INCLUDE_DIR=/opt/conda/include/python2.7 \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/opt/conda/lib/python2.7/site-packages/numpy/core/include \ -D PYTHON_EXECUTABLE=/opt/conda/bin/python2.7 -DWITH_FFMPEG=ON \ -D BUILD_SHARED_LIBS=ON .. &&\ make -j4 && make install && ldconfig ENV PYTHONPATH /opt/opencv/lib/python2.7/site-packages:$PYTHONPATH 

然后,我发现它终于有一个错误,似乎无法findpathCUDA_CUDA_LIBRARY ,因为那些部分configuration在图像nvidia/cuda:8.0-cudnn5-devel ,我该如何处理这个错误?

这是错误信息:

 CMake Error: The following variables are used in this project, but they are set to NOTFOUND. Please set them or make sure they are set and tested correctly in the CMake files: CUDA_CUDA_LIBRARY (ADVANCED) linked by target "example_gpu_stereo_match" in directory /root/opencv/samples/gpu linked by target "example_gpu_bgfg_segm" in directory /root/opencv/samples/gpu linked by target "example_gpu_morphology" in directory /root/opencv/samples/gpu linked by target "example_gpu_pyrlk_optical_flow" in directory /root/opencv/samples/gpu linked by target "example_gpu_video_reader" in directory /root/opencv/samples/gpu linked by target "example_gpu_surf_keypoint_matcher" in directory /root/opencv/samples/gpu linked by target "example_gpu_farneback_optical_flow" in directory /root/opencv/samples/gpu linked by target "example_gpu_hog" in directory /root/opencv/samples/gpu linked by target "example_gpu_optical_flow" in directory /root/opencv/samples/gpu linked by target "example_gpu_houghlines" in directory /root/opencv/samples/gpu linked by target "example_gpu_driver_api_stereo_multi" in directory /root/opencv/samples/gpu linked by target "example_gpu_cascadeclassifier" in directory /root/opencv/samples/gpu linked by target "example_gpu_super_resolution" in directory /root/opencv/samples/gpu linked by target "example_gpu_generalized_hough" in directory /root/opencv/samples/gpu linked by target "example_gpu_driver_api_multi" in directory /root/opencv/samples/gpu linked by target "example_gpu_opticalflow_nvidia_api" in directory /root/opencv/samples/gpu linked by target "example_gpu_stereo_multi" in directory /root/opencv/samples/gpu linked by target "example_gpu_video_writer" in directory /root/opencv/samples/gpu linked by target "example_gpu_multi" in directory /root/opencv/samples/gpu linked by target "example_gpu_cascadeclassifier_nvidia_api" in directory /root/opencv/samples/gpu linked by target "example_gpu_alpha_comp" in directory /root/opencv/samples/gpu -- Configuring incomplete, errors occurred! 

上传整个Dockerfile

 FROM nvidia/cuda:8.0-cudnn5-devel MAINTAINER jiandong <jjdblast@gmail.com> ARG THEANO_VERSION=rel-0.8.2 ARG TENSORFLOW_VERSION=0.8.0 ARG TENSORFLOW_ARCH=gpu ARG KERAS_VERSION=1.0.3 #RUN echo -e "\n**********************\nNVIDIA Driver Version\n**********************\n" && \ # cat /proc/driver/nvidia/version && \ # echo -e "\n**********************\nCUDA Version\n**********************\n" && \ # nvcc -V && \ # echo -e "\n\nBuilding your Deep Learning Docker Image...\n" # Necessary packages and FFmpeg RUN apt-get update && apt-get install -y \ apt-utils \ autoconf \ automake \ bc \ bzip2 \ build-essential \ ca-certificates \ cmake \ curl \ ffmpeg \ g++ \ gfortran \ git \ libass-dev \ libatlas-base-dev \ libavcodec-dev \ libavformat-dev \ libavresample-dev \ libav-tools \ libdc1394-22-dev \ libffi-dev \ libfreetype6-dev \ libglib2.0-0 \ libhdf5-dev \ libjasper-dev \ libjpeg-dev \ liblapack-dev \ liblcms2-dev \ libopenblas-dev \ libopencv-dev \ libopenjpeg5 \ libpng12-dev \ libsdl1.2-dev \ libsm6 \ libssl-dev \ libtheora-dev \ libtiff5-dev \ libtool \ libva-dev \ libvdpau-dev \ libvorbis-dev \ libvtk6-dev \ libwebp-dev \ libxcb1-dev \ libxcb-shm0-dev \ libxcb-xfixes0-dev \ libxext6 \ libxrender1 \ libzmq3-dev \ nano \ pkg-config \ python-dev \ python-pycurl \ software-properties-common \ texinfo \ unzip \ vim \ webp \ wget \ zlib1g-dev \ && \ apt-get clean && \ apt-get autoremove && \ rm -rf /var/lib/apt/lists/* && \ # Link BLAS library to use OpenBLAS using the alternatives mechanism (https://www.scipy.org/scipylib/building/linux.html#debian-ubuntu) update-alternatives --set libblas.so.3 /usr/lib/openblas-base/libblas.so.3 # Install pip RUN curl -O https://bootstrap.pypa.io/get-pip.py && \ python get-pip.py && \ rm get-pip.py # Add SNI support to Python RUN pip --no-cache-dir install \ pyopenssl \ ndg-httpsclient \ pyasn1 ############################################# # Anaconda Python 2.7 ############################################# # RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \ # wget https://repo.continuum.io/archive/Anaconda2-4.2.0-Linux-x86_64.sh -O ~/anaconda.sh && \ # /bin/bash ~/anaconda.sh -b -p /opt/conda && \ # rm ~/anaconda.sh ADD Anaconda2-4.2.0-Linux-x86_64.sh /root/anaconda.sh RUN echo 'export PATH=/opt/conda/bin:$PATH' > /etc/profile.d/conda.sh && \ /bin/bash /root/anaconda.sh -b -p /opt/conda && \ rm /root/anaconda.sh ENV PATH /opt/conda/bin:$PATH RUN conda update -y conda && \ conda update -y numpy && \ conda update -y scipy && \ conda update -y pandas && \ conda update -y matplotlib && \ conda update -y requests && \ conda install -c conda-forge pika=0.10.0 && \ conda install scikit-image && \ pip install --upgrade pip && \ pip install --upgrade git+git://github.com/Theano/Theano.git && \ pip install pyscenedetect --upgrade --no-dependencies # Configuration file for theano RUN echo -e "[global]\nfloatX = float32\ndevice = cpu\nopenmp = True" >> ~/.theanorc ############################################# # OpenCV 3 w/ Python 2.7 from Anaconda ############################################# RUN cd ~/ &&\ git clone https://github.com/opencv/opencv.git &&\ git clone https://github.com/opencv/opencv_contrib.git &&\ cd opencv && mkdir build && cd build && \ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so \ -D CMAKE_INSTALL_PREFIX=/opt/opencv \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ -D BUILD_EXAMPLES=ON \ -D PYTHON_DEFAULT_EXECUTABLE=/opt/conda/bin/python2.7 BUILD_opencv_python2=True \ -D PYTHON_LIBRARY=/opt/conda/lib/libpython2.7.so \ -D PYTHON_INCLUDE_DIR=/opt/conda/include/python2.7 \ -D PYTHON2_NUMPY_INCLUDE_DIRS=/opt/conda/lib/python2.7/site-packages/numpy/core/include \ -D PYTHON_EXECUTABLE=/opt/conda/bin/python2.7 -DWITH_FFMPEG=ON \ -D BUILD_SHARED_LIBS=ON .. &&\ make -j4 && make install && ldconfig ENV PYTHONPATH /opt/opencv/lib/python2.7/site-packages:$PYTHONPATH # Jupyter python -m ipykernel.kernelspec # Install TensorFlow RUN pip --no-cache-dir install \ https://storage.googleapis.com/tensorflow/linux/${TENSORFLOW_ARCH}/tensorflow-${TENSORFLOW_VERSION}-cp27-none-linux_x86_64.whl # Install Theano and set up Theano config (.theanorc) for CUDA and OpenBLAS RUN pip --no-cache-dir install git+git://github.com/Theano/Theano.git@${THEANO_VERSION} && \ \ echo "[global]\ndevice=gpu\nfloatX=float32\noptimizer_including=cudnn\nmode=FAST_RUN \ \n[lib]\ncnmem=0.95 \ \n[nvcc]\nfastmath=True \ \n[blas]\nldflag = -L/usr/lib/openblas-base -lopenblas \ \n[DebugMode]\ncheck_finite=1" \ > /root/.theanorc # Install Keras RUN pip --no-cache-dir install git+git://github.com/fchollet/keras.git@${KERAS_VERSION} # Set up notebook config COPY jupyter_notebook_config.py /root/.jupyter/ # Jupyter has issues with being run directly: https://github.com/ipython/ipython/issues/7062 COPY run_jupyter.sh /root/ # Expose Ports for TensorBoard (6006), Ipython (8888) EXPOSE 6006 8888 WORKDIR "/root" CMD ["/bin/bash"] 

更新

尝试在我的Dockerfile cmake命令中添加-D CUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so后,出现此错误:

 [ 15%] Linking CXX static library ../../lib/libopencv_perf_stereo_pch_dephelp.a /usr/bin/cmake: error while loading shared libraries: libkrb5.so.3: failed to map segment from shared object modules/stereo/CMakeFiles/opencv_perf_stereo_pch_dephelp.dir/build.make:94: recipe for target 'lib/libopencv_perf_stereo_pch_dephelp.a' failed make[2]: *** [lib/libopencv_perf_stereo_pch_dephelp.a] Error 127 CMakeFiles/Makefile2:19133: recipe for target 'modules/stereo/CMakeFiles/opencv_perf_stereo_pch_dephelp.dir/all' failed make[1]: *** [modules/stereo/CMakeFiles/opencv_perf_stereo_pch_dephelp.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... [ 15%] Linking CXX static library ../../lib/libopencv_stereo_pch_dephelp.a [ 15%] Built target opencv_stereo_pch_dephelp [ 15%] Linking CXX static library ../../lib/libopencv_test_stereo_pch_dephelp.a [ 15%] Built target opencv_test_stereo_pch_dephelp [ 15%] Linking CXX static library ../../lib/libopencv_superres_pch_dephelp.a [ 15%] Built target opencv_superres_pch_dephelp make: *** [all] Error 2 Makefile:160: recipe for target 'all' failed 

在检查nvidia/cuda:8.0-cudnn5-devel的Docker镜像之后nvidia/cuda:8.0-cudnn5-devel ,似乎需要将以下参数添加到cmake:

 -DCUDA_CUDA_LIBRARY=/usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so