11FROM ubuntu:noble AS builder
22
3+ ARG OPENCV_VERSION=4.12.0
34ENV DEBIAN_FRONTEND=noninteractive
4- ENV OPENCV_VERSION=4.12.0
5+ ENV OPENCV_VERSION=${OPENCV_VERSION}
6+ ENV CCACHE_DIR=/root/.ccache
7+ ENV CCACHE_MAXSIZE=2G
58
69WORKDIR /
710
8- # Install opencv dependencies
9- RUN apt-get update && apt-get -y install --no-install-recommends \
11+ # Install build and OpenCV dependencies (with BuildKit cache for apt)
12+ RUN --mount=type=cache,target=/var/cache/apt \
13+ --mount=type=cache,target=/var/lib/apt/lists \
14+ set -eux; \
15+ apt-get update; \
16+ apt-get -y install --no-install-recommends \
1017 apt-transport-https \
1118 software-properties-common \
1219 wget \
@@ -15,6 +22,7 @@ RUN apt-get update && apt-get -y install --no-install-recommends \
1522 build-essential \
1623 cmake \
1724 git \
25+ ccache \
1826 libtbb-dev \
1927 libatlas-base-dev \
2028 libgtk-3-dev \
@@ -33,85 +41,92 @@ RUN apt-get update && apt-get -y install --no-install-recommends \
3341 libtesseract-dev \
3442 libgdiplus \
3543 pkg-config \
36- libavutil-dev \
37- && apt-get -y clean \
38- && rm -rf /var/lib/apt/lists/*
39-
40- # Setup opencv and opencv-contrib source
41- RUN wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
42- unzip -q ${OPENCV_VERSION}.zip && \
43- rm ${OPENCV_VERSION}.zip && \
44- mv opencv-${OPENCV_VERSION} opencv && \
45- wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
46- unzip -q ${OPENCV_VERSION}.zip && \
47- rm ${OPENCV_VERSION}.zip && \
48- mv opencv_contrib-${OPENCV_VERSION} opencv_contrib
49-
50- # Build OpenCV
51- RUN cd opencv && mkdir build && cd build && \
52- cmake \
53- -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
54- -D CMAKE_BUILD_TYPE=RELEASE \
55- -D BUILD_SHARED_LIBS=OFF \
56- -D ENABLE_CXX11=ON \
57- -D BUILD_EXAMPLES=OFF \
58- -D BUILD_DOCS=OFF \
59- -D BUILD_PERF_TESTS=OFF \
60- -D BUILD_TESTS=OFF \
61- -D BUILD_JAVA=OFF \
62- -D BUILD_opencv_app=OFF \
63- -D BUILD_opencv_barcode=OFF \
64- -D BUILD_opencv_java_bindings_generator=OFF \
65- -D BUILD_opencv_js_bindings_generator=OFF \
66- -D BUILD_opencv_python_bindings_generator=OFF \
67- -D BUILD_opencv_python_tests=OFF \
68- -D BUILD_opencv_ts=OFF \
69- -D BUILD_opencv_js=OFF \
70- -D BUILD_opencv_bioinspired=OFF \
71- -D BUILD_opencv_ccalib=OFF \
72- -D BUILD_opencv_datasets=OFF \
73- -D BUILD_opencv_dnn_objdetect=OFF \
74- -D BUILD_opencv_dpm=OFF \
75- -D BUILD_opencv_fuzzy=OFF \
76- -D BUILD_opencv_gapi=OFF \
77- -D BUILD_opencv_intensity_transform=OFF \
78- -D BUILD_opencv_mcc=OFF \
79- -D BUILD_opencv_objc_bindings_generator=OFF \
80- -D BUILD_opencv_rapid=OFF \
81- -D BUILD_opencv_reg=OFF \
82- -D BUILD_opencv_stereo=OFF \
83- -D BUILD_opencv_structured_light=OFF \
84- -D BUILD_opencv_surface_matching=OFF \
85- -D BUILD_opencv_videostab=OFF \
86- -D BUILD_opencv_wechat_qrcode=ON \
87- -D WITH_GSTREAMER=OFF \
88- -D WITH_ADE=OFF \
89- -D OPENCV_ENABLE_NONFREE=ON \
90- .. && make -j$(nproc) && make install && ldconfig
91-
92- # Download OpenCvSharp
93- RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp
94-
95- # Install the Extern lib.
96- RUN mkdir /opencvsharp/make && cd /opencvsharp/make && \
97- cmake -D CMAKE_INSTALL_PREFIX=/opencvsharp/make /opencvsharp/src && \
98- make -j$(nproc) && make install && \
99- rm -rf /opencv && \
100- rm -rf /opencv_contrib && \
101- cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /usr/lib/ && \
102- mkdir /artifacts && \
44+ libavutil-dev; \
45+ apt-get -y clean; \
46+ rm -rf /var/lib/apt/lists/*
47+
48+ # Fetch OpenCV and opencv_contrib sources
49+ RUN set -eux; \
50+ wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip; \
51+ unzip -q ${OPENCV_VERSION}.zip; \
52+ rm ${OPENCV_VERSION}.zip; \
53+ mv opencv-${OPENCV_VERSION} /opencv; \
54+ wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip; \
55+ unzip -q ${OPENCV_VERSION}.zip; \
56+ rm ${OPENCV_VERSION}.zip; \
57+ mv opencv_contrib-${OPENCV_VERSION} /opencv_contrib
58+
59+ # Configure, build, and install OpenCV with ccache and parallel build
60+ RUN --mount=type=cache,target=/root/.ccache \
61+ set -eux; \
62+ cmake -S /opencv -B /opencv/build \
63+ -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \
64+ -D CMAKE_BUILD_TYPE=RELEASE \
65+ -D CMAKE_C_COMPILER_LAUNCHER=ccache \
66+ -D CMAKE_CXX_COMPILER_LAUNCHER=ccache \
67+ -D BUILD_SHARED_LIBS=OFF \
68+ -D ENABLE_CXX11=ON \
69+ -D BUILD_EXAMPLES=OFF \
70+ -D BUILD_DOCS=OFF \
71+ -D BUILD_PERF_TESTS=OFF \
72+ -D BUILD_TESTS=OFF \
73+ -D BUILD_JAVA=OFF \
74+ -D BUILD_opencv_app=OFF \
75+ -D BUILD_opencv_barcode=OFF \
76+ -D BUILD_opencv_java_bindings_generator=OFF \
77+ -D BUILD_opencv_js_bindings_generator=OFF \
78+ -D BUILD_opencv_python_bindings_generator=OFF \
79+ -D BUILD_opencv_python_tests=OFF \
80+ -D BUILD_opencv_ts=OFF \
81+ -D BUILD_opencv_js=OFF \
82+ -D BUILD_opencv_bioinspired=OFF \
83+ -D BUILD_opencv_ccalib=OFF \
84+ -D BUILD_opencv_datasets=OFF \
85+ -D BUILD_opencv_dnn_objdetect=OFF \
86+ -D BUILD_opencv_dpm=OFF \
87+ -D BUILD_opencv_fuzzy=OFF \
88+ -D BUILD_opencv_gapi=OFF \
89+ -D BUILD_opencv_intensity_transform=OFF \
90+ -D BUILD_opencv_mcc=OFF \
91+ -D BUILD_opencv_objc_bindings_generator=OFF \
92+ -D BUILD_opencv_rapid=OFF \
93+ -D BUILD_opencv_reg=OFF \
94+ -D BUILD_opencv_stereo=OFF \
95+ -D BUILD_opencv_structured_light=OFF \
96+ -D BUILD_opencv_surface_matching=OFF \
97+ -D BUILD_opencv_videostab=OFF \
98+ -D BUILD_opencv_wechat_qrcode=ON \
99+ -D WITH_GSTREAMER=OFF \
100+ -D WITH_ADE=OFF \
101+ -D OPENCV_ENABLE_NONFREE=ON; \
102+ cmake --build /opencv/build --parallel "$(nproc)" ; \
103+ cmake --install /opencv/build; \
104+ ldconfig
105+
106+ # Get OpenCvSharp sources
107+ RUN git clone https://github.com/shimat/opencvsharp.git /opencvsharp
108+
109+ # Build and install OpenCvSharp native extern with ccache
110+ RUN --mount=type=cache,target=/root/.ccache \
111+ set -eux; \
112+ mkdir -p /opencvsharp/make; \
113+ cmake -S /opencvsharp/src -B /opencvsharp/make \
114+ -D CMAKE_INSTALL_PREFIX=/opencvsharp/make \
115+ -D CMAKE_C_COMPILER_LAUNCHER=ccache \
116+ -D CMAKE_CXX_COMPILER_LAUNCHER=ccache; \
117+ cmake --build /opencvsharp/make --parallel "$(nproc)" ; \
118+ cmake --install /opencvsharp/make; \
119+ rm -rf /opencv /opencv_contrib; \
120+ cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /usr/lib/; \
121+ mkdir -p /artifacts; \
103122 cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /artifacts/
104123
105124
106125# ######### Test native .so file ##########
107126
108- FROM mcr.microsoft.com/dotnet/sdk:8.0-noble
109- RUN apt-get update && apt-get -y install --no-install-recommends gcc
110- # /usr/lib/libOpenCvSharpExtern.so
111- # /usr/local/lib/libopencv_*.a
127+ FROM mcr.microsoft.com/dotnet/sdk:8.0-noble AS test-native
128+ RUN apt-get update && apt-get -y install --no-install-recommends gcc && rm -rf /var/lib/apt/lists/*
112129COPY --from=builder /usr/lib /usr/lib
113- # COPY --from=builder /usr/local/lib /usr/local/lib
114-
115130RUN echo "\n \
116131#include <stdio.h> \n \
117132int core_Mat_sizeof(); \n \
@@ -126,36 +141,15 @@ int main(){ \n\
126141
127142# ######### Test .NET class libraries ##########
128143
129- FROM mcr.microsoft.com/dotnet/sdk:8.0-noble
144+ FROM mcr.microsoft.com/dotnet/sdk:8.0-noble AS test-dotnet
130145COPY --from=builder /usr/lib /usr/lib
131- # Install Build the C# part of OpenCvSharp
132146RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp
133147RUN cd /opencvsharp/src/OpenCvSharp && \
134148 dotnet build -c Release -f net8.0 && \
135149 cd /opencvsharp/src/OpenCvSharp.Extensions && \
136150 dotnet build -c Release -f net8.0
137-
138151RUN dotnet test /opencvsharp/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj -c Release -f net8.0 --runtime ubuntu.20.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null
139152
140- # Simple console app test using NuGet
141- # RUN dotnet new console -f net8.0 -o "ConsoleApp01" && cd /ConsoleApp01 && \
142- # echo "\n\
143- # using System; \n\
144- # using OpenCvSharp; \n\
145- # class Program{ \n\
146- # static void Main(){ \n\
147- # Console.WriteLine(Cv2.GetTickCount()); \n\
148- # using var mat = new Mat(1, 1, MatType.CV_8UC1); \n\
149- # Console.WriteLine(mat.CvPtr); \n\
150- # } \n\
151- # }" > Program.cs && \
152- # dotnet add package OpenCvSharp4 && \
153- # dotnet run && \
154- # rm -rf /ConsoleApp01
155-
156- # RUN ldd /artifacts/libOpenCvSharpExtern.so
157-
158-
159153
160154# ######### Final image ##########
161155
0 commit comments