opencv

Created Diff never expires
2 removals
Words removed4
Total words546
Words removed (%)0.73
170 lines
2 additions
Words added2
Total words544
Words added (%)0.37
170 lines
# ffmpeg - http://ffmpeg.org/download.html
# ffmpeg - http://ffmpeg.org/download.html
#
#
# From https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
# From https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
#
#
# ffmpeg docker - https://hub.docker.com/r/jrottenberg/ffmpeg/
# ffmpeg docker - https://hub.docker.com/r/jrottenberg/ffmpeg/
#
#
# opencv docker - https://github.com/Valian/docker-python-opencv-ffmpeg and https://github.com/Borda/docker_python-opencv-ffmpeg/blob/master/gpu/Dockerfile
# opencv docker - https://github.com/Valian/docker-python-opencv-ffmpeg and https://github.com/Borda/docker_python-opencv-ffmpeg/blob/master/gpu/Dockerfile


# Ubuntu 22.04
# Ubuntu 22.04
FROM ghcr.io/minostauros/cuda-ffmpeg-docker:6.1-cu118
FROM ghcr.io/minostauros/cuda-ffmpeg-docker:6.1-cu121


WORKDIR /
WORKDIR /


# Install OpenCV
# Install OpenCV
ARG PYTHON_VERSION=3.10
ARG PYTHON_VERSION=3.10
ARG OPENCV_VERSION=4.9.0
ARG OPENCV_VERSION=4.9.0


# Needed for string substitution
# Needed for string substitution
SHELL ["/bin/bash", "-c"]
SHELL ["/bin/bash", "-c"]
# https://techoverflow.net/2019/05/18/how-to-fix-configuring-tzdata-interactive-input-when-building-docker-images/
# https://techoverflow.net/2019/05/18/how-to-fix-configuring-tzdata-interactive-input-when-building-docker-images/
ENV DEBIAN_FRONTEND=noninteractive
ENV DEBIAN_FRONTEND=noninteractive
ENV DEBCONF_NONINTERACTIVE_SEEN=true
ENV DEBCONF_NONINTERACTIVE_SEEN=true
ENV TZ=Asia/Seoul
ENV TZ=Asia/Seoul


