diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..6b42ee8baf680ea7d673606a14a5194df64c557a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,189 @@ +FROM nvidia/cuda:11.6.2-devel-ubuntu20.04 AS devel + +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 \ + ninja-build \ + git \ + openssh-client \ + wget \ + unzip \ + yasm \ + cppcheck \ + pkg-config \ + vim \ + pulseaudio \ + 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 \ + libgnutls28-dev \ + uuid-dev \ + libmsgpack-dev \ + liburiparser-dev \ + software-properties-common \ + zenity \ + gdb \ + gdbserver \ + valgrind \ + && 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/ &&\ + # CMake + wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2-linux-x86_64.sh && \ + chmod a+x ././cmake-3.23.2-linux-x86_64.sh && \ + ./cmake-3.23.2-linux-x86_64.sh --skip-license --prefix=/usr/local && \ + rm ./cmake-3.23.2-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 https://github.com/PortAudio/portaudio/archive/refs/tags/v19.7.0.tar.gz &&\ + tar -xf ./v19.7.0.tar.gz &&\ + rm ./v19.7.0.tar.gz &&\ + cd ./portaudio-19.7.0 &&\ + ./configure && make && make install &&\ + rm -rf ./portaudio-19.7.0 + +ARG OPENCV_VERSION=4.5.5 + +# Download and unzip OpenCV and opencv_contrib and delte zip files +RUN 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_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=ON\ + -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 + +ARG PROTOCOL_VERSION=0.3.2 + +# Beyond Protocol +RUN wget https://gitlab.utu.fi/api/v4/projects/14965/packages/generic/libftl-protocol/${PROTOCOL_VERSION}/libftl-protocol${PROTOCOL_VERSION}-Linux.deb && \ + apt-get install -y ./libftl-protocol${PROTOCOL_VERSION}-Linux.deb && \ + rm ./libftl-protocol${PROTOCOL_VERSION}-Linux.deb + +FROM nvidia/cuda:11.6.2-base-ubuntu20.04 AS runtime + +ARG OPENCV_VERSION=4.5.5 +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 \ + pulseaudio \ + 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 diff --git a/libnvcuvid.so b/libnvcuvid.so new file mode 100644 index 0000000000000000000000000000000000000000..f08a209545e076a835d11dcc24bd20d22088b1c5 Binary files /dev/null and b/libnvcuvid.so differ diff --git a/libnvidia-encode.so b/libnvidia-encode.so new file mode 100644 index 0000000000000000000000000000000000000000..99934c7b22357afacb382aef554075081ee787f6 Binary files /dev/null and b/libnvidia-encode.so differ