1
1
# https://www.learnopencv.com/install-opencv3-on-ubuntu/
2
2
# https://www.osradar.com/how-to-install-opencv-on-ubuntu-20-04/
3
3
4
- FROM ubuntu:20.04
4
+ # ============== BASE IMAGE =====================
5
+ # ===============================================
6
+
7
+ FROM ubuntu:20.04 AS base
5
8
6
9
LABEL maintainer="https://github.com/Borda"
7
10
@@ -11,31 +14,42 @@ ARG OPENCV_VERSION=4.8.0
11
14
# Needed for string substitution
12
15
SHELL ["/bin/bash" , "-c" ]
13
16
# https://techoverflow.net/2019/05/18/how-to-fix-configuring-tzdata-interactive-input-when-building-docker-images/
14
- ENV DEBIAN_FRONTEND=noninteractive
15
- ENV TZ=Europe/Prague
17
+ ENV DEBIAN_FRONTEND=noninteractive \
18
+ TZ=Europe/Prague
16
19
17
20
RUN \
18
21
# add sources for older pythons
19
- apt-get update --fix-missing && \
22
+ apt-get update -q - -fix-missing && \
20
23
apt-get install -y --no-install-recommends software-properties-common && \
21
24
add-apt-repository ppa:deadsnakes/ppa && \
22
25
apt-add-repository universe && \
23
26
apt-get -y update -qq --fix-missing && \
24
27
apt-get -y install --no-install-recommends \
28
+ build-essential \
29
+ cmake \
30
+ ffmpeg \
31
+ libtbb2 \
32
+ gfortran \
33
+ apt-utils \
34
+ pkg-config \
35
+ qt5-default \
36
+ libopenblas-base \
37
+ libgstreamer1.0 \
25
38
python${PYTHON_VERSION} \
26
39
python${PYTHON_VERSION}-dev \
27
40
$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "python${PYTHON_VERSION}-distutils" ) \
28
41
curl \
29
42
wget \
30
43
&& \
44
+ rm -rf /var/lib/apt/lists/* && \
31
45
32
46
# Set the default python and install PIP packages
33
47
update-alternatives --install /usr/bin/python${PYTHON_VERSION%%.*} python${PYTHON_VERSION%%.*} /usr/bin/python${PYTHON_VERSION} 1 && \
34
48
update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1 && \
35
49
36
50
# install python dependencies
37
51
# sysctl -w net.ipv4.ip_forward=1 ; \
38
- if [[ "$PYTHON_VERSION" == " 2.7" || "$PYTHON_VERSION" == " 3.6" ]]; then \
52
+ if [[ "$PYTHON_VERSION" =~ ^( 2.7| 3.6)$ ]]; then \
39
53
PIP_URL="https://bootstrap.pypa.io/pip/$PYTHON_VERSION/get-pip.py" ; \
40
54
else \
41
55
apt-get -y install --no-install-recommends python${PYTHON_VERSION}-distutils ; \
@@ -46,21 +60,17 @@ RUN \
46
60
47
61
ENV PYTHONPATH="/usr/lib/python${PYTHON_VERSION}/site-packages:/usr/local/lib/python${PYTHON_VERSION}/site-packages"
48
62
63
+
64
+ # ============ COMPILE OPENCV ===================
65
+ # ===============================================
66
+
67
+ FROM base AS builder
68
+
49
69
RUN \
50
70
# Install all dependencies for OpenCV
51
71
apt-get -y update -qq --fix-missing && \
52
72
apt-get -y install --no-install-recommends \
53
- unzip \
54
- cmake \
55
- ffmpeg \
56
- libtbb2 \
57
- gfortran \
58
- apt-utils \
59
- pkg-config \
60
73
checkinstall \
61
- qt5-default \
62
- build-essential \
63
- libopenblas-base \
64
74
libopenblas-dev \
65
75
liblapack-dev \
66
76
libatlas-base-dev \
79
89
libdc1394-22-dev \
80
90
libxine2-dev \
81
91
libv4l-dev \
82
- libgstreamer1.0 \
83
92
libgstreamer1.0-dev \
84
93
libgstreamer-plugins-base1.0-0 \
85
94
libgstreamer-plugins-base1.0-dev \
@@ -90,21 +99,21 @@ RUN \
90
99
zlib1g-dev \
91
100
libsm6 \
92
101
libxext6 \
93
- libxrender1 \
94
- && \
95
- pip${PYTHON_VERSION} install numpy && \
102
+ libxrender1
96
103
97
- # Install OpenCV
104
+ RUN \
105
+ # Install OpenCV
98
106
wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -O opencv.zip --progress=bar:force:noscroll --no-check-certificate && \
99
107
unzip -q opencv.zip && \
100
108
mv /opencv-${OPENCV_VERSION} /opencv && \
101
109
rm opencv.zip && \
102
110
wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -O opencv_contrib.zip --progress=bar:force:noscroll --no-check-certificate && \
103
111
unzip -q opencv_contrib.zip && \
104
112
mv /opencv_contrib-${OPENCV_VERSION} /opencv_contrib && \
105
- rm opencv_contrib.zip && \
113
+ rm opencv_contrib.zip
106
114
107
- # Prepare build
115
+ RUN \
116
+ # Prepare build
108
117
mkdir /opencv/build && \
109
118
cd /opencv/build && \
110
119
cmake \
@@ -131,50 +140,24 @@ RUN \
131
140
-D WITH_LAPACK=ON \
132
141
# -D WITH_HPX=ON \
133
142
-D ENABLE_PRECOMPILED_HEADERS=OFF \
134
- .. \
135
- && \
143
+ ..
136
144
137
- # Build, Test and Install
145
+ RUN \
146
+ # Build, Test and Install
138
147
cd /opencv/build && \
139
- make -j$(nproc) && \
148
+ make -j$(nproc)
149
+
150
+ # ============= FINAL IMAGE =====================
151
+ # ===============================================
152
+
153
+ FROM base
154
+ COPY --from=builder /opencv/build /tmp/opencv/build
155
+
156
+ RUN \
157
+ cd /tmp/opencv/build && \
140
158
make install && \
141
159
ldconfig && \
142
160
143
- # cleaning
144
- apt-get -y remove \
145
- unzip \
146
- cmake \
147
- gfortran \
148
- apt-utils \
149
- pkg-config \
150
- checkinstall \
151
- build-essential \
152
- libopenblas-dev \
153
- liblapack-dev \
154
- libatlas-base-dev \
155
- # libgtk-3-dev \
156
- libavcodec-dev \
157
- libavformat-dev \
158
- libavutil-dev \
159
- libswscale-dev \
160
- libjpeg8-dev \
161
- libpng-dev \
162
- libtiff5-dev \
163
- libdc1394-22-dev \
164
- libxine2-dev \
165
- libv4l-dev \
166
- libgstreamer1.0-dev \
167
- libgstreamer-plugins-base1.0-dev \
168
- libglew-dev \
169
- libpostproc-dev \
170
- libeigen3-dev \
171
- libtbb-dev \
172
- zlib1g-dev \
173
- && \
174
- apt-get autoremove -y && \
175
- apt-get clean && \
176
- rm -rf /opencv /opencv_contrib /var/lib/apt/lists/* && \
177
-
178
161
# Call default command.
179
162
ffmpeg -version && \
180
163
# ldd `which ffmpeg` && \
0 commit comments