OpenCV macOS 环境配置

目的

如何在macOS环境下进行OpenCV的配置,使用Python进行计算机视觉(Computer Vision)开发。

简介

OpenCV是开源的计算机视觉类库,支持C,C++,Java,Python编程语言,可以进行跨平台开发,该类库集成了图像和视频的输入输出,图像处理,物体识别,机器学习和深度神经网络等实用工具类。

内容

本博文基于Python3.6和OpenCV3进行讲解,当前系统版本为macOS 10.12+,在macOS系统上面安装OpenCV是一件非常操蛋的事情。

  1. 安装Xcode,如果是第一次安装使用,需要获得苹果开发者授权,安装完后,执行命令,按照提示输入accept

    1
    $ sudo xcodebuild -license
  2. 安装苹果命令行工具,该工具包含了make,GCC,clang。该步骤是必须要执行的。

    1
    $ sudo xcode-select --install
  3. 安装苹果系统包管理器Homebrew,类似Debian系统系列的apt-get

    1
    $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  4. macOS系统虽然自带了Python,但是为了避免与系统冲突,我们自己安装专门进行开发的Python。

    1
    $ brew install python3
  5. 检查Python版本是否正确安装配置环境变量。

    1
    2
    $ which python3
    /usr/local/bin/python3

    如果Python没有配置好环境变量,需要手动更新环境变量~/.bash_profile

    1
    2
    # Python3
    export PATH=/usr/local/bin/python3:$PATH

    更新环境变量配置。

    1
    $ source ~/.bash_profile
  6. 安装Python虚拟环境virtualenvvirtualenvwrapper

    1
    $ pip install virtualenv virtualenvwrapper

    如果出现OSError: [Errno 1] Operation not permitted by six,可使用下面命令行解决问题。

    1
    $ sudo pip install virtualenvwrapper --ignore-installed six
  7. 配置环境变量~/.bash_profile

    1
    2
    # Virtualenv/VirtualenvWrapper
    source /usr/local/bin/virtualenvwrapper.sh

    更新环境变量。

    1
    $ source ~/.bash_profile
  8. 创建Python3虚拟环境,使用mkvirtualenv。使用该命令创建名为cv的虚拟环境,该环境独立于系统其他环境,有自己独立的包目录,避免包冲突。

    1
    $ mkvirtualenv cv -p python3

    进入创建好的cv环境。

    1
    $ workon cv
  9. 安装Numpy

    1
    $ pip install numpy
  10. 正式编译之前,需要安装编译,图像I/O和优化相关的工具包的。

    1
    2
    3
    $ brew install cmake pkg-config
    $ brew install jpeg libpng libtiff openexr
    $ brew install eigen tbb
  11. 从Gitub下载OpenCV源代码。

    1
    2
    3
    $ cd ~
    $ git clone https://github.com/opencv/opencv
    $ git clone https://github.com/opencv/opencv_contrib
  12. 接下来正式开始编译配置,首先创建并进入编译目录。

    1
    2
    3
    $ cd ~/opencv
    $ mkdir build
    $ cd build
  13. 构建自己环境的CMake命令,这里给出的是该命令的模版。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D PYTHON3_LIBRARY=YYY \
    -D PYTHON3_INCLUDE_DIR=ZZZ \
    -D PYTHON3_EXECUTABLE=$VIRTUAL_ENV/bin/python \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=ON ..
  14. 替换上面命令的YYYZZZ,可参考我本地的配置,不要复制粘贴,每个人的机器配置会有不同。
    PYTHON3_LIBRARY=YYY:libpython3.6.dylib的路径。
    PYTHON3_INCLUDE_DIR=ZZZ:python3.6m的路径。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
    -D PYTHON3_LIBRARY=/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/config-3.6m-darwin/libpython3.6.dylib \
    -D PYTHON3_INCLUDE_DIR=/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/include/python3.6m \
    -D PYTHON3_EXECUTABLE=$VIRTUAL_ENV/bin/python \
    -D BUILD_opencv_python2=OFF \
    -D BUILD_opencv_python3=ON \
    -D INSTALL_PYTHON_EXAMPLES=ON \
    -D INSTALL_C_EXAMPLES=OFF \
    -D BUILD_EXAMPLES=ON ..

    配置好后,执行该命令。

  15. 开始编译,编译时间在30-90分钟左右,取决于你的机器配置。

    1
    $ make -j4
  16. 编译完后,如果没有出现错误,执行安装命令。

    1
    $ sudo make install
  17. 安装成功后,检查python包安装目录是否有类似cv2.cpython-35m-darwin.so的文件。

    1
    2
    3
    $ cd /usr/local/lib/python3.6/site-packages/
    $ ls -l *.so
    -rwxr-xr-x 1 root admin 3694564 Nov 15 11:28 cv2.cpython-35m-darwin.so
  18. cv2.cpython-35m-darwin.so重新命名为cv2.so

    1
    2
    3
    4
    5
    6
    7
    $ cd /usr/local/lib/python3.6/site-packages/
    $ mv cv2.cpython-35m-darwin.so cv2.so
    $ cd ~

    $ cd ~/.virtualenvs/cv/lib/python3.6/site-packages/
    $ ln -s /usr/local/lib/python3.6/site-packages/cv2.so cv2.so
    $ cd ~
  19. 校验OpenCV是否已经正确安装并引入。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ workon cv
    $ python
    Python 3.6.2 (default, Jul 17 2017, 16:44:45)
    [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import cv2
    >>> cv2.__version__
    '3.3.0-dev'
    >>>

参考资料
OpenCV Documentation
OpenCV Tutorials
Homebrew