我目前正试图使用Docker运行应用程序,但在启动应用程序时收到以下错误消息:
error while loading shared libraries: libopencv_highgui.so.4.4: cannot open shared object file: No such file or directory
我认为docker文件中出现了问题,并且安装不完整或不正确。因此,我在帖子末尾添加了关于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
我之前在Docker中使用Python映像安装OpenCV时也遇到过同样的问题。您可能不需要这么多依赖关系,但这是一种选择。我会有一个轻量级的版本,适合我的情况。请尝试以下代码:
重载版本:
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
就我的情况而言,我最终使用了重载版本,只是为了节省一些麻烦,两个版本都应该可以正常工作。为了您的参考,也请参阅此链接,并感谢Neo Anderson的大力帮助。
我在这个过程中也遇到了很多问题,并找到了这个存储库:https://github.com/janza/docker-python3-opencv克隆或下载它,并根据您的要求添加其他依赖项和文件。
apt-get update -y
apt install -y libsm6 libxext6
apt update
pip install pyglview
apt install -y libgl1-mesa-glx