提问者:小点点

在Docker容器中安装OpenCV


我正在尝试Dockerise 一个依赖于OpenCV的Python应用程序。我已经尝试了几种不同的方法,但我不断得到...导入错误:当我尝试运行应用程序时,没有名为 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

共3个答案

匿名用户

使用稍微不同的设置进行修复

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六库版本冲突的问题,所以我采取了不同的路线。我认为更简单的方法是在容器中安装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"]

这将从continuum io/anaconda docker文件安装Anaconda,然后使用Anaconda安装opencv。如果你也需要的话,Python 3有一个单独的continuumio Dockerfile文件。

匿名用户

这是一张基于Ubuntu 16.04和Python2Python3OpenCV构建的图片。您可以使用docker pull chennavarri/ubuntuopencv_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 。

    构建图像后,您可以通过执行<code>docker images</code>进行检查

    REPOSITORY   TAG       IMAGE ID      CREATED             SIZE
    
    ubuntu_cv  latest    6210ddd6346b   24 minutes ago      2.192 GB
    

    您可以将docker容器命名为< code > docker run-t-I Ubuntu _ cv:latest