我有以下情况。我想将tensorflow用于ML和OpenCV进行某些图像处理。我最近了解了码头工人,并发现TF和OCV都已码头化。我可以轻松拉出图像并运行例如。张量流脚本。有没有办法合并两个码头工人提供的东西?或者在它上面运行。我想写一段使用OpenCV和Tensorflow的代码。有没有办法做到这一点?
或更笼统地说:Docker映像已预安装了python软件包AA。 Docker B具有python软件包BB。如何编写同时使用AA和BB的功能的脚本?
答案 0 :(得分:2)
真的很简单。使用TF和OpenCV构建自己的docker映像。 Dockerfile示例(基于janza/docker-python3-opencv):
FROM python:3.7
LABEL maintainet="John Doe"
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 && \
pip install numpy && \
pip install tensorflow
WORKDIR /
ENV OPENCV_VERSION="3.4.2"
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}
当然,我不知道您对此项目的确切要求,并且该Dockerfile很可能对您不起作用。只需根据需要进行调整即可。但是我建议从零开始创建(仅基于某些Linux发行版的已有映像)。然后,您可以完全控制安装了哪些版本的版本,而这些版本没有在第三方图像中经常出现的多余内容(我并不是说它们很糟糕,但是对于人们来说,大多数零件通常都是多余的。)
官方中心中也已经有合并的docker映像: https://hub.docker.com/r/fbcotter/docker-tensorflow-opencv/
如果您再次希望将其分开,我想您可以链接那些图像的运行容器。链接服务的容器可以通过与别名相同的主机名访问,如果未指定别名,则可以使用服务名。但是您必须实现某种逻辑才能使用另一个容器中的另一个程序包(可能是可行的,但又困难又复杂)。