2016-04-26 1297 views
11

我在尝试Dockerise一个依赖于OpenCV的Python应用程序。我尝试了几种不同的方式,但是我一直在尝试运行该应用程序时... ImportError: No module named cv2在Docker容器中安装OpenCV

这是我目前的Dockerfile。

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 

而且我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 

回答

8

修正了一个稍微不同的建立

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 
5

感谢张贴此。我遇到了同样的问题并尝试了你的解决方案,尽管它似乎安装了OpenCV,但它给我带来了一个与Python 6库相冲突的版本问题,所以我采取了不同的路线。我认为更简单的方法是在你的容器中安装Anaconda,然后添加OpenCV。我使用Python 2,以便获得安装我的整个Dockerfile OpenCvv就是:

FROM continuumio/anaconda 
EXPOSE 5000 

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

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

这将从continuumio /蟒蛇Dockerfile安装蟒蛇,然后它会使用Anaconda安装OpenCV。如果你需要的话,还有一个Python 3的独立连续Dockerfile。

+0

嗨,无法使用与码头工人畅达它说,没有发现畅达。 –

3

这是一个image,它是在Ubuntu 16.04上搭建的,使用Python2 + Python3 + OpenCV。您可以使用 docker pull chennavarri/ubuntu_opencv_python

拉这里的Dockerfile将安装OpenCV两个python2和python3在Ubuntu 16.04(在上述相同dockerhub回购提供),并设置相应的raw1394链接。

  • 在你把这个Dockerfile目录,建立搬运工形象docker build -t ubuntu_cv .

  • 一旦图像:从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 images

    REPOSITORY TAG  IMAGE ID  CREATED    SIZE 
    
    ubuntu_cv latest 6210ddd6346b 24 minutes ago  2.192 GB 
    
  • 可以启动泊坞窗容器作为docker run -t -i ubuntu_cv:latest

1
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 
+0

应该在你的答案中包含build_opencv.sh –