python - Docker opencv3 Cmake错误

标签 python opencv docker cmake

我试图使用docker在启用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

然后我发现它终于出现了一个错误,似乎找不到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! 

更新整个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 

最佳答案

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

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

关于python - Docker opencv3 Cmake错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41930794/

相关文章:

docker - 向 docker 镜像添加新入口点

docker - Azure DevOps 版本 "rzc generate exited with code 1"

python - 通过正确地将补丁一个放在另一个上,将重叠图像合并为单个图像

python - Flask-ReSTLess的复杂路线(例如“忘记密码”)

c++ - OpenCV 中的范数函数

OpenCV 2.4.7 Mat::convertTo() 32 位到 16 位截断

docker - minikube ip 返回 127.0.0.1 | Kubernetes NodePort 服务无法访问

python - 从大量停用词列表中删除停用词需要很长时间

python - 将数据加载到pandas中

python - 尝试查找棋盘角时打开 cv python 错误