Instalar OpenCV en un contenedor Docker

Estoy intentando hacer una aplicación de Python, que depende de OpenCV. Lo intenté de diferentes maneras, pero sigo recibiendo … ImportError: No module named cv2 cuando bash ejecutar la aplicación.

Aquí está mi file Docker actual.

 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 

Y mi file 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 

Solucionado con una configuration ligeramente diferente

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

Gracias por publicar esto. Me encontré con el mismo problema e intenté con su solución, y aunque parecía instalar OpenCV, me dejó con un problema de versiones conflictivas de la biblioteca de Python six así que tomé una ruta diferente. Creo que una forma más sencilla de hacerlo es instalar Anaconda en su contenedor y luego agregar OpenCV. Estoy usando Python 2 así que todo mi file Docker para instalar OpenCvv es simplemente:

 FROM continuumio/anaconda EXPOSE 5000 ADD . /code-directory WORKDIR code-directory RUN conda install opencv CMD ["python", "run-code.py"] 

Esto instalará Anaconda del continuo / anaconda Dockerfile y luego usará Anaconda para instalar opencv. Hay una secuencia continua separada de Dockerfile para Python 3 si la necesita también.

Aquí hay una image que se basa en Ubuntu 16.04 con Python2 + Python3 + OpenCV. Puede tirar de ella usando el docker pull chennavarri/ubuntu_opencv_python

Aquí está el file Docker (proporcionado en el mismo repository dockerhub mencionado anteriormente) que instalará opencv para python2 y python3 en Ubuntu 16.04 y también configurará el enlace raw1394 apropiado. Copiado 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 

Algunas instrucciones adicionales para las personas que recién comienzan con Docker:

  • En el directory donde colocas este Dockerfile, crea la image de la window acoplable como docker build -t ubuntu_cv .

  • Una vez que se construye la image, puede verificar haciendo las docker images

     REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu_cv latest 6210ddd6346b 24 minutes ago 2.192 GB 
  • Puede iniciar un contenedor de docker como 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