Skip to content

Commit ca67ff7

Browse files
committed
cpu
1 parent b25f4ee commit ca67ff7

File tree

1 file changed

+44
-61
lines changed

1 file changed

+44
-61
lines changed

cpu/Dockerfile

Lines changed: 44 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
# https://www.learnopencv.com/install-opencv3-on-ubuntu/
22
# https://www.osradar.com/how-to-install-opencv-on-ubuntu-20-04/
33

4-
FROM ubuntu:20.04
4+
# ============== BASE IMAGE =====================
5+
# ===============================================
6+
7+
FROM ubuntu:20.04 AS base
58

69
LABEL maintainer="https://github.com/Borda"
710

@@ -11,31 +14,42 @@ ARG OPENCV_VERSION=4.8.0
1114
# Needed for string substitution
1215
SHELL ["/bin/bash", "-c"]
1316
# 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
1619

1720
RUN \
1821
# add sources for older pythons
19-
apt-get update --fix-missing && \
22+
apt-get update -q --fix-missing && \
2023
apt-get install -y --no-install-recommends software-properties-common && \
2124
add-apt-repository ppa:deadsnakes/ppa && \
2225
apt-add-repository universe && \
2326
apt-get -y update -qq --fix-missing && \
2427
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 \
2538
python${PYTHON_VERSION} \
2639
python${PYTHON_VERSION}-dev \
2740
$( [ ${PYTHON_VERSION%%.*} -ge 3 ] && echo "python${PYTHON_VERSION}-distutils" ) \
2841
curl \
2942
wget \
3043
&& \
44+
rm -rf /var/lib/apt/lists/* && \
3145

3246
# Set the default python and install PIP packages
3347
update-alternatives --install /usr/bin/python${PYTHON_VERSION%%.*} python${PYTHON_VERSION%%.*} /usr/bin/python${PYTHON_VERSION} 1 && \
3448
update-alternatives --install /usr/bin/python python /usr/bin/python${PYTHON_VERSION} 1 && \
3549

3650
# install python dependencies
3751
# 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 \
3953
PIP_URL="https://bootstrap.pypa.io/pip/$PYTHON_VERSION/get-pip.py" ; \
4054
else \
4155
apt-get -y install --no-install-recommends python${PYTHON_VERSION}-distutils ; \
@@ -46,21 +60,17 @@ RUN \
4660

4761
ENV PYTHONPATH="/usr/lib/python${PYTHON_VERSION}/site-packages:/usr/local/lib/python${PYTHON_VERSION}/site-packages"
4862

63+
64+
# ============ COMPILE OPENCV ===================
65+
# ===============================================
66+
67+
FROM base AS builder
68+
4969
RUN \
5070
# Install all dependencies for OpenCV
5171
apt-get -y update -qq --fix-missing && \
5272
apt-get -y install --no-install-recommends \
53-
unzip \
54-
cmake \
55-
ffmpeg \
56-
libtbb2 \
57-
gfortran \
58-
apt-utils \
59-
pkg-config \
6073
checkinstall \
61-
qt5-default \
62-
build-essential \
63-
libopenblas-base \
6474
libopenblas-dev \
6575
liblapack-dev \
6676
libatlas-base-dev \
@@ -79,7 +89,6 @@ RUN \
7989
libdc1394-22-dev \
8090
libxine2-dev \
8191
libv4l-dev \
82-
libgstreamer1.0 \
8392
libgstreamer1.0-dev \
8493
libgstreamer-plugins-base1.0-0 \
8594
libgstreamer-plugins-base1.0-dev \
@@ -90,21 +99,21 @@ RUN \
9099
zlib1g-dev \
91100
libsm6 \
92101
libxext6 \
93-
libxrender1 \
94-
&& \
95-
pip${PYTHON_VERSION} install numpy && \
102+
libxrender1
96103

97-
# Install OpenCV
104+
RUN \
105+
# Install OpenCV
98106
wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -O opencv.zip --progress=bar:force:noscroll --no-check-certificate && \
99107
unzip -q opencv.zip && \
100108
mv /opencv-${OPENCV_VERSION} /opencv && \
101109
rm opencv.zip && \
102110
wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -O opencv_contrib.zip --progress=bar:force:noscroll --no-check-certificate && \
103111
unzip -q opencv_contrib.zip && \
104112
mv /opencv_contrib-${OPENCV_VERSION} /opencv_contrib && \
105-
rm opencv_contrib.zip && \
113+
rm opencv_contrib.zip
106114

107-
# Prepare build
115+
RUN \
116+
# Prepare build
108117
mkdir /opencv/build && \
109118
cd /opencv/build && \
110119
cmake \
@@ -131,50 +140,24 @@ RUN \
131140
-D WITH_LAPACK=ON \
132141
#-D WITH_HPX=ON \
133142
-D ENABLE_PRECOMPILED_HEADERS=OFF \
134-
.. \
135-
&& \
143+
..
136144

137-
# Build, Test and Install
145+
RUN \
146+
# Build, Test and Install
138147
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 && \
140158
make install && \
141159
ldconfig && \
142160

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-
178161
# Call default command.
179162
ffmpeg -version && \
180163
#ldd `which ffmpeg` && \

0 commit comments

Comments
 (0)