# Install all dependencies for OpenCV
# Install all dependencies for OpenCV
RUN apt-get -y update -qq --fix-missing && \
RUN apt-get -y update -qq --fix-missing && \
apt-get -y install --no-install-recommends \
apt-get -y install --no-install-recommends \
python${PYTHON_VERSION} \
python${PYTHON_VERSION} \
python${PYTHON_VERSION}-dev \
python${PYTHON_VERSION}-dev \
$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "python${PYTHON_VERSION%%.*}-distutils" ) \
$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "python${PYTHON_VERSION%%.*}-distutils" ) \
wget \
wget \
unzip \
unzip \
cmake \
cmake \
libtbb12 \
libtbb12 \
gfortran \
gfortran \
apt-utils \
apt-utils \
pkg-config \
pkg-config \
checkinstall \
checkinstall \
qtbase5-dev qt5-qmake \
qtbase5-dev qt5-qmake \
build-essential \
build-essential \
libopenblas-base \
libopenblas-base \
libopenblas-dev \
libopenblas-dev \
liblapack-dev \
liblapack-dev \
libatlas-base-dev \
libatlas-base-dev \
#libgtk-3-dev \
#libgtk-3-dev \
#libavcodec58 \
#libavcodec58 \
libavcodec-dev \
libavcodec-dev \
#libavformat58 \
#libavformat58 \
libavformat-dev \
libavformat-dev \
libavutil-dev \
libavutil-dev \
#libswscale5 \
#libswscale5 \
libswscale-dev \
libswscale-dev \
libjpeg8-dev \
libjpeg8-dev \
#libpng-dev \ # installed with ffmpeg in base image
#libpng-dev \ # installed with ffmpeg in base image
libtiff5-dev \
libtiff5-dev \
libxine2-dev \
libxine2-dev \
libv4l-dev \
libv4l-dev \
libgstreamer1.0 \
libgstreamer1.0 \
libgstreamer1.0-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-0 \
libgstreamer-plugins-base1.0-0 \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-base1.0-dev \
libglew-dev \
libglew-dev \
libpostproc-dev \
libpostproc-dev \
libeigen3-dev \
libeigen3-dev \
libtbb-dev \
libtbb-dev \
zlib1g-dev \
zlib1g-dev \
libsm6 \
libsm6 \
libxext6 \
libxext6 \
libxrender1 \
libxrender1 \
&& \
&& \
# install python dependencies
# install python dependencies
# sysctl -w net.ipv4.ip_forward=1 && \
# sysctl -w net.ipv4.ip_forward=1 && \
wget https://bootstrap.pypa.io/get-pip.py --progress=bar:force:noscroll --no-check-certificate && \
wget https://bootstrap.pypa.io/get-pip.py --progress=bar:force:noscroll --no-check-certificate && \
python${PYTHON_VERSION} get-pip.py && \
python${PYTHON_VERSION} get-pip.py && \
rm get-pip.py && \
rm get-pip.py && \
pip${PYTHON_VERSION} install numpy && \
pip${PYTHON_VERSION} install numpy && \
# Get OpenCV
# Get OpenCV
wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip -O opencv.zip --progress=bar:force:noscroll && \
wget https://github.com/opencv/opencv/archive/$OPENCV_VERSION.zip -O opencv.zip --progress=bar:force:noscroll && \
unzip -q opencv.zip && \
unzip -q opencv.zip && \
mv /opencv-$OPENCV_VERSION /opencv && \
mv /opencv-$OPENCV_VERSION /opencv && \
rm opencv.zip && \
rm opencv.zip && \
wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip -O opencv_contrib.zip --progress=bar:force:noscroll && \
wget https://github.com/opencv/opencv_contrib/archive/$OPENCV_VERSION.zip -O opencv_contrib.zip --progress=bar:force:noscroll && \
unzip -q opencv_contrib.zip && \
unzip -q opencv_contrib.zip && \
mv /opencv_contrib-$OPENCV_VERSION /opencv_contrib && \
mv /opencv_contrib-$OPENCV_VERSION /opencv_contrib && \
rm opencv_contrib.zip && \
rm opencv_contrib.zip && \
# Prepare Build
# Prepare Build
mkdir /opencv/build && \
mkdir /opencv/build && \
cd /opencv/build && \
cd /opencv/build && \
cmake \
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_BUILD_TYPE=RELEASE \
-D BUILD_PYTHON_SUPPORT=ON \
-D BUILD_PYTHON_SUPPORT=ON \
-D BUILD_DOCS=ON \
-D BUILD_DOCS=ON \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
-D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
-D BUILD_opencv_python3=$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "ON" || echo "OFF" ) \
-D BUILD_opencv_python3=$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "ON" || echo "OFF" ) \
-D BUILD_opencv_python2=$( [ ${PYTHON_VERSION%%.*} -lt 3 ] && echo "ON" || echo "OFF" ) \
-D BUILD_opencv_python2=$( [ ${PYTHON_VERSION%%.*} -lt 3 ] && echo "ON" || echo "OFF" ) \
-D PYTHON${PYTHON_VERSION%%.*}_EXECUTABLE=$(which python${PYTHON_VERSION}) \
-D PYTHON${PYTHON_VERSION%%.*}_EXECUTABLE=$(which python${PYTHON_VERSION}) \
-D PYTHON_DEFAULT_EXECUTABLE=$(which python${PYTHON_VERSION}) \
-D PYTHON_DEFAULT_EXECUTABLE=$(which python${PYTHON_VERSION}) \
-D BUILD_EXAMPLES=OFF \
-D BUILD_EXAMPLES=OFF \
-D WITH_IPP=OFF \
-D WITH_IPP=OFF \
-D WITH_FFMPEG=ON \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER=ON \
-D WITH_V4L=ON \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_TBB=ON \
-D WITH_TBB=ON \
-D WITH_QT=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D WITH_OPENGL=ON \
-D WITH_CUDA=ON \
-D WITH_CUDA=ON \
-D WITH_LAPACK=ON \
-D WITH_LAPACK=ON \
#-D WITH_HPX=ON \
#-D WITH_HPX=ON \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda \
-D CMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs \
-D CMAKE_LIBRARY_PATH=/usr/local/cuda/lib64/stubs \
# https://kezunlin.me/post/6580691f
# https://kezunlin.me/post/6580691f
# https://stackoverflow.com/questions/28010399/build-opencv-with-cuda-support
# https://stackoverflow.com/questions/28010399/build-opencv-with-cuda-support
# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
# https://en.wikipedia.org/wiki/CUDA#GPUs_supported
# https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications
# https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#features-and-technical-specifications
-D CUDA_ARCH_BIN="3.5 3.7 5.0 5.2 6.0 6.1 7.0 7.5 8.0 8.6 8.7 8.9 9.0" \
-D CUDA_ARCH_BIN="5.0 5.2 6.0 6.1 7.0 7.5 8.0 8.6 8.7 8.9 9.0" \
-D CUDA_ARCH_PTX="" \
-D CUDA_ARCH_PTX="" \
-D WITH_CUBLAS=ON \
-D WITH_CUBLAS=ON \
-D WITH_NVCUVID=ON \
-D WITH_NVCUVID=ON \
-D ENABLE_FAST_MATH=0 \
-D ENABLE_FAST_MATH=0 \
-D CUDA_FAST_MATH=0 \
-D CUDA_FAST_MATH=0 \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
.. && \
.. && \
# Build, Test and Install
# Build, Test and Install
cd /opencv/build && \
cd /opencv/build && \
make -j$(nproc) && \
make -j$(nproc) && \
make install && \
make install && \
ldconfig && \
ldconfig && \
# cleaning
# cleaning
apt-get -y remove \
apt-get -y remove \
unzip \
unzip \
gfortran \
gfortran \
apt-utils \
apt-utils \
checkinstall \
checkinstall \
libopenblas-dev \
libopenblas-dev \
liblapack-dev \
liblapack-dev \
libatlas-base-dev \
libatlas-base-dev \
#libgtk-3-dev \
#libgtk-3-dev \
libavcodec-dev \
libavcodec-dev \
libavformat-dev \
libavformat-dev \
libavutil-dev \
libavutil-dev \
libswscale-dev \
libswscale-dev \
libjpeg8-dev \
libjpeg8-dev \
#libpng-dev \
#libpng-dev \
#libtiff5-dev \
#libtiff5-dev \
libxine2-dev \
libxine2-dev \
libgstreamer1.0-dev \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer-plugins-base1.0-dev \
libglew-dev \
libglew-dev \
libpostproc-dev \
libpostproc-dev \
libeigen3-dev \
libeigen3-dev \
libtbb-dev \
libtbb-dev \
&& \
&& \
apt-get autoremove -y && \
apt-get autoremove -y && \
apt-get clean && \
apt-get clean && \
rm -rf /opencv /opencv_contrib /var/lib/apt/lists/* && \
rm -rf /opencv /opencv_contrib /var/lib/apt/lists/* && \
# https://stackoverflow.com/a/68897099 Qt5Core.so.5 error workaround (cause is not known, error does not occurs on every machine)
# https://stackoverflow.com/a/68897099 Qt5Core.so.5 error workaround (cause is not known, error does not occurs on every machine)
strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 && \
strip --remove-section=.note.ABI-tag /usr/lib/x86_64-linux-gnu/libQt5Core.so.5 && \
# Set the default python and install PIP packages
# Set the default python and install PIP packages
update-alternatives --install /usr/bin/python${PYTHON_VERSION%%.*} python${PYTHON_VERSION%%.*} /usr/bin/python${PYTHON_VERSION} 1 && \
update-alternatives --install /usr/bin/python${PYTHON_VERSION%%.*} python${PYTHON_VERSION%%.*} /usr/bin/python${PYTHON_VERSION} 1 && \
update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1
update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1


CMD ["/bin/bash"]
CMD ["/bin/bash"]
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" \
ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib" \
PYTHONPATH="$PYTHONPATH:/usr/lib/python${PYTHON_VERSION}/site-packages:/usr/local/lib/python${PYTHON_VERSION}/site-packages"
PYTHONPATH="$PYTHONPATH:/usr/lib/python${PYTHON_VERSION}/site-packages:/usr/local/lib/python${PYTHON_VERSION}/site-packages"
WORKDIR /workspace
WORKDIR /workspace