[英]Install OpenCV in a Docker container
我正在嘗試 Dockerise 一個 Python 應用程序,它依賴於 OpenCV。 我嘗試了幾種不同的方法,但我不斷收到... ImportError: No module named cv2
當我嘗試運行應用程序時, ImportError: No module named cv2
。
這是我當前的 Dockerfile。
FROM python:2.7
MAINTAINER Ewan Valentine <ewan@theladbible.com>
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Various Python and C/build deps
RUN apt-get update && apt-get install -y \
wget \
build-essential \
cmake \
git \
pkg-config \
python-dev \
python-opencv \
libopencv-dev \
libav-tools \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libjasper-dev \
libgtk2.0-dev \
python-numpy \
python-pycurl \
libatlas-base-dev \
gfortran \
webp \
python-opencv
# Install Open CV - Warning, this takes absolutely forever
RUN cd ~ && git clone https://github.com/Itseez/opencv.git && \
cd opencv && \
git checkout 3.0.0 && \
cd ~ && git clone https://github.com/Itseez/opencv_contrib.git && \
cd opencv_contrib && \
git checkout 3.0.0 && \
cd ~/opencv && mkdir -p build && cd build && \
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D BUILD_EXAMPLES=OFF .. && \
make -j4 && \
make install && \
ldconfig
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
還有我的requirements.txt文件
Flask==0.8
gunicorn==0.14.2
requests==0.11.1
bs4==0.0.1
nltk==3.2.1
pymysql==0.7.2
xlsxwriter==0.8.5
numpy==1.11
Pillow==3.2.0
cv2==1.0
pytesseract==0.1
用稍微不同的設置修復
FROM python:2.7
MAINTAINER Ewan Valentine <ewan@theladbible.com>
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# Various Python and C/build deps
RUN apt-get update && apt-get install -y \
wget \
build-essential \
cmake \
git \
unzip \
pkg-config \
python-dev \
python-opencv \
libopencv-dev \
libav-tools \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libjasper-dev \
libgtk2.0-dev \
python-numpy \
python-pycurl \
libatlas-base-dev \
gfortran \
webp \
python-opencv \
qt5-default \
libvtk6-dev \
zlib1g-dev
# Install Open CV - Warning, this takes absolutely forever
RUN mkdir -p ~/opencv cd ~/opencv && \
wget https://github.com/opencv/opencv/archive/3.0.0.zip && \
unzip 3.0.0.zip && \
rm 3.0.0.zip && \
mv opencv-3.0.0 OpenCV && \
cd OpenCV && \
mkdir build && \
cd build && \
cmake \
-DWITH_QT=ON \
-DWITH_OPENGL=ON \
-DFORCE_VTK=ON \
-DWITH_TBB=ON \
-DWITH_GDAL=ON \
-DWITH_XINE=ON \
-DBUILD_EXAMPLES=ON .. && \
make -j4 && \
make install && \
ldconfig
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . /usr/src/app
感謝您發布此信息。 我遇到了同樣的問題並嘗試了你的解決方案,雖然它似乎安裝了 OpenCV,但它給我留下了 Python 6 庫版本沖突的問題,所以我采取了不同的路線。 我認為一個更簡單的方法是在你的容器中安裝 Anaconda,然后添加 OpenCV。 我正在使用 Python 2,所以我安裝 OpenCvv 的整個 Dockerfile 只是:
FROM continuumio/anaconda
EXPOSE 5000
ADD . /code-directory
WORKDIR code-directory
RUN conda install opencv
CMD ["python", "run-code.py"]
這將從 continuumio/anaconda Dockerfile 安裝 Anaconda,然后它將使用 Anaconda 安裝 opencv。 如果您需要,還有一個單獨的用於 Python 3 的 continuumio Dockerfile。
這是一個使用 Python2 + Python3 + OpenCV 在 Ubuntu 16.04 上構建的圖像。 你可以使用docker pull chennavarri/ubuntu_opencv_python
拉它
這是 Dockerfile(在上面提到的同一個 dockerhub 存儲庫中提供),它將在 Ubuntu 16.04 上為 python2 和 python3 安裝 opencv,並設置適當的 raw1394 鏈接。 復制自https://github.com/chennavarri/docker-ubuntu-python-opencv
FROM ubuntu:16.04
MAINTAINER Chenna Varri
RUN apt-get update
RUN apt-get install -y build-essential apt-utils
RUN apt-get install -y cmake git libgtk2.0-dev pkg-config libavcodec-dev \
libavformat-dev libswscale-dev
RUN apt-get update && apt-get install -y python-dev python-numpy \
python3 python3-pip python3-dev libtbb2 libtbb-dev \
libjpeg-dev libjasper-dev libdc1394-22-dev \
python-opencv libopencv-dev libav-tools python-pycurl \
libatlas-base-dev gfortran webp qt5-default libvtk6-dev zlib1g-dev
RUN pip3 install numpy
RUN apt-get install -y python-pip
RUN pip install --upgrade pip
RUN cd ~/ &&\
git clone https://github.com/Itseez/opencv.git &&\
git clone https://github.com/Itseez/opencv_contrib.git &&\
cd opencv && mkdir build && cd build && cmake -DWITH_QT=ON -DWITH_OPENGL=ON -DFORCE_VTK=ON -DWITH_TBB=ON -DWITH_GDAL=ON -DWITH_XINE=ON -DBUILD_EXAMPLES=ON .. && \
make -j4 && make install && ldconfig
# Set the appropriate link
RUN ln /dev/null /dev/raw1394
RUN cd ~/opencv
給剛開始使用 Docker 的人的一些額外說明:
在您放置此 Dockerfile 的目錄中,將 docker 映像docker build -t ubuntu_cv .
構建鏡像后,您可以通過執行docker images
來檢查
REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu_cv latest 6210ddd6346b 24 minutes ago 2.192 GB
你可以啟動一個docker run -t -i ubuntu_cv:latest
容器docker run -t -i ubuntu_cv:latest
在 docker 中安裝 Opencv(最新)......步驟與 Linux 版本類似,只是符號鏈接路徑不同:
apt install -y libtiff5-dev libjpeg8-dev libpng-dev cmake make
apt install -y libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
apt install -y libxine2-dev libv4l-dev
apt install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
apt install -y qt5-default
apt install -y libatlas-base-dev
apt install -y libfaac-dev libmp3lame-dev libtheora-dev
apt install -y libvorbis-dev libxvidcore-dev
apt install -y libopencore-amrnb-dev libopencore-amrwb-dev
apt install -y x264 x265 v4l-utils
apt install -y libprotobuf-dev protobuf-compiler
apt install -y libeigen3-dev
wget --output-document cv.zip https://github.com/opencv/opencv/archive/4.0.1.zip
wget --output-document contrib.zip
https://github.com/opencv/opencv_contrib/archive/4.0.1.zip
unzip cv.zip
unzip contrib.zip
cd opencv-4.0.1
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D WITH_CUDA=ON \
-D WITH_NVCUVID=OFF \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.0.1/modules \
-D OPENCV_ENABLE_NONFREE=ON \
..
make -j 'number of gpu'
make install
ldconfig
ln -s /usr/local/lib/python3.6/dist-packages/cv2/python-3.6/cv2.cpython-36m-x86_64-linux-gnu.so /usr/local/lib/python3.6/dist-packages/cv2/python-3.6/cv2.so
這對我有用!!
from ubuntu:12.10
# Ubuntu sides with libav, I side with ffmpeg.
run echo "deb http://ppa.launchpad.net/jon-severinsson/ffmpeg/ubuntu quantal main" >> /etc/apt/sources.list
run apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 1DB8ADC1CFCA9579
run apt-get update
run apt-get install -y -q wget curl
run apt-get install -y -q build-essential
run apt-get install -y -q cmake
run apt-get install -y -q python2.7 python2.7-dev
run wget 'https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg' && /bin/sh setuptools-0.6c11-py2.7.egg && rm -f setuptools-0.6c11-py2.7.egg
run curl 'https://raw.github.com/pypa/pip/master/contrib/get-pip.py' | python2.7
run pip install numpy
run apt-get install -y -q libavformat-dev libavcodec-dev libavfilter-dev libswscale-dev
run apt-get install -y -q libjpeg-dev libpng-dev libtiff-dev libjasper-dev zlib1g-dev libopenexr-dev libxine-dev libeigen3-dev libtbb-dev
add build_opencv.sh /build_opencv.sh
run /bin/sh /build_opencv.sh
run rm -rf /build_opencv.sh
我使用這個 Dockerfile,它就像一個魅力
FROM python:3.9
LABEL mantainer="Baher Elnaggar <eng.baher77@gmail.com>"
WORKDIR /opt/build
ENV OPENCV_VERSION="4.5.1"
RUN apt-get -qq update \
&& apt-get -qq install -y --no-install-recommends \
build-essential \
cmake \
git \
wget \
unzip \
yasm \
pkg-config \
libswscale-dev \
libtbb2 \
libtbb-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libopenjp2-7-dev \
libavformat-dev \
libpq-dev \
&& pip install numpy \
&& wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -O opencv.zip \
&& unzip -qq opencv.zip -d /opt \
&& rm -rf opencv.zip \
&& cmake \
-D BUILD_TIFF=ON \
-D BUILD_opencv_java=OFF \
-D WITH_CUDA=OFF \
-D WITH_OPENGL=ON \
-D WITH_OPENCL=ON \
-D WITH_IPP=ON \
-D WITH_TBB=ON \
-D WITH_EIGEN=ON \
-D WITH_V4L=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=$(python3.9 -c "import sys; print(sys.prefix)") \
-D PYTHON_EXECUTABLE=$(which python3.9) \
-D PYTHON_INCLUDE_DIR=$(python3.9 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON_PACKAGES_PATH=$(python3.9 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
/opt/opencv-${OPENCV_VERSION} \
&& make -j$(nproc) \
&& make install \
&& rm -rf /opt/build/* \
&& rm -rf /opt/opencv-${OPENCV_VERSION} \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get -qq autoremove \
&& apt-get -qq clean
如果您想將 Opencv dnn 與 CUDA 一起使用,並將火炬與 gpu(可選)一起使用,我建議您這樣做:
FROM nvidia/cuda:10.2-base-ubuntu18.04
WORKDIR /home
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Minsk
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get update && apt-get install -y \
keyboard-configuration \
nvidia-driver-440\
curl \
ca-certificates \
sudo \
git \
bzip2 \
libx11-6 \
cmake \
g++ \
wget \
build-essential \
cmake \
git \
unzip \
pkg-config \
python-dev \
python-opencv \
libopencv-dev \
libjpeg-dev \
libpng-dev \
libtiff-dev \
libgtk2.0-dev \
python-numpy \
python-pycurl \
libatlas-base-dev \
gfortran \
webp \
python-opencv \
qt5-default \
libvtk6-dev \
zlib1g-dev \
libcudnn7=7.6.5.32-1+cuda10.2 \
libcudnn7-dev=7.6.5.32-1+cuda10.2 \
python3-pip \
python3-venv \
nano
RUN alias python='/usr/bin/python3'
RUN pip3 install numpy
RUN pip3 install torch
#RUN echo ############ && python --version && ##############
# Install Open CV - Warning, this takes absolutely forever
RUN git clone https://github.com/opencv/opencv_contrib && \
cd opencv_contrib && \
git fetch --all --tags && \
git checkout tags/4.3.0 && \
cd .. && \
git clone https://github.com/opencv/opencv.git && \
cd opencv && \
git checkout tags/4.3.0
#RUN pip3 freeze && which python3 && python3 --version
################################################################
#################### OPENCV CPU ################################
#RUN pwd &&\
# cd opencv && \
# pwd &&\
# mkdir build && cd build && \
# pwd &&\
# cmake -DCMAKE_BUILD_TYPE=Release \
# -DENABLE_CXX14=ON \
# -DBUILD_PERF_TESTS=OFF \
# -DOPENCV_GENERATE_PKGCONFIG=ON \
# -DWITH_XINE=ON \
# -DBUILD_TESTS=OFF \
# -DENABLE_PRECOMPILED_HEADERS=OFF \
# -DCMAKE_SKIP_RPATH=ON \
# -DBUILD_WITH_DEBUG_INFO=OFF \
# -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
#
# -Dopencv_dnn_superres=ON /usr/bin/ .. && \
# make -j$(nproc) && \
# make install
################################################################
#################### OPENCV GPU ################################
RUN cd opencv && mkdir build && cd build && \
cmake -DCMAKE_BUILD_TYPE=Release \
-D CMAKE_CXX_COMPILER=/usr/bin/g++ \
-D PYTHON_DEFAULT_EXECUTABLE=$(which python3) \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D BUILD_opencv_python3=ON \
-D HAVE_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda-10.2 \
-D CUDA_BIN_PATH=/usr/local/cuda-10.2 \
-D CUDNN_INCLUDE_DIR=/usr/include/cudnn.h \
-D WITH_CUDNN=ON \
-D CUDA_ARCH_BIN=6.1 \
-D OPENCV_DNN_CUDA=ON \
-D WITH_CUDA=ON \
-D BUILD_opencv_cudacodec=OFF \
-D WITH_GTK=ON \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CUDA_HOST_COMPILER:FILEPATH=/usr/bin/gcc-7 \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
-D WITH_TBB=ON \
-D WITH_OPENMP=ON \
-D WITH_IPP=ON \
-D BUILD_EXAMPLES=OFF \
-D BUILD_DOCS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_TESTS=OFF \
-D WITH_CSTRIPES=ON \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D CMAKE_INSTALL_PREFIX=/usr/local/ \
-DBUILD_opencv_python3=ON \
-D PYTHON_DEFAULT_EXECUTABLE=$(which python3) \
-D PYTHON3_EXECUTABLE=$(which python3) \
-D PYTHON_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_INCLUDE_DIR=$(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
-D PYTHON3_LIBRARY=$(python3 -c "from distutils.sysconfig import get_config_var;from os.path import dirname,join ; print(join(dirname(get_config_var('LIBPC')),get_config_var('LDLIBRARY')))") \
-D PYTHON3_NUMPY_INCLUDE_DIRS=$(python3 -c "import numpy; print(numpy.get_include())") \
-D PYTHON3_PACKAGES_PATH=$(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
-D OPENCV_GENERATE_PKGCONFIG=ON .. \
-Dopencv_dnn_superres=ON /usr/bin/ .. && \
make -j$(nproc) && \
make install
RUN pip3 install opencv/build/python_loader
然后你可以運行
import torch
import os
print('availabe:',torch.cuda.is_available() )
print('devices available', torch.cuda.device_count())
print('device id:',torch.cuda.current_device() )
print('device address', torch.cuda.device(0))
print('gpu model',torch.cuda.get_device_name(0))
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
print('Using device:', device)
#Additional Info when using cuda
if device.type == 'cuda':
print(torch.cuda.get_device_name(0))
print('Memory Usage:')
print('Allocated:', round(torch.cuda.memory_allocated(0)/1024**3,1), 'GB')
print('Cached: ', round(torch.cuda.memory_reserved(0)/1024**3,1), 'GB')
import cv2
print("DNN_BACKEND_CUDA",cv2.dnn.DNN_BACKEND_CUDA)
print("DNN_BACKEND_CUDA",cv2.dnn.DNN_TARGET_CUDA)
你會得到類似的東西:
Using device: cuda
availabe: True
devices available 1
device id: 0
device address <torch.cuda.device object at 0x7f5a0a392550>
gpu model GeForce GTX 1050 Ti
Memory Usage:
Allocated: 0.0 GB
Cached: 0.0 GB
DNN_BACKEND_CUDA 5
DNN_BACKEND_CUDA 6
對於某些應用程序(如我的情況),您可以使用 python 包opencv-python-headless 。 如果您所做的只是基於 CPU 的 opencv 活動,這將直接在 docker 鏡像中工作。
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./camera_controller.py" ]
在requirements.txt中使用這一行
opencv-python-headless==<your version>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.