Проблемы с установкой Docker openCV

В настоящее время я пытаюсь запустить приложение с помощью Docker, но при запуске приложения получаю следующее сообщение об ошибке:

 error while loading shared libraries: libopencv_highgui.so.4.4: cannot open shared object file: No such file or directory

Я предполагаю, что что-то идет не так в файле докера и что установка не завершена или неверна. Поэтому я добавил раздел об OpenCV в конце поста. Я пропустил важный шаг или ошибку в dockerfile?

FROM nvidia/cuda:10.2-devel-ubuntu18.04 as TOOLKITS
RUN apt-get update && apt-get install -y apt-utils
# Install additional packages
RUN apt-get install -y \
    build-essential \
    bzip2 \
    checkinstall \
    cmake \
    curl \
    gcc \
    gfortran \
    git \
    pkg-config \
    python3-pip \
    python3-dev \
    python3-numpy \
    nano \ 
    openexr \
    unzip \
    wget \
    yasm


FROM TOOLKITS as GIT_PULLS
WORKDIR /
RUN git clone https://github.com/opencv/opencv.git
RUN git clone https://github.com/opencv/opencv_contrib.git

FROM GIT_PULLS as OPENCV_PREPERATION
RUN apt-get install -y \
    libgtk-3-dev \
    libavcodec-dev \
    libavformat-dev \
    libswscale-dev \
    libv4l-dev \
    libxvidcore-dev \
    libx264-dev \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libatlas-base-dev \
    libtbb2 \
    libtbb-dev \
    libdc1394-22-dev


FROM OPENCV_PREPERATION as OPENCV_CMAKE
WORKDIR /
RUN mkdir /opencv/build
WORKDIR /opencv/build
RUN cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DINSTALL_C_EXAMPLES=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DWITH_TBB=ON \
-DWITH_V4L=ON \
-DOPENCV_GENERATE_PKGCONFIG=ON \
-DWITH_OPENGL=ON \
-DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-DOPENCV_PC_FILE_NAME=opencv.pc \
-DBUILD_EXAMPLES=ON ..

FROM OPENCV_CMAKE as BUILD_OPENCV_MAKE
RUN make -j $(nproc)
RUN make install

FROM TOOLKITS 
COPY --from=XXX /opencv /opencv
COPY --from=XXX /opencv_contrib /opencv_contrib


person john-mueller    schedule 13.08.2020    source источник
comment
Что такое ИНСТРУМЕНТЫ? Если бы вы могли предоставить Dockerfile, который можно воспроизвести на других машинах, помочь вам было бы проще.   -  person Omer Tuchfeld    schedule 13.08.2020
comment
@Omer Файл докера относительно большой и обширный. Я добавил здесь необходимые зависимости для openCV. Также можно опубликовать весь Dockerfile, но это, вероятно, слишком запутанно и не очень полезно для устранения неполадок.   -  person john-mueller    schedule 13.08.2020


Ответы (1)


Раньше я сталкивался с той же проблемой при установке OpenCV в Docker с изображением Python. Вам, вероятно, не нужно столько зависимостей, но это вариант. У меня будет облегченная версия, которая подходит для моего случая. Пожалуйста, попробуйте следующий код:

Нагруженная версия:

FROM python:3.7

RUN apt-get update \
    && apt-get install -y \
        build-essential \
        cmake \
        git \
        wget \
        unzip \
        yasm \
        pkg-config \
        libswscale-dev \
        libtbb2 \
        libtbb-dev \
        libjpeg-dev \
        libpng-dev \
        libtiff-dev \
        libavformat-dev \
        libpq-dev \
    && rm -rf /var/lib/apt/lists/*

RUN pip install numpy

WORKDIR /
ENV OPENCV_VERSION="4.1.1"
# install opencv-python from its source 
RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip \
&& unzip ${OPENCV_VERSION}.zip \
&& mkdir /opencv-${OPENCV_VERSION}/cmake_binary \
&& cd /opencv-${OPENCV_VERSION}/cmake_binary \
&& cmake -DBUILD_TIFF=ON \
  -DBUILD_opencv_java=OFF \
  -DWITH_CUDA=OFF \
  -DWITH_OPENGL=ON \
  -DWITH_OPENCL=ON \
  -DWITH_IPP=ON \
  -DWITH_TBB=ON \
  -DWITH_EIGEN=ON \
  -DWITH_V4L=ON \
  -DBUILD_TESTS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DCMAKE_BUILD_TYPE=RELEASE \
  -DCMAKE_INSTALL_PREFIX=$(python3.7 -c "import sys; print(sys.prefix)") \
  -DPYTHON_EXECUTABLE=$(which python3.7) \
  -DPYTHON_INCLUDE_DIR=$(python3.7 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
  -DPYTHON_PACKAGES_PATH=$(python3.7 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
  .. \
&& make install \
&& rm /${OPENCV_VERSION}.zip \
&& rm -r /opencv-${OPENCV_VERSION}
RUN ln -s \
  /usr/local/python/cv2/python-3.7/cv2.cpython-37m-x86_64-linux-gnu.so \
  /usr/local/lib/python3.7/site-packages/cv2.so
RUN apt-get --fix-missing update && apt-get --fix-broken install && apt-get install -y poppler-utils && apt-get install -y tesseract-ocr && \
    apt-get install -y libtesseract-dev && apt-get install -y libleptonica-dev && ldconfig && apt install -y libsm6 libxext6 && apt install -y python-opencv

Облегченная версия:

FROM python:3.7 
RUN apt-get update -y 
RUN apt-update && apt install -y libsm6 libxext6 

В моем случае я использовал тяжело загруженную версию, чтобы избежать некоторых хлопот, и обе версии должны работать нормально. Для справки см. также эту ссылку и спасибо за большую помощь Нео Андерсона. .

person liamsuma    schedule 13.08.2020