Skip to content
Snippets Groups Projects
Dockerfile 5.71 KiB
Newer Older
FROM nvidia/cuda:11.4.0-devel-ubuntu20.04 AS devel

ARG OPENCV_VERSION=4.5.3
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/London
ENV NVIDIA_DRIVER_CAPABILITIES graphics,compute,utility,video

RUN apt-get update &&\
    # Install build tools, build dependencies and python
    apt-get install --no-install-recommends -y \
        build-essential \
Nicolas Pope's avatar
Nicolas Pope committed
        ninja-build \
        git \
        openssh-client \
        wget \
        unzip \
        yasm \
        cppcheck \
        pkg-config \
        libceres-dev \
        libreadline-dev \
        libopus-dev \
        libxtst-dev \
        libswscale-dev \
        libtbb2 \
        libtbb-dev \
        libjpeg-dev \
        libpng-dev \
        libglew-dev \
        zlib1g-dev \
        libasound-dev \
        libavcodec-dev \
        libavformat-dev \
        libavutil-dev \
        libpostproc-dev \
        libswscale-dev \
        libeigen3-dev \
        libgtk2.0-dev \
        libxxf86vm-dev \
        uuid-dev \
        libmsgpack-dev \
        liburiparser-dev \
        software-properties-common \
    && apt-key adv --keyserver keys.gnupg.net --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE && \
    add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo focal main" -u && \
    apt-get update && \
    apt-get install --no-install-recommends -y \
        librealsense2-dev \
    && rm -rf /var/lib/apt/lists/*

COPY ./libnvcuvid.so ./libnvidia-encode.so /usr/lib/x86_64-linux-gnu/

RUN cd /opt/ &&\
Nicolas Pope's avatar
Nicolas Pope committed
    # CMake
    wget https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5-linux-x86_64.sh && \
    chmod a+x ././cmake-3.20.5-linux-x86_64.sh && \
    ./cmake-3.20.5-linux-x86_64.sh --skip-license --prefix=/usr/local && \
    rm ./cmake-3.20.5-linux-x86_64.sh && \
    # Pylon
    wget -O pylon.deb https://seafile.utu.fi/f/b4585f6c84f0462fac04/?dl=1 &&\
    apt-get install ./pylon.deb &&\
    rm ./pylon.deb &&\
    rm -rf /var/lib/apt/lists/* &&\
    # Portaudio
    cd /opt/ &&\
    wget http://files.portaudio.com/archives/pa_stable_v190700_20210406.tgz &&\
    tar -xf ./pa_stable_v190700_20210406.tgz &&\
    rm ./pa_stable_v190700_20210406.tgz &&\
    cd ./portaudio &&\
    ./configure && make && make install &&\
    rm -rf ./portaudio &&\
    # Download and unzip OpenCV and opencv_contrib and delte zip files
    cd /opt/ &&\
    wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip &&\
    unzip $OPENCV_VERSION.zip &&\
    rm $OPENCV_VERSION.zip &&\
    wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip &&\
    unzip ${OPENCV_VERSION}.zip &&\
    rm ${OPENCV_VERSION}.zip &&\
    # Create build folder and switch to it
    mkdir /opt/opencv-${OPENCV_VERSION}/build && cd /opt/opencv-${OPENCV_VERSION}/build &&\
    # Cmake configure
    cmake \
        -DOPENCV_EXTRA_MODULES_PATH=/opt/opencv_contrib-${OPENCV_VERSION}/modules \
        -DWITH_CUDA=ON \
        -DOPENCV_ENABLE_NONFREE=ON\
        -DCUDA_ARCH_BIN="6.1 7.5" \
        -DBUILD_TESTS=OFF\
        -DBUILD_PERF_TESTS=OFF\
        -DBUILD_EXAMPLES=OFF\
        -DBUILD_opencv_bioinspired=OFF\
        -DBUILD_opencv_cudaobjdetect=OFF\
        -DBUILD_opencv_dnn=OFF\
        -DBUILD_opencv_dnn_objdetect=OFF\
        -DBUILD_opencv_dnn_superres=OFF\
        -DBUILD_opencv_fuzzy=OFF\
        -DBUILD_opencv_hdf=OFF\
        -DBUILD_opencv_hfs=OFF\
        -DBUILD_opencv_dpm=OFF\
        -DBUILD_opencv_image_hash=OFF\
        -DBUILD_opencv_java_bindings_generator=OFF\
        -DBUILD_opencv_js=OFF\
        -DBUILD_opencv_saliency=OFF\
        -DBUILD_opencv_sfm=OFF\
        -DBUILD_opencv_stitching=OFF\
        -DBUILD_opencv_structured_light=OFF\
        -DBUILD_opencv_superres=OFF\
        -DBUILD_opencv_surface_matching=OFF\
        -DBUILD_opencv_viz=OFF\
        -DBUILD_opencv_xobjdetect=OFF\
        -DBUILD_opencv_gapi=OFF\
        -DBUILD_opencv_videostab=OFF\
        -DBUILD_opencv_rgbd=OFF\
        -DWITH_CUDNN=OFF\
        -DWITH_TIFF=OFF\
        -DWITH_WEBP=OFF\
        -DWITH_OPENEXR=OFF\
        -DWITH_OPENCL=OFF\
        -DWITH_PROTOBUF=OFF\
        -DCMAKE_BUILD_TYPE=RELEASE \
        # Install path will be /usr/local/lib (lib is implicit)
        -DCMAKE_INSTALL_PREFIX=/usr/local \
        .. &&\
    # Make
    make -j"$(nproc)" && \
    # Install to /usr/local/lib
    make install && \
    ldconfig &&\
    # Remove OpenCV sources and build folder
    rm -rf /opt/opencv-${OPENCV_VERSION} && rm -rf /opt/opencv_contrib-${OPENCV_VERSION} &&\
    ln -s /usr/local/include/opencv4/opencv2 /usr/local/include/opencv2

FROM nvidia/cuda:11.4.0-base-ubuntu20.04 AS runtime

ARG OPENCV_VERSION=4.5.3
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/London
ENV NVIDIA_DRIVER_CAPABILITIES graphics,compute,utility,video

RUN apt-get update && apt-get upgrade -y &&\
    # Install build tools, build dependencies and python
    apt-get install --no-install-recommends -y \
        libceres1 \
        libreadline8 \
        libopus0 \
        libxtst6 \
        libtbb2 \
        libjpeg8 \
        libpng16-16 \
        libtiff5 \
        libavformat58 \
        libpq5 \
        libxine2 \
        libglew2.1 \
        zlib1g \
        libasound2 \
        libavcodec58 \
        libavutil56 \
        libpostproc55 \
        libswscale5 \
        libgtk2.0-0 \
        libxxf86vm1 \
        uuid \
        libmsgpackc2 \
        liburiparser1 \
        software-properties-common \
    && rm -rf /var/lib/apt/lists/*

COPY --from=devel /usr/local/share /usr/local/share
COPY --from=devel /usr/local/lib /usr/local/lib
COPY --from=devel /opt/pylon /opt/pylon
COPY --from=devel /etc/udev/rules.d/69-basler-cameras.rules /etc/udev/rules.d/
COPY --from=devel /etc/profile.d /etc/profile.d