web-dev-qa-db-fra.com

Installer OpenCV dans un conteneur Docker

J'essaye de dockeriser une application Python, qui dépend d'OpenCV. J'ai essayé plusieurs méthodes, mais je continue à avoir ... ImportError: No module named cv2 lorsque j'essaie d'exécuter l'application. 

Voici mon Dockerfile actuel.

FROM python:2.7

MAINTAINER Ewan Valentine <[email protected]>

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 

Et mon fichier 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
15
Ewan Valentine

Corrigé avec une configuration légèrement différente

FROM python:2.7

MAINTAINER Ewan Valentine <[email protected]>

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/Itseez/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 
14
Ewan Valentine

Merci d'avoir posté ceci. J'ai rencontré le même problème et essayé votre solution. Même s'il semblait installer OpenCV, cela m'a laissé un problème de versions en conflit de la bibliothèque Python six, alors j'ai choisi un chemin différent. Je pense qu'un moyen plus simple de faire cela consiste à installer Anaconda dans votre conteneur, puis à ajouter OpenCV. J'utilise Python 2, donc tout mon fichier Docker pour installer OpenCvv est simplement:

FROM continuumio/anaconda
EXPOSE 5000

ADD . /code-directory
WORKDIR code-directory
RUN conda install opencv

CMD ["python", "run-code.py"]

Ceci installera Anaconda à partir du fichier Dockerfile de continuumio/anaconda, puis utilisera Anaconda pour installer opencv. Il existe un fichier Dockerfile continuumio continu pour Python 3 si vous en avez également besoin.

5
bradden_gross

Voici un image qui est construit sur Ubuntu 16.04 avec Python2 + Python3 + OpenCV. Vous pouvez le tirer en utilisant docker pull chennavarri/ubuntu_opencv_python

Voici le fichier Dockerfile (fourni dans le même référentiel dockerhub mentionné ci-dessus) qui installera opencv pour python2 et python3 sur Ubuntu 16.04 et définira également le lien raw1394 approprié. Copié à partir de 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

Quelques instructions supplémentaires pour les personnes commençant récemment par Docker:

  • Dans le répertoire où vous avez mis ce fichier Docker, créez l'image du menu fixe en tant que docker build -t ubuntu_cv .

  • Une fois l'image construite, vous pouvez vérifier en effectuant docker images

    REPOSITORY   TAG       IMAGE ID      CREATED             SIZE
    
    ubuntu_cv  latest    6210ddd6346b   24 minutes ago      2.192 GB
    
  • Vous pouvez démarrer un conteneur de menu fixe en tant que docker run -t -i ubuntu_cv:latest

3
blueskin
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
1
MingCHEN