Docker opencv3 Cmake错误

问题描述:

我试图用docker构建一个启用了ffmpeg的Python3 + OpenCV3环境。Docker opencv3 Cmake错误

由于我也想用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 

后来我发现它终于得到了一个错误,这似乎无法找到PATH CUDA_CUDA_LIBRARY,因为这些部分是图像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! 

Upate整个Dockerfile

FROM nvidia/cuda:8.0-cudnn5-devel 

MAINTAINER jiandong <[email protected]> 

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/[email protected]${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/[email protected]${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 
+0

@talonmies:现在的问题是要找到CUDA,所以“CUDA”的标签是适当的这里。 – Tsyvarev

+0

你能分享完整的Dockerfile吗? –

+0

@Tsyvarev:不,它不是。这个问题是关于配置一个OpenCV版本来查找CUDA。它与CUDA编程无关 – talonmies

检查泊坞窗图像nvidia/cuda:8.0-cudnn5-devel后,似乎你需要添加下面的参数的cmake:

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