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
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
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.
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
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